diff options
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 96 |
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() |