-- mqtt.lua -- prefix = "/IoTmanager" device = "/relay01" mqttConfig = {} mqttConfig.host = '192.168.0.50' mqttConfig.port = '9443' mqttConfig.user = 'iot' mqttConfig.pass = 'iot' mqttConfig.secure = 1 print ("Trying to connect to MQTT host " .. mqttConfig.host .. " on port " .. mqttConfig.port) local status1 = 1 gpio12 = 6 gpio.mode(gpio12, gpio.OUTPUT) --gpio.write(gpio12, gpio.LOW) gpio.write(gpio12, gpio.HIGH) local status2 = 1 gpio13 = 7 gpio.mode(gpio13, gpio.OUTPUT) --gpio.write(gpio13, gpio.LOW) gpio.write(gpio13, gpio.HIGH) -- initiate the mqtt client and set keepalive timer to 120sec mqtt = mqtt.Client(device, 120, mqttConfig.user, mqttConfig.pass, 1) mqtt:on("connect", function(con) print ("connected to MQTT " .. mqttConfig.host .. " broker\n") end) mqtt:on("offline", function(con) print ("\tdisconected from MQTT broker, reconnecting\n") end) -- on receive message mqtt:on("message", function(conn, topic, data) print ("\tReceived topic : " .. topic .. " / data : " .. data) if (topic == prefix .. device .. "/toggle1/control") then if data == "1" then print "\t\tReceived message ON@Relay1" gpio.write(gpio12, gpio.HIGH) status1 = 1 elseif data == "0" then print "\t\tReceived message OFF@Relay1" gpio.write(gpio12, gpio.LOW) status1 = 0 end elseif topic == prefix .. device .. "/toggle2/control" then if data == "1" then print "Received message ON@Relay2" gpio.write(gpio13, gpio.HIGH) status2 = 1 elseif data == "0" then print "Received message OFF@Relay2" gpio.write(gpio13, gpio.LOW) status2 = 0 end else local id = 1 msg = cjson.decode(data) print('\tNew request from IoT Manager: id="' .. id .. '", command="' .. msg.command .. '", param="' .. msg.param .. '"'); if msg.command == "getPages" then mqtt:publish(prefix .. device .. "/response", '{"pages" : [{"pageId" : 10, "pageName" : "Page 1"}, {"pageId" : 20, "pageName" : "Page 2"}]}', 1, 1, function(conn) end) elseif msg.command == "getPageById" then --if (msg.param == 10 or msg.param == 0) then msg = '{"id":"1", "page": "Page 1", "pageId": 10, "widget":"toggle", "descr":"Relay 1", "topic":"' .. prefix .. device ..'/toggle1"}' mqtt:publish(prefix .. device .. "/config", msg, 1, 1, function(conn) end) mqtt:publish(prefix .. device .. "/toggle1/status", "{\"status\":" .. status1 .. "}", 1, 1, function(conn) end) --end --if (msg.param == 20 or msg.param == 0) then msg = '{"id":"2", "page": "Page 2", "pageId": 20, "widget":"toggle", "descr":"Relay 2", "topic":"' .. prefix .. device ..'/toggle2"}' mqtt:publish(prefix .. device .. "/config", msg, 1, 1, function(conn) end) mqtt:publish(prefix .. device .. "/toggle2/status", "{\"status\":" .. status2 .. "}", 1, 1, function(conn) end) --end end end end) mqtt:connect(mqttConfig.host, mqttConfig.port, mqttConfig.secure, 1, function(conn) print ("connected to " .. mqttConfig.host .. " MQTT broker\n") -- subscribe topic with qos = 2 mqtt:subscribe({[prefix .. "/+/+/control"]=1, [prefix .. "/+/request"]=1}, function(conn) end) end)