1if not modules then modules = { } end modules [ ' mtx-youless ' ] = {
2 version = 1 . 002 ,
3 comment = " script to fetch data from kwh meter polling device " ,
4 author = " Hans Hagen, PRAGMA-ADE, Hasselt NL " ,
5 copyright = " PRAGMA ADE " ,
6 license = " see context related readme files "
7}
8
9
10
11
12
13require ( " util-you " )
14
15local formatters = string . formatters
16
17
18
19local helpinfo = [[
20<?xml version="1.0"?>
21<application>
22 <metadata>
23 <entry name="name">mtx-youless</entry>
24 <entry name="detail">youless Fetcher</entry>
25 <entry name="version">1.100</entry>
26 </metadata>
27 <flags>
28 <category name="basic">
29 <subcategory>
30 <flag name="collect"><short>collect data from device</short></flag>
31 <flag name="nobackup"><short>don't backup old datafile</short></flag>
32 <flag name="nofile"><short>don't write data to file (for checking)</short></flag>
33 <flag name="electricity"><short>collected eletricity data (p)</short></flag>
34 <flag name="gas"><short>collected gas data</short></flag>
35 <flag name="pulse"><short>collected eletricity data (s)</short></flag>
36 <flag name="host"><short>ip address of device</short></flag>
37 <flag name="auto"><short>fetch (refresh) all data every hour</short></flag>
38 </subcategory>
39 </category>
40 </flags>
41 <examples>
42 <category>
43 <title>Example</title>
44 <subcategory>
45 <example><command>mtxrun --script youless --collect --host=192.168.2.50 --electricity somefile.lua</command></example>
46 <example><command>mtxrun --script youless --collect --host=192.168.2.50 --gas somefile.lua</command></example>
47 <example><command>mtxrun --script youless --collect --host=192.168.2.50 --pulse somefile.lua</command></example>
48 <example><command>mtxrun --script youless --collect --host=192.168.2.50 --auto file-prefix</command></example>
49 </subcategory>
50 </category>
51 </examples>
52</application>
53 ]]
54
55local application = logs . application {
56 name = " mtx-youless " ,
57 banner = " YouLess Fetcher 1.10 " ,
58 helpinfo = helpinfo ,
59}
60
61local report = application . report
62
63scripts = scripts or { }
64scripts . youless = scripts . youless or { }
65
66local arguments = environment . arguments
67local files = environment . files
68
69function scripts . youless . collect ( )
70 local host = arguments . host
71 local nobackup = arguments . nobackup
72 local nofile = arguments . nofile
73 local password = arguments . password
74 local filename = files [ 1 ]
75 local delay = tonumber ( arguments . delay ) or 12 * 60 * 60
76
77 local function fetch ( filename , variant )
78 local data = utilities . youless . collect {
79 filename = filename ,
80 host = host ,
81 variant = variant ,
82 nobackup = nobackup ,
83 password = password ,
84 }
85 if type ( data ) ~ = " table " then
86 report ( " no data collected " )
87 elseif filename = = " " then
88 report ( " data collected but not saved " )
89 end
90 report ( " using variant %a " , variant )
91 if filename ~ = " " then
92 report ( " using file %a " , filename )
93 end
94 report ( " current time %a " , os . now ( ) )
95 end
96
97 if not host then
98 host = " 192.168.2.50 "
99 report ( " using default host %a " , host )
100 else
101 report ( " using host %a " , host )
102 end
103 if nobackup then
104 report ( " not backing up data file " )
105 end
106
107 if arguments . auto then
108 local filename_electricity = formatters [ " %s-electricity.lua " ] ( filename ~ = " " and filename or " youless " )
109 local filename_gas = formatters [ " %s-gas.lua " ] ( filename ~ = " " and filename or " youless " )
110 local filename_pulse = formatters [ " %s-pulse.lua " ] ( filename ~ = " " and filename or " youless " )
111 while true do
112 fetch ( filename_electricity , " electricity " )
113 fetch ( filename_gas , " gas " )
114 fetch ( filename_pulse , " pulse " )
115 report ( " sleeping for %i seconds " , delay )
116 io . flush ( )
117 os . sleep ( delay )
118 end
119 else
120 local variant = ( environment . arguments . electricity and " electricity " ) or
121 ( environment . arguments . watt and " electricity " ) or
122 ( environment . arguments . gas and " gas " ) or
123 ( environment . arguments . pulse and " pulse " )
124 if not variant then
125 report ( " provide variant --electricity, --gas or --pulse " )
126 return
127 end
128 if nofile then
129 filename = " "
130 elseif not filename or filename = = " " then
131 filename = formatters [ " youless-%s.lua " ] ( variant )
132 end
133 fetch ( filename , variant )
134 end
135end
136
137if environment . argument ( " collect " ) then
138 scripts . youless . collect ( )
139elseif environment . argument ( " exporthelp " ) then
140 application . export ( environment . argument ( " exporthelp " ) , environment . files [ 1 ] )
141else
142 application . help ( )
143end
144 |