From bd10167fe60a8664db9901718317b3fe50fb25b2 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Mon, 6 Aug 2018 21:02:42 +0000 Subject: [PATCH] 93_Log2Syslog: V4.5.0 git-svn-id: https://svn.fhem.de/fhem/trunk@17096 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/93_Log2Syslog.pm | 79 ++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 10 deletions(-) diff --git a/fhem/contrib/93_Log2Syslog.pm b/fhem/contrib/93_Log2Syslog.pm index bec9eb3fc..0fd4466b5 100644 --- a/fhem/contrib/93_Log2Syslog.pm +++ b/fhem/contrib/93_Log2Syslog.pm @@ -30,7 +30,8 @@ ###################################################################################################################### # Versions History: # -# 4.5.0 06.08.2018 Regex capture groups used in parsePayload to set variables, parsing of BSD changed +# 4.5.0 06.08.2018 Regex capture groups used in parsePayload to set variables, parsing of BSD changed, +# Attribute "makeMsgEvent" added # 4.4.0 04.08.2018 Attribute "outputFields" added # 4.3.0 03.08.2018 Attribute "parseFn" added # 4.2.0 03.08.2018 evaluate sender peer ip-address/hostname, use it as reading in event generation @@ -182,6 +183,7 @@ sub Log2Syslog_Initialize($) { "addTimestamp:0,1 ". "outputFields:sortable,PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT ". "logFormat:BSD,IETF ". + "makeMsgEvent:no,intern,reading ". "parseProfile:BSD,IETF,raw,ParseFn ". "parseFn:textField-long ". "ssldebug:0,1,2,3 ". @@ -323,6 +325,7 @@ sub Log2Syslog_Read($) { my $socket = $hash->{SERVERSOCKET}; my $st = ReadingsVal($name,"state","active"); my $pp = AttrVal($name, "parseProfile", "IETF"); + my $mevt = AttrVal($name, "makeMsgEvent", "intern"); # wie soll Reading/Eventerstellt werden my ($err,$data,$ts,$phost,$pl); return if(IsDisabled($name) || $hash->{MODEL} !~ /Collector/); @@ -343,8 +346,17 @@ sub Log2Syslog_Read($) { $st = "parse error - see logfile"; } else { $st = "active"; - $pl = "$phost: $pl"; - Log2Syslog_Trigger($hash,$ts,$pl); + if($mevt =~ /intern/) { + # kein Reading, nur Event + $pl = "$phost: $pl"; + Log2Syslog_Trigger($hash,$ts,$pl); + } elsif ($mevt =~ /reading/) { + # Reading, Event abhängig von event-on-.* + readingsSingleUpdate($hash, "MSG_$phost", $pl, 1); + } else { + # Reading ohne Event + readingsSingleUpdate($hash, "MSG_$phost", $pl, 0); + } } } @@ -364,8 +376,17 @@ sub Log2Syslog_Read($) { $st = "parse error - see logfile"; } else { $st = "active"; - $pl = "$phost: $pl"; - Log2Syslog_Trigger($hash,$ts,$pl); + if($mevt =~ /intern/) { + # kein Reading, nur Event + $pl = "$phost: $pl"; + Log2Syslog_Trigger($hash,$ts,$pl); + } elsif ($mevt =~ /reading/) { + # Reading, Event abhängig von event-on-.* + readingsSingleUpdate($hash, "MSG_$phost", $pl, 1); + } else { + # Reading ohne Event + readingsSingleUpdate($hash, "MSG_$phost", $pl, 0); + } } } } else { @@ -377,8 +398,17 @@ sub Log2Syslog_Read($) { $st = "parse error - see logfile"; } else { $st = "active"; - $pl = "$phost: $pl"; - Log2Syslog_Trigger($hash,$ts,$pl); + if($mevt =~ /intern/) { + # kein Reading, nur Event + $pl = "$phost: $pl"; + Log2Syslog_Trigger($hash,$ts,$pl); + } elsif ($mevt =~ /reading/) { + # Reading, Event abhängig von event-on-.* + readingsSingleUpdate($hash, "MSG_$phost", $pl, 1); + } else { + # Reading ohne Event + readingsSingleUpdate($hash, "MSG_$phost", $pl, 0); + } } } @@ -744,7 +774,7 @@ sub Log2Syslog_Attr ($$$$) { # $name is device name # aName and aVal are Attribute name and value - if ($cmd eq "set" && $hash->{MODEL} !~ /Collector/ && $aName =~ /parseProfile|parseFn|outputFields/) { + if ($cmd eq "set" && $hash->{MODEL} !~ /Collector/ && $aName =~ /parseProfile|parseFn|outputFields|makeMsgEvent/) { return "\"$aName\" is only valid for model \"Collector\""; } @@ -822,6 +852,12 @@ sub Log2Syslog_Attr ($$$$) { return "You use a parse-function via attribute \"parseProfile\". Please change/delete attribute \"parseProfile\" first !"; } + if ($aName =~ /makeMsgEvent/) { + foreach my $reading (grep { /MSG_/ } keys %{$defs{$name}{READINGS}}) { + readingsDelete($defs{$name}, $reading); + } + } + return; } @@ -1522,7 +1558,7 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve
Je nach Verwendungszweck kann ein Syslog-Server (MODEL Collector) oder ein Syslog-Client (MODEL Sender) definiert werden.
- Der Collector empfängt Meldungen im Syslog-Format anderer Geräte und generiert daraus Events zur Weiterverarbeitung in + Der Collector empfängt Meldungen im Syslog-Format anderer Geräte und generiert daraus Events/Readings zur Weiterverarbeitung in FHEM. Das Sender-Device leitet FHEM Systemlog Einträge und/oder Events an einen externen Syslog-Server weiter.
@@ -1599,7 +1635,9 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve Parsingfunktion hinterlegt.
Die im Event verwendeten Felder und deren Reihenfolge können aus einem Wertevorrat mit dem Attribut "outputFields" bestimmt werden. Je nach verwendeten Parsingprofil können alle oder - nur eine Untermenge der verfügbaren Felder verwendet werden. Näheres dazu in der Beschreibung des Attributes "parseProfile". + nur eine Untermenge der verfügbaren Felder verwendet werden. Näheres dazu in der Beschreibung des Attributes "parseProfile".
+
+ Das Verhalten der Eventgenerierung kann mit dem Attribut "makeMsgEvent" angepasst werden.

@@ -1779,6 +1817,27 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve

+ +
+
+