mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-08-03 07:59:09 +08:00
131 lines
3.0 KiB
Bash
131 lines
3.0 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
|
|
START=99
|
|
STOP=10
|
|
USE_PROCD=1
|
|
|
|
DIR=/sbin
|
|
PROG=pollmydevice
|
|
|
|
error()
|
|
{
|
|
echo "${initscript}:" "$@" 1>&2
|
|
}
|
|
|
|
check_client_id()
|
|
{
|
|
[ ! -d "/etc/pollmydevice" ] && mkdir -p "/etc/pollmydevice"
|
|
[ ! -d "/tmp/pollmydevice" ] && mkdir -p "/tmp/pollmydevice"
|
|
INTERFACE=$1
|
|
if [[ -e "/etc/pollmydevice/client_id$INTERFACE" ]]; then
|
|
cp /etc/pollmydevice/client_id$INTERFACE /tmp/pollmydevice/client_id$INTERFACE
|
|
else
|
|
. /usr/share/libubox/jshn.sh
|
|
json_load "$(ubus call system board)"
|
|
json_get_var MODEL model
|
|
case "$MODEL" in
|
|
"TELEOFIS LT70" | "TELEOFIS LT70U")
|
|
SERIALNUM=$(getinfo serialnum)
|
|
if [[ "$SERIALNUM" != "n/a" ]]; then
|
|
SERIALNUM="0x$SERIALNUM"
|
|
CLIENT_ID=$((SERIALNUM*100000+INTERFACE))
|
|
fi
|
|
rs485_count=$(fw_printenv -n rs485_count 2>/dev/null)
|
|
if [[ "$rs485_count" == "2" ]]; then
|
|
if [ -e /etc/pollmydevice/exp_port ]; then
|
|
/etc/pollmydevice/exp_port
|
|
rm /etc/pollmydevice/exp_port
|
|
uci set pollmydevice.2.rs485_mode='1'
|
|
uci commit pollmydevice
|
|
fi
|
|
fi
|
|
;;
|
|
"TELEOFIS RTUx68")
|
|
SERIALNUM=$((0x$(getserialnum)))
|
|
CLIENT_ID=$((SERIALNUM*100000+INTERFACE))
|
|
;;
|
|
"TELEOFIS RTUx68 RE-DE")
|
|
SERIALNUM=$((0x$(getserialnum)))
|
|
CLIENT_ID=$((SERIALNUM*100000+INTERFACE))
|
|
if [ -e /etc/pollmydevice/exp_port ]; then
|
|
/etc/pollmydevice/exp_port
|
|
rm /etc/pollmydevice/exp_port
|
|
fi
|
|
;;
|
|
esac
|
|
[[ -n "$CLIENT_ID" ]] && echo $CLIENT_ID > /tmp/pollmydevice/client_id$INTERFACE
|
|
fi
|
|
}
|
|
|
|
clear_firewall_settings()
|
|
{
|
|
RULE=$(uci show firewall | grep -m1 port-pollmydevice)
|
|
while [[ -n "$RULE" ]]; do
|
|
RULE_N=$(echo $RULE | cut -d[ -f2 | cut -d] -f1)
|
|
uci delete firewall.@rule[$RULE_N]
|
|
RULE=$(uci show firewall | grep -m1 port-pollmydevice)
|
|
done
|
|
uci commit firewall
|
|
}
|
|
|
|
open_firewall_port()
|
|
{
|
|
config_get MODE "$1" mode
|
|
if [[ "$MODE" == "server" ]]; then
|
|
config_get OPEN "$1" open_in_firewall
|
|
if [[ "$OPEN" -eq "1" ]]; then
|
|
config_get DESCRIPTION "$1" desc
|
|
config_get PORT "$1" server_port
|
|
if [[ -n "$PORT" ]] && [[ -n "$DESCRIPTION" ]]; then
|
|
DESCRIPTION=$(echo $DESCRIPTION | tr -d ' ')
|
|
RULE=$(uci add firewall rule)
|
|
uci set firewall.$RULE.name=$DESCRIPTION-$1-port-pollmydevice
|
|
uci set firewall.$RULE.src='wan'
|
|
uci set firewall.$RULE.proto='tcp'
|
|
uci set firewall.$RULE.target='ACCEPT'
|
|
uci set firewall.$RULE.dest_port=$PORT
|
|
uci commit firewall
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
|
|
start_service_daemon()
|
|
{
|
|
procd_open_instance
|
|
procd_set_param command "$DIR/$PROG"
|
|
procd_set_param respawn ${respawn_threshold:-360} ${respawn_timeout:-5} ${respawn_retry:-0}
|
|
procd_close_instance
|
|
}
|
|
|
|
start_service()
|
|
{
|
|
config_load 'pollmydevice'
|
|
config_foreach check_client_id 'interface'
|
|
clear_firewall_settings
|
|
config_foreach open_firewall_port 'interface'
|
|
/etc/init.d/firewall restart 2>/dev/null
|
|
start_service_daemon
|
|
}
|
|
|
|
service_triggers()
|
|
{
|
|
procd_add_reload_trigger 'pollmydevice'
|
|
}
|
|
|
|
stop()
|
|
{
|
|
service_stop $DIR/$PROG
|
|
}
|
|
|
|
# reload_service()
|
|
# {
|
|
# service_stop $DIR/$PROG
|
|
# start_service
|
|
# }
|
|
|
|
reload_service() {
|
|
stop
|
|
start
|
|
}
|