This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Read values in scheduled script store in ftp
#12
Instead of get past hour data, just read every adress with tag energy.

Code:
-- Mail Attachment subject = 'Energy Values' --to = 'mail@mail.com'' to = mail@mail.com' -- get past hour data (3600 seconds) logtime = os.time() - 60 * 60 -- list of objects by id objects = {'Energy'} -- objects with logging enabled query = 'SELECT address, datatype, name FROM objects WHERE disablelog=0' for _, object in ipairs(db:getall(query)) do   objects[ tonumber(object.address) ] = {     datatype = tonumber(object.datatype),     name = tostring(object.name or ''),   } end -- csv buffer buffer = { '"date","address","name","value"' } -- get object logs query = 'SELECT src, address, datahex, logtime, eventtype FROM objectlog WHERE logtime >= ? ORDER BY id DESC' for _, row in ipairs(db:getall(query, logtime)) do   object = objects[ tonumber(row.address) ]   -- found matching object and event type is group write   if object and row.eventtype == 'write' then     datatype = object.datatype     -- check that object datatype is set     if datatype then       -- decode data       data = knxdatatype.decode(row.datahex, datatype)       -- remove null chars from char/string datatype       if datatype == dt.char or datatype == dt.string then         data = data:gsub('%z+', '')       -- date to DD.MM.YYYY       elseif datatype == dt.date then         data = string.format('%.2d.%.2d.%.2d', data.day, data.month, data.year)       -- time to HH:MM:SS       elseif datatype == dt.time then         data = string.format('%.2d:%.2d:%.2d', data.hour, data.minute, data.second)       end     else       data = ''     end     -- format csv row     logdate = os.date('%Y.%m.%d %H:%M:%S', row.logtime)     csv = string.format('%q,%q,%q,%q', logdate, knxlib.decodega(row.address), object.name, tostring(data))     -- add to buffer     table.insert(buffer, csv)   end end -- transform table to string for csv file data1 = table.concat(buffer, '\r\n')   -- make sure these settings are correctat   local settings = {     -- "from" field, only e-mail must be specified here   from = 'mail@mail.com'',     -- smtp username   user = 'mail@mail.com'',     -- smtp password   password = 'Password',     -- smtp server     server = 'smtp.gmail.com',     -- smtp server port     port = 465,     -- enable ssl, required for gmail smtp     secure = 'sslv23',   }   mime = require("mime")   ltn12 = require("ltn12")   local smtp = require('socket.smtp')   local escape = function(v)   return '<' .. tostring(v) .. '>'   end settings.from = escape(settings.from) settings.rcpt = { escape(to) } settings.source = smtp.message{    headers = {     to = to,       subject = subject,     },    body = {       preable = "This email contains 1 attachment.",       [1] = {       body = mime.eol(0, [["This message is automaticly send, Do not reply on this e-mail."]])       },       [2] = {      headers = {       ["content-type"] = 'text/plain; name="Objectlog.csv"',       ["content-disposition"] = 'attachment; filename="Objectlog.csv"',      },       body = data1       },     epilogue = "End of mail"    } } r, e = smtp.send(settings) if (e) then   io.stderr:write("Could not send email: ", e, "\n") end
Reply


Messages In This Thread
RE: Read values in scheduled script store in ftp - by Rauschentofft - 12.01.2021, 19:16

Forum Jump: