WiFiSwitch/mqtt.lua
2015-09-13 22:05:36 +02:00

102 lines
2.5 KiB
Lua

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