#!/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") web_iface = cur.get(config,"web","iface") 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() 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) 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) url = web_url.."?stype="..type.."&sid="..id.."¶m="..param.."&value="..val command = "curl" if web_iface then command = command.." --interface "..web_iface end if web_user then command = command.." -u "..web_user..":"..web_pass end command = command.." \""..url.."\"" print(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 = "..k..", Value = "..v) submitValue(sensor_type,sensor_id,k,v) end end end getConfig() serialin=io.open(serial_port,"r") while 1 do line=serialin:read() print(line) processLine(line) end