108
20.
-- csv buffer
21.
buffer ={'"date","address","name","value"'}
22.
23.
-- get object logs
24.
query='SELECT src, address, datahex, logtime, eventtype FROM objectlog WHERE logtime>=
? ORDER BY id DESC'
25.
for _, row in ipairs(db:getall(query, logtime))do
26.
object = objects[tonumber(row.address)]
27.
28.
-- found matching object and event type is group write
29.
if object and row.eventtype=='write' then
30.
datatype=object.datatype
31.
32.
-- check that object datatype is set
33.
if datatype then
34.
-- decode data
35.
data =knxdatatype.decode(row.datahex, datatype)
36.
37.
-- remove null chars from char/string datatype
38.
if datatype==dt.char or datatype==dt.string then
39.
data =data:gsub('%z+', '')
40.
-- date to DD.MM.YYYY
41.
elseifdatatype==dt.date then
42.
data =string.format('%.2d.%.2d.%.2d', data.day, data.month, data.year)
43.
-- time to HH:MM:SS
44.
elseif datatype==dt.time then
45.
data =string.format('%.2d:%.2d:%.2d', data.hour, data.minute, data.second)
46.
end
47.
else
48.
data =''
49.
end
50.
51.
-- format csv row
52.
logdate=os.date('%Y.%m.%d %H:%M:%S', row.logtime)
53.
csv=string.format('%q,%q,%q,%q', logdate, knxlib.decodega(row.address), object.name,
tostring(data))
54.
55.
-- add to buffer
56.
table.insert(buffer, csv)
57.
end
58.
end
59.
60.
-- upload to ftp only when there's data in buffer
61.
if #buffer > 1 then
62.
result, err =socket.ftp.put(ftpfile, table.concat(buffer, '\r\n'))
63.
end
64.