X-Git-Url: https://git.rvb.name/weathermon.git/blobdiff_plain/299b29f352765c8fa399aea6157f62356ef036e8..b0a690ee18f5c2f894edc7c30fd6204c262670fe:/weathermon.lua diff --git a/weathermon.lua b/weathermon.lua index 7a366b0..b43b72c 100755 --- a/weathermon.lua +++ b/weathermon.lua @@ -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", "") @@ -83,7 +94,7 @@ function getConfig(configname) if serial_port then command = "stty -F "..serial_port.." "..serial_baud - os.capture(command) + capture(command) end @@ -141,7 +152,7 @@ end function printLog(str) if logging=="on" then - os.execute("logger -t weathermon "..str) + capture("logger -t weathermon "..str) else print(str) end @@ -163,7 +174,7 @@ function submitValue(type,id,param,val) command = command.." \""..url.."\"" - os.execute(command) + result = capture(command) end @@ -175,7 +186,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 @@ -188,6 +199,9 @@ function processJson(str) 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) submitValue(sensor_type,sensor_id,k,v) @@ -311,7 +325,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)