X-Git-Url: https://git.rvb.name/weathermon.git/blobdiff_plain/299b29f352765c8fa399aea6157f62356ef036e8..7edb3771717d15f7c36d8459fa12b3d6f76d7d9a:/weathermon.lua?ds=sidebyside diff --git a/weathermon.lua b/weathermon.lua index 7a366b0..3208e30 100755 --- a/weathermon.lua +++ b/weathermon.lua @@ -1,7 +1,7 @@ #!/usr/bin/lua -require("json") -require("socket") +json = require("json") +socket = require("socket") function startswith(String,Start) if String then @@ -21,6 +21,17 @@ function url_encode(str) return str end +function capture(cmd, raw) + local f = assert(io.popen(cmd, 'r')) + local s = assert(f:read('*a')) + f:close() + if raw then return s end + s = string.gsub(s, '^%s+', '') + s = string.gsub(s, '%s+$', '') + s = string.gsub(s, '[\n\r]+', ' ') + return s +end + function mqtt_encode(str) if (str) then str = string.gsub (str, "\n", "") @@ -72,6 +83,7 @@ function getConfig(configname) end logging = cur.get(config,"logging","enabled") + touch_file = cur.get(config,"logging","touch_file") serial_port = cur.get(config,"serial","port") serial_baud = cur.get(config,"serial","baud") @@ -83,7 +95,7 @@ function getConfig(configname) if serial_port then command = "stty -F "..serial_port.." "..serial_baud - os.capture(command) + capture(command) end @@ -114,6 +126,13 @@ function getConfig(configname) end +function touch() + if touch_file then + local file = io.open(touch_file, 'w') + file:close() + end +end + function sleep(sec) socket.select(nil, nil, sec) end @@ -141,8 +160,11 @@ end function printLog(str) if logging=="on" then - os.execute("logger -t weathermon "..str) - else + capture("logger -t weathermon "..str) + print(str) + elseif logging=="syslog" then + capture("logger -t weathermon "..str) + elseif logging=="stdout" then print(str) end end @@ -161,9 +183,11 @@ function submitValue(type,id,param,val) command = command.." -u "..web_user..":"..web_pass end - command = command.." \""..url.."\"" + command = command.." \""..url.."\" 2>&1" - os.execute(command) + result = capture(command) + + touch() end @@ -175,7 +199,7 @@ function processJson(str) for key,value in pairs(msg) do if value then - if key=="model" then + if key=="model" or key=="device" then sensor_type=value elseif key=="id" then sensor_id=value @@ -187,9 +211,16 @@ function processJson(str) end end + if not sensor_id then + sensor_id = web_devid + end + if not (sensor_type==nil or sensor_id==nil or sensor_type=='' or sensor_id=='') then + if next(sensor)==nil then + sensor["command"]="alarm" + end for k,v in pairs(sensor) do - printLog("Type = "..sensor_type..", ID = "..sensor_id..", Param = "..k..", Value = "..v) + printLog("Type = "..sensor_type..", ID = "..sensor_id..", Param = "..k..", Value = \""..v.."\"") submitValue(sensor_type,sensor_id,k,v) if mqtt_client then mqtt_path=string.gsub(mqtt_topic,"{(.-)}", @@ -210,7 +241,7 @@ function processJson(str) end end else - printLog("Cannot parse sensor input: "..msg_body) + printLog("Cannot parse sensor input: "..str) end end @@ -311,7 +342,7 @@ function processLine(str) " \""..string.gsub(alarm_type,"\"","\\\"").. "\" \""..string.gsub(alarm_id,"\"","\\\"").. "\" \""..string.gsub(msg_body,"\"","\\\"").."\"" - os.execute(command) + capture(command) end else printLog("Cannot parse alarm input: "..msg_body) @@ -323,12 +354,12 @@ end getConfig(arg[1]) if mqtt_host then - MQTT = require "paho.mqtt" - mqtt_client = MQTT.client.create(mqtt_host, mqtt_port) + MQTT = require "mosquitto" + mqtt_client = MQTT.new(mqtt_id) if mqtt_user then - mqtt_client:auth(mqtt_user, mqtt_passwd) + mqtt_client:login_set(mqtt_user, mqtt_passwd) end - mqtt_client:connect(mqtt_id) + mqtt_client:connect(mqtt_host,mqtt_port) end if serial_port then @@ -344,7 +375,7 @@ else return end while 1 do - line=serialin:read() + line=serialin:read("*l") if line == nil then break end @@ -352,6 +383,6 @@ while 1 do if startswith(line,'{') then processJson(line) else - processLine(line) + processLine(line) end end