20f5aca9fa194d32e9a1b9d128dfa65d86a43ffc
[weathermon.git] / weathermon.lua
1 #!/usr/bin/lua
2
3 function getConfig()
4
5   local uci=require("uci")
6   local cur=uci.cursor()
7   local config="weathermon"
8
9   web_url  = cur.get(config,"web","url")
10   web_user = cur.get(config,"web","user")
11   web_pass = cur.get(config,"web","password")
12   web_devid = cur.get(config,"web","devid")
13   
14   io.input("/sys/class/net/eth0/address")
15   mac = io.read("*line")
16   mac = mac:gsub(":","")
17   mac = mac:upper()
18
19   web_devid = web_devid or mac
20
21   logging = cur.get(config,"logging","enabled") 
22
23 end
24
25 require "socket"
26
27 function sleep(sec)
28   socket.select(nil, nil, sec)
29 end
30
31 function splitStr(str,char)
32
33   local res = {}
34   local idx = 1
35
36
37   while str:len()>0 do
38     pos = str:find(char); 
39     if pos == nil then
40       res[idx]=str
41       str=""
42     else
43       res[idx]=str:sub(1,pos-1)
44       idx=idx+1
45       str=str:sub(pos+1)
46     end
47   end
48
49   return res
50
51 end
52
53 function printLog(str)
54   print(str)
55   if logging=="on" then
56     os.execute("logger -t weathermon "..str)
57   end 
58 end
59
60 function submitValue(type,id,param,val)
61
62   printLog("URL="..web_url)
63
64   url = web_url.."?stype="..type.."&sid="..id.."&param="..param.."&value="..val
65
66   printLog(url)
67
68   command = "curl"
69
70   if web_user then
71     command = command.." -u "..web_user..":"..web_pass
72   end
73
74   command = command.." \""..url.."\""
75
76   printLog("COMMAND=\""..command.."\"")
77   os.execute(command)
78   print("")
79
80 end
81
82 function processLine(str)
83
84   msg=splitStr(line,':')
85   msg_type=msg[1] or nil
86   msg_body=msg[2] or nil
87   if msg_type=="STATUS" then
88     printLog("Status: "..msg_body)
89   elseif msg_type=="ERROR" then
90     printLog("Error: "..msg_body)  
91   elseif msg_type=="SENSOR" then
92     printLog("SENSOR: "..msg_body)  
93     sens = splitStr(msg_body,",")
94     sensor = {}
95     idx = 1
96     sensor_type = nil
97     sensor_id = web_devid
98     for i,rec in ipairs(sens) do
99       recrd=splitStr(rec,'=')
100       key=recrd[1] or nil
101       value=recrd[2] or nil
102       if value then
103         if key=="TYPE" then
104           sensor_type=value
105         elseif key=="ID" then
106           sensor_id=value
107         else
108           sensor[key]=value
109         end
110       end
111     end
112     for k,v in pairs(sensor) do
113       printLog("Type = "..sensor_type..", ID = "..sensor_id..", Param = "..key..", Value = "..value)
114       submitValue(sensor_type,sensor_id,key,value)
115     end
116   end
117
118 end
119
120 getConfig()
121
122 line=arg[1]
123 print(line)
124 processLine(line)