BROKER = "172.16.2.15" BRPORT = 1883 BRUSER = "" BRPWD = "" CLIENTID = "ESP8266-" .. node.chipid() SWITCH_PIN = 3 SWITCH_ID = 1 topics = {"IoT/Watchdog", "IoT/Switch" .. SWITCH_ID} TOPIC_WATCHDOG = 1 TOPIC_SWITCH = 2 pub_sem = 0 current_topic = 1 topicsub_delay = 50 id2 = 0 switch_state = false old_switch_state = true function alarm() node.restart() end gpio.mode(SWITCH_PIN, gpio.OUTPUT) gpio.write(SWITCH_PIN, gpio.LOW) m = mqtt.Client( CLIENTID, 120, BRUSER, BRPWD) tmr.alarm(4, 60000, 1, alarm) m:connect( BROKER , BRPORT, 0, function(conn) print("4") mqtt_sub() end) function mqtt_sub() if table.getn(topics) < current_topic then run_main_prog() else m:subscribe(topics[current_topic] , 0, function(conn) end) current_topic = current_topic + 1 tmr.alarm(5, topicsub_delay, 0, mqtt_sub ) end end function publish_status() if pub_sem == 0 then pub_sem = 1 local uptime = tmr.time() local switch_state_pres = 0 if (switch_state) then switch_state_pres = 1 end local msg = "{\"metadata\":{\"device\":\"WiFiSwitch" .. SWITCH_ID .. "\"}, \"data\":{\"uptime\":" .. uptime .. ", \"state\":" .. switch_state_pres .. "}}" m:publish("IoT/Status/WiFiSwitch" .. SWITCH_ID, msg ,0,0, function(conn) print("8: " .. id2 .. ", " .. switch_state_pres) pub_sem = 0 id2 = id2 +1 end) end end function run_main_prog() tmr.alarm(3, 1000, 1, publish_status ) m:on("message", function(conn, topic, data) print(topic .. ":" ) if (data ~= nil ) then print ( data ) if (topic == topics[TOPIC_SWITCH] and data == "switch on") then switch_state = true elseif (topic == topics[TOPIC_SWITCH] and data == "switch off") then switch_state = false elseif (topic == topics[TOPIC_SWITCH] and data == "switch toggle") then switch_state = not switch_state elseif (topic == topics[TOPIC_WATCHDOG] and data == "WauWau!") then print("9") tmr.alarm(4, 60000, 1, alarm) end if (switch_state ~= old_switch_state) then old_switch_state = switch_state if (switch_state) then gpio.write(SWITCH_PIN, gpio.LOW) else gpio.write(SWITCH_PIN, gpio.HIGH) end end end end ) end