wifi-presence: add new package
authorAdam Williams <redacted>
Sun, 20 Mar 2022 04:38:24 +0000 (22:38 -0600)
committerJonathan McCrohan <redacted>
Tue, 5 Apr 2022 12:37:55 +0000 (13:37 +0100)
See https://github.com/awilliams/wifi-presence for details.

Signed-off-by: Adam Williams <redacted>
net/wifi-presence/Makefile [new file with mode: 0644]
net/wifi-presence/files/wifi-presence.conf [new file with mode: 0644]
net/wifi-presence/files/wifi-presence.init [new file with mode: 0644]

diff --git a/net/wifi-presence/Makefile b/net/wifi-presence/Makefile
new file mode 100644 (file)
index 0000000..bea9e2a
--- /dev/null
@@ -0,0 +1,55 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=wifi-presence
+PKG_VERSION:=0.1.2
+PKG_RELEASE:=1
+
+PKG_SOURCE:=-$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/awilliams/wifi-presence/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=f5cf8bf36e3c17ad4b0486007532030760c22c5f63bd63707d911ab94bd744df
+
+PKG_LICENSE:=MIT
+PKG_MAINTAINER:=Adam Williams <pwnfactory@gmail.com>
+
+PKG_BUILD_DEPENDS:=golang/host
+PKG_BUILD_PARALLEL:=1
+PKG_USE_MIPS16:=0
+
+GO_PKG:=github.com/awilliams/wifi-presence
+GO_PKG_BUILD_PKG:=$(GO_PKG)/cmd/wifi-presence
+
+include $(INCLUDE_DIR)/package.mk
+include ../../lang/golang/golang-package.mk
+
+define Package/wifi-presence
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=WiFi presence detection with Home Assistant integration
+  URL:=https://github.com/awilliams/wifi-presence
+  DEPENDS:=$(GO_ARCH_DEPENDS)
+endef
+
+define Package/wifi-presence/description
+  WiFi presence detection with Home Assistant integration.
+  Publish WiFi client connect and disconnect events to MQTT.
+endef
+
+define Package/wifi-presence/conffiles
+/etc/config/wifi-presence
+endef
+
+define Package/wifi-presence/install
+       $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
+
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wifi-presence $(1)/usr/bin
+
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/wifi-presence.conf $(1)/etc/config/wifi-presence
+
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/wifi-presence.init $(1)/etc/init.d/wifi-presence
+endef
+
+$(eval $(call GoBinPackage,wifi-presence))
+$(eval $(call BuildPackage,wifi-presence))
diff --git a/net/wifi-presence/files/wifi-presence.conf b/net/wifi-presence/files/wifi-presence.conf
new file mode 100644 (file)
index 0000000..61529e8
--- /dev/null
@@ -0,0 +1,46 @@
+config wifi-presence main
+       ## MQTT broker address. Ex: 'tcp://192.168.1.2:1883'
+       ## Required.
+       option mqttAddr ''
+
+       ## MQTT client ID.
+       ## Defaults to 'wifi-presence.<hostname>'
+       # option mqttID ''
+
+       ## MQTT topic prefix.
+       ## Defaults to 'wifi-presence'
+       # option mqttPrefix 'wifi-presence'
+
+       ## MQTT username and password (optional).
+       # option mqttUsername ''
+       # option mqttPassword ''
+
+       ## Verbose logging output if true.
+       ## Defaults to false.
+       # option verbose 1
+
+       ## Debounce duration (using Go duration syntax). Ex: '5s', '10m', '1s', '0'
+       ## Time until a client is considered disconnected and MQTT disconnect message
+       ## is published.
+       ## Defaults to 10s.
+       # option debounce '10s'
+
+       ## Access Point (AP) name. Included in MQTT topic and message payload.
+       ## Defaults to hostname.
+       # option apName 'my-ap-name'
+
+       ## hostapd control interface sockets.
+       ## Separate multiple sockets using ':'. Ex: '/var/run/hostapd/wlan0:/var/run/hostapd/wlan1'.
+       ## The hostadp configuration file contains the location where these sockets
+       ## will be created.
+       ## Defaults to any Unix socket(s) found in /var/run/hostapd, which is
+       ## the default hostapd directory.
+       # option hostapdSocks ''
+
+       ## Home Assistant options:
+       ## Publish MQTT auto discovery messages for each configured device.
+       ## Default is true.
+       # option hassAutodiscovery 1
+       ## Set the MQTT topic prefix used by Home Assistant.
+       ## Default is 'homeassistant' (also Home Assistant's default value).
+       # option hassPrefix 'homeassistant'
diff --git a/net/wifi-presence/files/wifi-presence.init b/net/wifi-presence/files/wifi-presence.init
new file mode 100644 (file)
index 0000000..7e8d26e
--- /dev/null
@@ -0,0 +1,66 @@
+#!/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
+
+        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
+
+        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}"
+
+        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
+}
git clone https://git.99rst.org/PROJECT