04.10.2023, 08:07
(This post was last modified: 04.10.2023, 08:08 by manos@dynamitec.)
(17.01.2022, 08:17)admin Wrote: Escaping of the "to" address was missing.
Here's a rewritten script with clearer structure. You only need to modify the to/settings/subject at the to top of the script. SSL settings do not matter anymore because newer SSL library automatically negotiates the highest supported SSL/TLS version between server/client.
Code:to = 'to@example.com'
settings = {
-- "from" field, only e-mail must be specified here
from = 'sender@example.com',
-- smtp username
user = 'sender@example.com',
-- smtp password
password = '12345678',
-- smtp server
server = 'smtp.gmail.com',
-- smtp server port
port = 465,
-- enable ssl, required for gmail smtp
secure = 'sslv23',
}
subject = 'CSV logs'
logtime = os.time() - 60 * 60 -- last hour (3600 seconds)
buffer = {'"date","address","name","value"'}
query = [[
SELECT o.id, o.datatype, o.name, ol.datahex, ol.logtime, ol.eventtype
FROM objectlog ol
JOIN objects o ON ol.address=o.id
WHERE ol.logtime >= ?
ORDER BY ol.id DESC
]]
for _, row in ipairs(db:getall(query, logtime)) do
if row.datatype and row.eventtype == 'write' then
data = grp.decodevalue(row.datahex, row.datatype)
logdate = os.date('%Y.%m.%d %H:%M:%S', row.logtime)
buffer[ #buffer + 1 ] = string.format('%q,%q,%q,%q',
logdate, knxlib.decodega(row.id), row.name, tostring(data))
end
end
csv = table.concat(buffer, '\r\n')
smtp = require('socket.smtp')
mime = require('mime')
ltn12 = require('ltn12')
function escape(v)
return '<' .. tostring(v) .. '>'
end
to = escape(to)
msgt = {
headers = {
to = to,
['content-type'] = 'text/csv',
['content-disposition'] = 'attachment; filename="logs.csv"',
['content-transfer-encoding'] = 'BASE64',
subject = subject,
},
body = ltn12.source.chain(
ltn12.source.string(csv),
ltn12.filter.chain(mime.encode('base64'), mime.wrap('base64'))
)
}
settings.source = smtp.message(msgt)
settings.from = escape(settings.from)
settings.rcpt = { to }
res, err = smtp.send(settings)
log(res, err)
Hello Admin,
I would like to have something similar but instead of sending the logs by mail just export per 24h all logs to the LM ftp. Or if possible if the database of 50k points is full then export to the internal ftp.
The task I need to achieve is a long period of telegrams recording and analyzing in a later phase. the period would be something about two weeks to one month.
Is this possible or not?
Regards Manos