summaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua96
1 files changed, 96 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..8277536
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,96 @@
+publishing_mqtt = false
+publishing_http = false
+
+watchdog = tmr.create()
+chip_id = string.format("%06X", node.chipid())
+device_id = "esp8266_" .. chip_id
+mqtt_prefix = "uart/" .. device_id
+mqttclient = mqtt.Client(device_id, 120)
+
+dofile("config.lua")
+
+function wdr()
+ watchdog:stop()
+ watchdog:start()
+end
+
+function wd_err()
+ print("Watchdog:Err")
+ node.restart()
+end
+
+function mqtt_err(client)
+ print("MQTT:Err")
+end
+
+function wifi_err()
+ print("WiFi:Err " .. wifi.sta.status())
+end
+
+function setup_client()
+ print("MQTT:Rdy " .. mqtt_prefix)
+ publishing_mqtt = true
+ mqttclient:publish(mqtt_prefix .. "/state", "online", 0, 1, function(client)
+ client:subscribe(mqtt_prefix .. "/in", 0)
+ publishing_mqtt = false
+ end)
+end
+
+function connect_mqtt()
+ print("")
+ print("WiFi:Rdy " .. wifi.sta.getip())
+ mqttclient:on("connect", setup_client)
+ mqttclient:on("offline", mqtt_err)
+ --mqttclient:on("connfail", mqtt_err)
+ mqttclient:on("message", print_mqtt)
+ mqttclient:lwt(mqtt_prefix .. "/state", "offline", 0, 1)
+ mqttclient:connect(mqtt_host)
+end
+
+function connect_wifi()
+ wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, connect_mqtt)
+ wifi.eventmon.register(wifi.eventmon.STA_DHCP_TIMEOUT, wifi_err)
+ wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, wifi_err)
+ wifi.setmode(wifi.STATION)
+ wifi.sta.config(station_cfg)
+ wifi.sta.connect()
+end
+
+function print_mqtt(client, topic, message)
+ print("RX:" .. message)
+ wdr()
+ collectgarbage()
+end
+
+function publish_mqtt(topic, payload, retain)
+ if publishing_mqtt then
+ print("MQTT:Err")
+ else
+ publishing_mqtt = true
+ mqttclient:publish(topic, payload, 0, retain or 0, function(client)
+ publishing_mqtt = false
+ print("MQTT:OK")
+ wdr()
+ collectgarbage()
+ end)
+ end
+end
+
+function publish_influx(payload)
+ if publishing_http then
+ print("Influx:Err")
+ else
+ publishing_http = true
+ http.post(influx_url, influx_header, payload, function(code, data)
+ publishing_http = false
+ print("Influx:OK")
+ wdr()
+ collectgarbage()
+ end)
+ end
+end
+
+watchdog:register(90 * 1000, tmr.ALARM_SEMI, wd_err)
+watchdog:start()
+
+connect_wifi()