1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
if not modules then modules = { } end modules ['mtx-youless'] = {
version = 1.002,
comment = "script to fetch data from kwh meter polling device",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE",
license = "see context related readme files"
}
-- This script can fetch data from a youless device (http://www.youless.nl/) where data
-- is merged into a file. The data concerns energy consumption (current wattage as well
-- as kwh usage). There is an accompanying module to generate graphics.
require("util-you")
local formatters = string.formatters
-- the script
local helpinfo = [[
<?xml version="1.0"?>
<application>
<metadata>
<entry name="name">mtx-youless</entry>
<entry name="detail">youless Fetcher</entry>
<entry name="version">1.00</entry>
</metadata>
<flags>
<category name="basic">
<subcategory>
<flag name="collect"><short>collect data from device</short></flag>
<flag name="nobackup"><short>don't backup old datafile</short></flag>
<flag name="nofile"><short>don't write data to file (for checking)</short></flag>
<flag name="kwh"><short>summative kwh data</short></flag>
<flag name="watt"><short>collected watt data</short></flag>
<flag name="host"><short>ip address of device</short></flag>
</subcategory>
</category>
</flags>
<examples>
<category>
<title>Example</title>
<subcategory>
<example><command>mtxrun --script youless --collect --host=192.168.2.50 --kwh</command></example>
<example><command>mtxrun --script youless --collect --host=192.168.2.50 --watt somefile.lua</command></example>
</subcategory>
</category>
</examples>
</application>
]]
local application = logs.application {
name = "mtx-youless",
banner = "YouLess Fetcher 1.00",
helpinfo = helpinfo,
}
local report = application.report
scripts = scripts or { }
scripts.youless = scripts.youless or { }
function scripts.youless.collect()
local host = environment.arguments.host
local variant = environment.arguments.kwh and "kwh" or environment.arguments.watt and "watt"
local nobackup = environment.arguments.nobackup
local nofile = environment.arguments.nofile
local password = environment.arguments.password
local filename = environment.files[1]
if not variant then
report("provide variant --kwh or --watt")
return
else
report("using variant %a",variant)
end
if not host then
host = "192.168.2.50"
report("using default host %a",host)
else
report("using host %a",host)
end
if nobackup then
report("not backing up data file")
end
if not filename and not nofile then
filename = formatters["youless-%s.lua"](variant)
end
if filename ~= "" then
report("using file %a",filename)
end
local data = utilities.youless.collect {
filename = filename,
host = host,
variant = variant,
nobackup = nobackup,
password = password,
}
if type(data) ~= "table" then
report("no data collected")
elseif filename == "" then
report("data collected but not saved")
end
report("current time %a",os.now())
end
if environment.argument("collect") then
scripts.youless.collect()
elseif environment.argument("exporthelp") then
application.export(environment.argument("exporthelp"),environment.files[1])
else
application.help()
end
|