From: Roman Bazalevsky <rvb@rvb.name>
Date: Thu, 15 Sep 2016 09:44:51 +0000 (+0300)
Subject: Добавлена начальная поддержка MQTT
X-Git-Url: https://git.rvb.name/weathermon.git/commitdiff_plain/fab7ecb0a35af3393e87edd3dfd36f72abba4911?ds=sidebyside;hp=-c

Добавлена начальная поддержка MQTT
---

fab7ecb0a35af3393e87edd3dfd36f72abba4911
diff --git a/weathermon.lua b/weathermon.lua
index 19cd912..3e940cd 100755
--- a/weathermon.lua
+++ b/weathermon.lua
@@ -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()
diff --git a/weathermon.uci b/weathermon.uci
index 27631ac..6c2f6e4 100644
--- a/weathermon.uci
+++ b/weathermon.uci
@@ -1,5 +1,5 @@
 config internal 'web'
-	option url http://estia.rvb-home.lan/meteo/send.php
+	option url http://server/path/send.php
 	option user meteo
 	option password somestrictpassword
 	option iface eth0
@@ -11,3 +11,6 @@ config internal 'serial'
 
 config internal 'logging'
 	option enabled on
+
+config internal 'mqtt'
+        option host server