Добавлена начальная поддержка MQTT
[weathermon.git] / weathermon.lua
index 19cd912b13ffa8612f36eea9fdba9c71c43c4aa4..3e940cd8b89baa0962c1cde14284305fa894a8f2 100755 (executable)
@@ -12,25 +12,51 @@ function getConfig()
   web_devid = cur.get(config,"web","devid")
 
   web_iface = cur.get(config,"web","iface")
+
+  if not web_devid then
   
-  if web_iface then
-    io.input("/sys/class/net/"..web_iface.."/address")
-  else
-    io.input("/sys/class/net/eth0/address")
-  end
+    if web_iface then
+      io.input("/sys/class/net/"..web_iface.."/address")
+    else
+      io.input("/sys/class/net/eth0/address")
+    end
+
+    mac = io.read("*line")
+    mac = mac:gsub(":","")
+    mac = mac:upper()
 
-  mac = io.read("*line")
-  mac = mac:gsub(":","")
-  mac = mac:upper()
+    web_devid = mac
+
+  end
 
-  web_devid = web_devid or mac
   logging = cur.get(config,"logging","enabled") 
 
   serial_port = cur.get(config,"serial","port")
   serial_baud = cur.get(config,"serial","baud")
 
-  command = "stty -F  "..serial_port.." "..serial_baud
-  os.execute(command)
+  if serial_port then
+
+    command = "stty -F  "..serial_port.." "..serial_baud
+    os.execute(command)
+
+  end
+
+  mqtt_host = cur.get(config,"mqtt","host")
+  mqtt_port = cur.get(config,"mqtt","port")
+  mqtt_id = cur.get(config,"mqtt","id")
+  mqtt_topic = cur.get(config,"mqtt","topic")
+
+  if mqtt_host and not mqtt_id then
+    mqtt_id="weather-"..web_devid
+  end
+
+  if mqtt_host and not mqtt_port then
+    mqtt_port = 1883
+  end
+
+  if mqtt_host and not mqtt_topic then
+    mqtt_topic = 'weathermon/'..web_devid
+  end
 
 end
 
@@ -121,9 +147,16 @@ function processLine(str)
         end
       end
     end
+    mqtt_param = {}
     for k,v in pairs(sensor) do
       printLog("Type = "..sensor_type..", ID = "..sensor_id..", Param = "..k..", Value = "..v)
       submitValue(sensor_type,sensor_id,k,v)
+      mqtt_param[k]=v
+    end
+    mqtt_msg = { type=sensor_type, data=mqtt_param }
+    if mqtt_client then
+      serializedString = json.encode(mqtt_msg)
+      mqtt_client:publish(mqtt_topic,serializedString)
     end
   end
 
@@ -131,6 +164,13 @@ end
 
 getConfig()
 
+if mqtt_host then
+  MQTT = require "paho.mqtt"
+  mqtt_client = MQTT.client.create(mqtt_host, mqtt_port)
+  mqtt_client:connect(mqtt_id)
+  json = require( "json" )
+end
+
 serialin=io.open(serial_port,"r")
 while 1 do
   line=serialin:read()