- Убран отдельный скрипт инициализации (датчики инициализируются непосредственно...
[weathermon.git] / lib / wm_util.lua
1 #!/usr/bin/lua
2
3 local socket = require "socket"
4
5 function startswith(String,Start)
6    if String then
7      return string.sub(String,1,string.len(Start))==Start
8    else
9      return False
10    end    
11 end
12
13 function trim(s)
14    return (s:gsub("^%s*(.-)%s*$", "%1"))
15 end
16
17 function url_decode(str)
18   if not str then return nil end
19   str = string.gsub (str, "+", " ")
20   str = string.gsub (str, "%%(%x%x)", function(h) return
21     string.char(tonumber(h,16)) end)
22   str = string.gsub (str, "\r\n", "\n")
23   return str
24 end
25
26 function url_encode(str)
27   if (str) then
28     str = string.gsub (str, "\n", "\r\n")
29     str = string.gsub (str, "([^%w %-%_%.%~])",
30         function (c) return string.format ("%%%02X", string.byte(c)) end)
31     str = string.gsub (str, " ", "+")
32   end
33   return str    
34 end
35
36 function capture(cmd, raw)
37   local f = assert(io.popen(cmd, 'r'))
38   local s = assert(f:read('*a'))
39   f:close()
40   if raw then return s end
41   s = string.gsub(s, '^%s+', '')
42   s = string.gsub(s, '%s+$', '')
43   s = string.gsub(s, '[\n\r]+', ' ')
44   return s
45 end
46
47 function mqtt_encode(str)
48   if (str) then
49     str = string.gsub (str, "\n", "")
50     str = string.gsub (str, "/", "-")
51   end
52   return str    
53 end
54
55 function touch(name)
56   local file = io.open(name, 'a')
57   file:close()
58 end
59
60 function write_file(name,data)
61   pcall(function ()
62     local f = io.open(name,"w")
63     io.output(f)
64     io.write(data)
65     io.close(f)
66   end)
67 end
68
69 function file_exists(name)
70    local f=io.open(name,"r")
71    if f~=nil then io.close(f) return true else return false end
72 end
73
74 function get_file_content(name)
75   local f = io.open(name,"r")
76   if f ~= nil then 
77     local content = trim(f:read("*all"))
78     io.close(f) 
79     return content
80   else 
81     return false 
82   end
83 end
84
85 function sleep(sec)
86   socket.sleep(sec)
87 end
88
89 function split(s, delimiter)
90     local result = {};
91     for match in (s..delimiter):gmatch("(.-)"..delimiter) do
92         result[#result+1] = match
93     end
94     return result;
95 end
96
97 function list_dir(name)
98     local lfs = require "lfs"
99     local result = {}
100     for name in lfs.dir(name) do
101         if not startswith(name,".") then
102           result[#result+1] = name
103         end  
104     end
105     return result
106 end
107
108 function get_devid(config)
109
110   local uci = require "uci"
111
112   local web_devid = uci.get(config,"web","devid")
113   
114   if web_devid then
115     return web_devid
116   end  
117     
118   web_iface = uci.get(config,"web","iface")
119   
120   if not web_iface then
121     web_iface = list_dir('/sys/class/net/')[1]
122   end
123  
124   io.input("/sys/class/net/"..web_iface.."/address")
125
126   local web_devid = io.read("*line")
127   return web_devid:gsub(":",""):upper()
128
129 end