#!/usr/bin/lua
-require("json")
-require("socket")
+json = require("json")
+socket = require("socket")
function startswith(String,Start)
if String then
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", "")
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")
if serial_port then
command = "stty -F "..serial_port.." "..serial_baud
- os.capture(command)
+ capture(command)
end
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
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
command = command.." -u "..web_user..":"..web_pass
end
- command = command.." \""..url.."\""
+ command = command.." \""..url.."\" 2>&1"
- os.execute(command)
+ result = capture(command)
+
+ touch()
end
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
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,"{(.-)}",
end
end
else
- printLog("Cannot parse sensor input: "..msg_body)
+ printLog("Cannot parse sensor input: "..str)
end
end
" \""..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)
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
return
end
while 1 do
- line=serialin:read()
+ line=serialin:read("*l")
if line == nil then
break
end
if startswith(line,'{') then
processJson(line)
else
- processLine(line)
+ processLine(line)
end
end