![]() |
|
Log all bus traffic - Printable Version +- LogicMachine Forum (https://forum.logicmachine.net) +-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1) +--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8) +--- Thread: Log all bus traffic (/showthread.php?tid=273) |
Log all bus traffic - gjniewenhuijse - 12.04.2016 I like to log all the bus traffic to my mysql database. How to do this with on a resource frendly way? RE: Log all bus traffic - edgars - 15.04.2016 for now you can mark all objects with Log check-box and use this example to export CSV once hour/day to external server: http://openrb.com/example-export-last-hour-csv-object-log-file-to-external-ftp-server-from-lm2/ In the future, we will make a real-time example for exporting this data. RE: Log all bus traffic - gjniewenhuijse - 19.04.2016 maybe something like this? But how to show the datahex in readable format? And is it possible to add a general handler, also for groupreads etc? Code: if not client then
require('genohm-scada.eibdgm')
-- handle group writes
function eventhandler(event)
log(event) -- later send this to mysql
--log(knxdatatype.decode(event.datahex,?))
end
-- knx connection
client = eibdgm:new({ timeout = 1 })
client:sethandler('groupwrite', eventhandler)
-- start-up time
sec, usec = os.microtime()
end
-- handle knx
client:step()RE: Log all bus traffic - admin - 20.04.2016 Something like this, though it will not work on older FW where grp.all function is not implemented. Code: if not client then
require('genohm-scada.eibdgm')
objects = grp.all()
datatypes = {}
for _, object in ipairs(objects) do
datatypes[ object.id ] = object.datatype
end
function writehandler(event)
local dpt = datatypes[ event.dstraw ]
if dpt then
local value = knxdatatype.decode(event.datahex, dpt)
end
end
function readhandler(event)
log(event)
end
client:sethandler('groupwrite', writehandler)
client:sethandler('groupresponse', writehandler)
client:sethandler('groupread', readhandler)
end
-- handle knx
client:step()RE: Log all bus traffic - Ruslan - 20.04.2016 May be modify script for support sending to SYSLOG collector? RE: Log all bus traffic - Ruslan - 26.04.2016 My simple variant for sending all data to SYSLOG server In User Libraries need create function syslog: Code: function syslog(message)
require('socket')
local client = socket.udp()
if client then
client:sendto(message, '192.168.19.254', 514)
client:close()
end
endAfter this markup all objects with tag "All" Create new event-based script "Send all messages to SYSLOG" for tag "All" Code: name = grp.alias(event.dst)
-- Fix Group name for empty values
if (name == nil or name == '') then
name = "Noname"
end
value = '"'..name..'" '..event.src..' '..event.dst..' '..event.type..' '..knxdatatype.decode(event.datahex, grp.find(event.dst).datatype)..' 0x'..event.datahex
syslog(value)Sample of log: 2016-04-26T22:52:34.084297+03:00 192.168.16.200 "Wind speed (m/s)" 1.0.1 5/0/6 groupwrite 2.6 0x0104 2016-04-26T22:52:39.817766+03:00 192.168.16.200 "Wind speed (m/s)" 1.0.1 5/0/6 groupwrite 4.5 0x01C2 2016-04-26T22:52:42.632619+03:00 192.168.16.200 "Wind speed (m/s)" 1.0.1 5/0/6 groupwrite 2.7 0x010E 2016-04-26T22:52:45.231188+03:00 192.168.16.200 "Wind speed (m/s)" 1.0.1 5/0/6 groupwrite 3.3 0x014A 2016-04-26T22:52:50.097556+03:00 192.168.16.200 "Wind speed (m/s)" 1.0.1 5/0/6 groupwrite 1.6 0x00A0 2016-04-26T22:52:51.595747+03:00 192.168.16.200 "Noname" 1.3.2 2/2/3 groupwrite 21.4 0x0C2E 2016-04-26T22:52:57.809525+03:00 192.168.16.200 "Temp in room 37" 1.3.22 2/1/24 groupwrite 24.02 0x0CB1 |