Log2Syslog Mehrzeilig auswerten

Begonnen von Jostar, 27 Februar 2021, 09:25:43

Vorheriges Thema - Nächstes Thema

Jostar

Guten Abend,

irgendwie stehe ich vor einem Problemchen. Mein Log2Syslog läuft um Statusmeldungen von Webcams zu empfangen. Diese haben das Format:
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: <182> Feb 22 09:54:53 192.168.178.138 "EventStart"
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: {
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box:    "Code" : "VideoMotion",
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box:    "Index" : 1,
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box:    "RegionName" : [ "Tor" ]
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box: }
2021-02-22 09:54:53 Log2Syslog SyslogServer cam1.fritz.box:
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box: <182> Feb 22 09:54:54 192.168.178.138 "EventStop"
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box: {
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box:    "Code" : "VideoMotion",
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box:    "Index" : 1,
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box:    "RegionName" : [ "Tor" ]
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box: }
2021-02-22 09:54:54 Log2Syslog SyslogServer cam1.fritz.box:


Mittels "parseFn" bekomme ich die Meldung (mit gleichem Zeitstempel im Log oben) zeilenweise auch ausgewertet, aber eigentlich brauche ich alles zwischen den geschweiften Klammern, also eine Möglichkeit mehrere Zeilen auf einmal in einer Funktion auszuwerden. Also im Beispiel oben gehört zu "EventStart" der Ort "Tor". Das Bedeutet, das am Tor ein Bewegungsalarm erkannt wurde.
attr useEOF 1
hat scheinbar keinen Einfluss.

Wie kann man mehrzeilige Log-Meldungen in Log2Syslog auswerten?

Grüße
Raspberry Pi(s) mit FHEM auf Rasbian Jessie/Strech, DbLog/DbRep mit mySQL, piface, 1Wire-USB-Master von SMS-GUARD, RFXtrx433E

DS_Starter

Guten Morgen,

der SyslogServer verarbeitet die Informationen zeilenweise so wie sie vom Sender angeboten/übermittelt werden.
Wenn du die relevanten Informationen in einer Zeile benötigst um sie dann auswerten zu können, musst du auf der Senderseite ansetzen und dafür sorgen dass die Infos in einer Zeile gesendet werden.
Sofern möglich wäre ein Ansatz die Infos als JSON zu serialisieren.
Werden die Daten vom SyslogServer als ein Datensatz empfangen kann man sie als Reading ausgeben und per JSON auswerten etc.

Kommt nun ganz darauf an welche Möglichkeiten auf Senderseite du hast.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Jostar

Danke Heiko,

danke für die schnelle Antwort. Auf der Senderseite habe ich leider keinen Einfluss (Webcam Technaxx).
Ich hätte angenommen, dass man optional eine Funktion ähnlich "useEOF" hat, also dem Modul sagt, was als Trigger für eine neue Nachricht gilt (in dem Fall geschweifte Klammern, bzw. nicht auf Zeilenumbrüche mit gleichem Zeitstempel reagiert).

2021.02.22 21:47:23 4: Log2Syslog SyslogServer - #######################################################
2021.02.22 21:47:23 4: Log2Syslog SyslogServer - #########        new Syslog UDP Receive       #########
2021.02.22 21:47:23 4: Log2Syslog SyslogServer - #######################################################
2021.02.22 21:47:23 4: Log2Syslog SyslogServer - #########             Parse Message           #########
2021.02.22 21:47:23 4: Log2Syslog SyslogServer - raw message -> <174> Feb 22 21:47:23 192.168.178.137 "EventStart"


Ich schätze, dass die Kamera nicht wirklich 7 Zeilen in der gleichen Sekunde schickt, weiß es aber nicht.
Klar scheint, dass die benutzerdefinierte Funktion unter "parseFn" pro Zeile, also 7 mal pro "Ereignis" aufgerufen wird.

Grüße
Raspberry Pi(s) mit FHEM auf Rasbian Jessie/Strech, DbLog/DbRep mit mySQL, piface, 1Wire-USB-Master von SMS-GUARD, RFXtrx433E

DS_Starter

Hmm, das ist schade. Vermutlich sendet die Cam die Daten zwar mit einem Sendevorgang, trennt die Daten aber mit "CRLF", was wiederum  im Syslogserver als das Ende eines Datensatzes gewertet wird. Ungünstig wäre es wenn sie obendrein kein EOF verwenden würde.

