openwrt-packages/net/wifi-presence/files/wifi-presence.init

89 lines
3.3 KiB
Bash

#!/bin/sh /etc/rc.common
USE_PROCD=1
START=95
# stops before networking stops
STOP=89
PROG=/usr/bin/wifi-presence
CONF=wifi-presence
start_service() {
# Load config.
config_load "${CONF}"
local apName
local debounce
local hassAutodiscovery
local hassPrefix
local hostapdSocks
local mqttAddr
local mqttID
local mqttUsername
local mqttPassword
local mqttPrefix
local sockDir
local verbose
local runAsUser
local runAsGroup
config_get apName main apName
config_get debounce main debounce
config_get hassAutodiscovery main hassAutodiscovery
config_get hassPrefix main hassPrefix
config_get hostapdSocks main hostapdSocks
config_get mqttAddr main mqttAddr
config_get mqttID main mqttId
config_get mqttUsername main mqttUsername
config_get mqttPassword main mqttPassword
config_get mqttPrefix main mqttPrefix
config_get sockDir main sockDir
config_get_bool verbose main verbose
config_get runAsUser main runAsUser
config_get runAsGroup main runAsGroup
procd_open_instance
procd_set_param command ${PROG}
[ -n "${apName}" ] && procd_append_param command "-apName=${apName}"
[ -n "${debounce}" ] && procd_append_param command "-debounce=${debounce}"
[ -n "${hassAutodiscovery}" ] && procd_append_param command "-hass.autodiscovery=${hassAutodiscovery}"
[ -n "${hassPrefix}" ] && procd_append_param command "-hass.prefix=${hassPrefix}"
[ -n "${hostapdSocks}" ] && procd_append_param command "-hostapd.socks=${hostapdSocks}"
[ -n "${mqttAddr}" ] && procd_append_param command "-mqtt.addr=${mqttAddr}"
[ -n "${mqttID}" ] && procd_append_param command "-mqtt.id=${mqttID}"
[ -n "${mqttUsername}" ] && procd_append_param command "-mqtt.username=${mqttUsername}"
[ -n "${mqttPassword}" ] && procd_append_param command "-mqtt.password=${mqttPassword}"
[ -n "${mqttPrefix}" ] && procd_append_param command "-mqtt.prefix=${mqttPrefix}"
[ -n "${sockDir}" ] && procd_append_param command "-sockDir=${sockDir}"
[ -n "${verbose}" ] && procd_append_param command "-verbose=${verbose}"
if [ -z "${runAsUser}" ] && [ -z "${runAsGroup}" ]; then
# If both runAsUser and runAsGroup are unspecified, then
# determine their values by looking at the owner of the hostapd sockets.
#
# It would be preferable to use 'stat' to determine the owner of the socket,
# but it may not be present on all systems, so instead we revert to parsing ls output.
local sockOwner=$(find /var/run/hostapd/ -type s -maxdepth 1 -exec ls -ld {} \; | head -n 1 | awk '{ print $3 }')
if [ -n "${sockOwner}" ]; then
runAsUser="${sockOwner}"
runAsGroup="${sockOwner}"
fi
fi
[ -n "${runAsUser}" ] && procd_set_param user "${runAsUser}"
[ -n "${runAsGroup}" ] && procd_set_param group "${runAsGroup}"
procd_set_param file "/etc/config/${CONF}"
procd_set_param stdout 1
procd_set_param stderr 1
# Restart every 5 seconds, indefinitely.
procd_set_param respawn 0 5 0
procd_close_instance
}