op-packages/pollmydevice/files/pollmydevice.init
github-actions[bot] b86d032e91 🤞 Sync 2026-04-23 06:19:46
2026-04-23 06:19:46 +08:00

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
}