Du kannst im Device mal verbose 5 setzen und posten was ausgegeben wird. Vllt. sieht man noch etwas mehr.
Setz dir das Attr useEOF auf jeden Fall.
Möglicherweise kann ich abhängig von useEOF die Trennung durch CRLF abschalten. Das muss ich aber checken ob das lt. Protokoll-RFC ok wäre.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich habe das Modul jetzt so abgeändert, dass bei gesetztem useEOF ein CRLF nicht als Datentrenner verwendet wird.
Habe die Funktion mit deinen Daten mal angetestet und man bekommt damit eine Ergebniszeile die sich nun leicht auswerten lassen sollte:


   READINGS:
     ...
     2021-02-27 13:09:17   MSG_fhem.myds.me <182> Feb 22 09:54:53 192.168.178.138 "EventStart"{ "Code" : "VideoMotion", "Index" : 1, "RegionName" : [ "Tor" ]}
     ...


Voraussetzung ist ein gesetztes useEOF und natürlich muss der Sender EOF als Endezeichen verwenden.

Zum Test liegt die Version in meinem contrib.
Zum Download in der FHEMWEB Kommandozeile inklusive der Ausführungszeichen angeben und danach FHEM restarten:


"wget -qO ./FHEM/93_Log2Syslog.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_Log2Syslog.pm"


Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Konntest du testen ob das geänderte Modul deine Anforderungen erfüllt ?
Ich werde den Stand einchecken. Nach meinen Tests klappt das sehr gut und ich habe auch keine negativen Nebenwirkungen festgestellt.

Grüße
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Jostar

Guten Abend, besten Dank Heiko!

Ich bin jetzt erst dazu gekommen hier zu lesen. 93_Log2Syslog.pm:v5.12.4-s23875/2021-03-01 im Test:
Absolut perfekt, meine eigene ParseFn funktioniert nach wie vor (Attribut useEOF 1 war und ist gesetzt).

Ein Log auf verbose 5:
2021.03.06 22:28:22 4: Log2Syslog SyslogServer - #######################################################
2021.03.06 22:28:22 4: Log2Syslog SyslogServer - #########        new Syslog UDP Receive       #########
2021.03.06 22:28:22 4: Log2Syslog SyslogServer - #######################################################
2021.03.06 22:28:22 5: Log2Syslog SyslogServer - Buffer 102 chars ready to parse:
<174> Mar 06 22:28:22 192.168.178.137 "LogIn"
{
   "Address" : "192.168.178.64",
   "Type" : "CGI"
}

2021.03.06 22:28:22 4: Log2Syslog SyslogServer - #########             Parse Message           #########
2021.03.06 22:28:22 5: Log2Syslog SyslogServer - parse profile: ParseFn
2021.03.06 22:28:22 5: Log2Syslog SyslogServer - message peer: Webcam-Veranda.fritz.box,192.168.178.137
2021.03.06 22:28:22 4: Log2Syslog SyslogServer - raw message -> <174> Mar 06 22:28:22 192.168.178.137 "LogIn"
{
   "Address" : "192.168.178.64",
   "Type" : "CGI"
}

2021.03.06 22:28:22 4: Log2Syslog SyslogServer - parsed message -> FAC: local5, SEV: Informational, TS: 2021-03-06 22:28:22, HOST: , ID: , PID: Zugriff, MID: LogIn, CONT: 192.168.178.137


Es wird also nicht mehr zeilenweise abgearbeitet, sondern korrekt alles auf ein mal bearbeitet. Vielleicht hilft diese kurze Beschreibung ja wen mit ähnlicher Anwendung z.B. aus dem Hause Technaxx. Ich hatte mit der ParseFn   $PRIVAL,  $CONT, $PID und $MID entsprechend "bestückt". Mit
outputFields PRIVAL,FAC,SEV,HOST,DATE,ID,PID,MID,SDFIELD,CONT
reading erzeugen lassen, z.B.
MSG_Webcam-Terrasse.fritz.box PRIVAL: 166 || FAC: local4 || SEV: Informational || PID: Zugriff || MID: LogOut || CONT: 192.168.178.136
MSG_Webcam-Veranda.fritz.box PRIVAL: 174 || FAC: local5 || SEV: Informational || PID: Zugriff || MID: LogOut || CONT: 192.168.178.137

