#!/usr/bin/lua function getConfig() local uci=require("uci") local cur=uci.cursor() local config="weathermon" web_url = cur.get(config,"web","url") web_user = cur.get(config,"web","user") web_pass = cur.get(config,"web","password") web_devid = cur.get(config,"web","devid") io.input("/sys/class/net/eth0/address") mac = io.read("*line") mac = mac:gsub(":","") mac = mac:upper() web_devid = web_devid or mac logging = cur.get(config,"logging","enabled") end require "socket" function sleep(sec) socket.select(nil, nil, sec) end function splitStr(str,char) local res = {} local idx = 1 while str:len()>0 do pos = str:find(char); if pos == nil then res[idx]=str str="" else res[idx]=str:sub(1,pos-1) idx=idx+1 str=str:sub(pos+1) end end return res end function printLog(str) print(str) if logging=="on" then os.execute("logger -t weathermon "..str) end end function submitValue(type,id,param,val) printLog("URL="..web_url) url = web_url.."?stype="..type.."&sid="..id.."¶m="..param.."&value="..val printLog(url) command = "curl" if web_user then command = command.." -u "..web_user..":"..web_pass end command = command.." \""..url.."\"" printLog("COMMAND=\""..command.."\"") os.execute(command) print("") end function processLine(str) msg=splitStr(line,':') msg_type=msg[1] or nil msg_body=msg[2] or nil if msg_type=="STATUS" then printLog("Status: "..msg_body) elseif msg_type=="ERROR" then printLog("Error: "..msg_body) elseif msg_type=="SENSOR" then printLog("SENSOR: "..msg_body) sens = splitStr(msg_body,",") sensor = {} idx = 1 sensor_type = nil sensor_id = web_devid for i,rec in ipairs(sens) do recrd=splitStr(rec,'=') key=recrd[1] or nil value=recrd[2] or nil if value then if key=="TYPE" then sensor_type=value elseif key=="ID" then sensor_id=value else sensor[key]=value end end end for k,v in pairs(sensor) do printLog("Type = "..sensor_type..", ID = "..sensor_id..", Param = "..key..", Value = "..value) submitValue(sensor_type,sensor_id,key,value) end end end getConfig() line=arg[1] print(line) processLine(line)