Darauf dann eine notify, dass pro "Sender" (Kameraname) ein Dummy bestückt mit den jeweiligen Readings. Zum Beispiel:
   READINGS:
     2021-03-06 02:01:04   Action          Add
     2021-03-06 22:25:21   Adresse         192.168.178.64
     2021-03-06 02:01:04   BUS             MMC
     2021-03-06 02:01:03   Code            VideoBlind
     2021-03-06 19:03:14   Data            MotionDetect
     2021-03-06 02:01:04   Device          \/dev\/mmc0
     2021-02-28 14:04:55   Dir             \/mnt\/sd
     2021-02-28 13:23:36   Disk.Error      1
     2021-03-06 02:00:56   EventStart      1
     2021-03-06 02:01:03   Index           1
     2021-03-06 22:43:27   LogIn           192.168.178.136
     2021-03-06 22:43:28   LogOut          192.168.178.136
     2021-03-06 02:01:04   LogicNo         -1
     2021-03-06 02:01:04   Media           FLASH
     2021-02-28 14:04:55   NewGroup        ReadWrite
     2021-02-28 14:04:55   OldGroup        ReadWrite
     2021-02-28 14:04:55   Partition       fehler
     2021-03-06 02:01:04   PhysicNo        1
     2021-02-28 02:00:03   Reboot          1
     2021-03-01 17:17:37   RegionName      Wiese
     2021-02-28 13:28:58   SaveConfig      1
     2021-02-28 00:42:58   Storage.ClearWorkDir 1
     2021-02-28 02:01:05   Storage.HotPlug 1
     2021-03-06 02:00:05   Time            2021-03-06 02:00:04
     2021-03-06 22:25:21   Type            CGI


Lauschte ein weiteres notify auf zum Beispiel auf "EventStart", konnten passende Zusatzinfos wie "RegionName" als Benachrichtigung auf Handy geschickt werden.

Mit der neuen Funktionalität geht das nun ggf. deutlich einfacher, denn es können direkt die Infos aus einem Telegram der Kamera als auslösendes Event verwertet werden! Also, vielen Dank noch mal für das Update, es funktioniert großartig!

Grüße

Raspberry Pi(s) mit FHEM auf Rasbian Jessie/Strech, DbLog/DbRep mit mySQL, piface, 1Wire-USB-Master von SMS-GUARD, RFXtrx433E

DS_Starter

Danke für die Rückmeldung, das freut mich.  :D
Vielleicht sollte "man" mal für Log2Syslog eine Wikiseite aufmachen wo solche Beispiele gut hintelegt werden könnten.
Im Forum gehen solche wertvollen Beiträge schnell verloren ... nur so als Idee....

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Jostar

Ok, da mache ich gerne einen Anfang: https://wiki.fhem.de/wiki/Log2Syslog
Auf welches Forum-Topic sollte verlinkt werden?
Sollte "man" Teile der Commandref (aus meiner Sicht sehr ausführlichen und hilfreichen Abschnitte) auch im wiki erwähnen oder reicht der Link?
Meinen Anwendungsfall kann ich gerne noch als Beispiel dokumentieren, bin mir noch unsicher, wie detailliert das wirklich hilfreich ist.

Grüße
Raspberry Pi(s) mit FHEM auf Rasbian Jessie/Strech, DbLog/DbRep mit mySQL, piface, 1Wire-USB-Master von SMS-GUARD, RFXtrx433E

DS_Starter

#9
Moin Jostar,

oh, da warst du aber schon wirklich fleißig  8)
Vielen Dank !

Das Forum hast du ja auch schon richtig eingefügt (Automatisierung). Es gibt noch einen Supportthread (https://forum.fhem.de/index.php/topic,75426.0.html) in dem ich z.B. Weiterentwicklungen meinerseits ankündige und zum Test bereitstelle etc.
Den Link zur Commandref habe ich mit in dem rechten Übersichtskasten eingefügt.

Zitat
Sollte "man" Teile der Commandref (aus meiner Sicht sehr ausführlichen und hilfreichen Abschnitte) auch im wiki erwähnen oder reicht der Link?
Normalerweise reicht ein Link (die Commandref könnte sich auch mal ändern bei Bedarf), aber wenn es im Context hilfreich/notwendig ist um dem Leser Erläuterungen zu geben, macht es durchaus Sinn diese Infos einzufügen.

Bei den Beispielen ist der Leser für jedes hilfreiche Detail dankbar was ihm hilft das Beispiel inhaltlich zu verstehen und es nicht nur per Drag&Drop abpinselt, was ja sowieso meistens schiefgeht.

Danke dir und schönen Sonntag !

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter