2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

93_Log2Syslog: V4.6.0

git-svn-id: https://svn.fhem.de/fhem/trunk@17106 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2018-08-08 20:42:59 +00:00
parent 387ed33d6d
commit 711cff6520

View File

@ -30,7 +30,7 @@
###################################################################################################################### ######################################################################################################################
# Versions History: # Versions History:
# #
# 4.6.0 08.08.2018 set sendTestMessage added # 4.6.0 08.08.2018 set sendTestMessage added, Attribute "contDelimiter", "sendSeverity"
# 4.5.1 07.08.2018 BSD Regex changed, setpayload of BSD changed # 4.5.1 07.08.2018 BSD Regex changed, setpayload of BSD changed
# 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 # Attribute "makeMsgEvent" added
@ -184,11 +184,13 @@ sub Log2Syslog_Initialize($) {
$hash->{AttrList} = "addStateEvent:1,0 ". $hash->{AttrList} = "addStateEvent:1,0 ".
"disable:1,0,maintenance ". "disable:1,0,maintenance ".
"addTimestamp:0,1 ". "addTimestamp:0,1 ".
"outputFields:sortable,PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT ". "contDelimiter ".
"logFormat:BSD,IETF ". "logFormat:BSD,IETF ".
"makeMsgEvent:no,intern,reading ". "makeMsgEvent:no,intern,reading ".
"outputFields:sortable-strict,PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT ".
"parseProfile:BSD,IETF,raw,ParseFn ". "parseProfile:BSD,IETF,raw,ParseFn ".
"parseFn:textField-long ". "parseFn:textField-long ".
"sendSeverity:multiple-strict,Emergency,Alert,Critical,Error,Warning,Notice,Informational,Debug ".
"ssldebug:0,1,2,3 ". "ssldebug:0,1,2,3 ".
"TLS:1,0 ". "TLS:1,0 ".
"timeout ". "timeout ".
@ -434,12 +436,18 @@ sub Log2Syslog_parsePayload($$) {
my $severity = ""; my $severity = "";
my $facility = ""; my $facility = "";
my @evf = split(",",AttrVal($name, "outputFields", "FAC,SEV,ID,CONT")); # auszugebene Felder im Event/Reading my @evf = split(",",AttrVal($name, "outputFields", "FAC,SEV,ID,CONT")); # auszugebene Felder im Event/Reading
my ($Mmm,$dd,$delimiter,$day,$ietf,$err,$pl,$tail,$tail2); my ($delimiter,$day,$ietf,$err,$pl,$tail,$tail2);
my $Mmm = "";
my $dd = "";
# Hash zur Umwandlung Felder in deren Variablen # Hash zur Umwandlung Felder in deren Variablen
my ($prival,$ts,$host,$date,$time,$id,$pid,$mid,$sdfield,$cont); my ($prival,$date,$pid,$mid,$sdfield,$cont);
my $fac = ""; my $fac = "";
my $sev = ""; my $sev = "";
my $host = "";
my $ts = "";
my $id = "";
my $time = "";
my %fh = (PRIVAL => \$prival, my %fh = (PRIVAL => \$prival,
FAC => \$fac, FAC => \$fac,
SEV => \$sev, SEV => \$sev,
@ -515,7 +523,7 @@ sub Log2Syslog_parsePayload($$) {
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - error parse msg -> $data"); Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - error parse msg -> $data");
} }
Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, MM: $Mmm, Day: $dd, TIME: $time, TS: $ts, HOST: $host, ID: $id, CONT: $cont"); Log2Syslog_Log3slog($name, 4, "$name - parsed message -> FAC: $fac, SEV: $sev, MM: ".$Mmm?$Mmm:"".", Day: ".$dd?$dd:"".", TIME: ".$time?$time:"".", TS: $ts, HOST: $host, ID: $id, CONT: $cont");
$host = "" if($host eq "-"); $host = "" if($host eq "-");
$phost = $host?$host:$phost; $phost = $host?$host:$phost;
@ -551,7 +559,7 @@ sub Log2Syslog_parsePayload($$) {
Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - error parse msg -> $data"); Log2Syslog_Log3slog ($hash, 1, "Log2Syslog $name - error parse msg -> $data");
} else { } else {
$ts = "$date $time"; $ts = "$date $time";
$cont =~ s/^:?(.*)$/$1/ if(lc($mid) eq "fhem"); # Modul Sender setzt vor $cont ein ":" (wegen Synology Compatibilität) # $cont =~ s/^:?(.*)$/$1/ if(lc($mid) eq "fhem"); # Modul Sender setzt vor $cont ein ":" (wegen Synology Compatibilität)
if(looks_like_number($prival)) { if(looks_like_number($prival)) {
$facility = int($prival/8) if($prival >= 0 && $prival <= 191); $facility = int($prival/8) if($prival >= 0 && $prival <= 191);
@ -789,7 +797,7 @@ sub Log2Syslog_Get($@) {
"certinfo:noArg " "certinfo:noArg "
; ;
return if(IsDisabled($name)); return if(AttrVal($name, "disable", "") eq "1");
my($sock,$cert,@certs); my($sock,$cert,@certs);
if ($opt =~ /certinfo/) { if ($opt =~ /certinfo/) {
@ -824,7 +832,7 @@ sub Log2Syslog_Attr ($$$$) {
return "\"$aName\" is only valid for model \"Collector\""; return "\"$aName\" is only valid for model \"Collector\"";
} }
if ($cmd eq "set" && $hash->{MODEL} =~ /Collector/ && $aName =~ /addTimestamp|addStateEvent|protocol|logFormat|timeout|TLS/) { if ($cmd eq "set" && $hash->{MODEL} =~ /Collector/ && $aName =~ /addTimestamp|contDelimiter|addStateEvent|protocol|logFormat|sendSeverity|timeout|TLS/) {
return "\"$aName\" is only valid for model \"Sender\""; return "\"$aName\" is only valid for model \"Sender\"";
} }
@ -834,7 +842,7 @@ sub Log2Syslog_Attr ($$$$) {
$do = $aVal?1:0; $do = $aVal?1:0;
} }
$do = 0 if($cmd eq "del"); $do = 0 if($cmd eq "del");
my $val = ($do&&$aVal==2)?"maintenance":($do&&$aVal==1)?"disabled":"active"; my $val = ($do&&$aVal=~/maintenance/)?"maintenance":($do&&$aVal==1)?"disabled":"active";
readingsSingleUpdate($hash, "state", $val, 1); readingsSingleUpdate($hash, "state", $val, 1);
} }
@ -900,10 +908,12 @@ sub Log2Syslog_Attr ($$$$) {
} }
if ($aName =~ /makeMsgEvent/) { if ($aName =~ /makeMsgEvent/) {
if($aVal =~ /intern/ || $cmd eq "del") {
foreach my $reading (grep { /MSG_/ } keys %{$defs{$name}{READINGS}}) { foreach my $reading (grep { /MSG_/ } keys %{$defs{$name}{READINGS}}) {
readingsDelete($defs{$name}, $reading); readingsDelete($defs{$name}, $reading);
} }
} }
}
return; return;
} }
@ -916,7 +926,9 @@ sub Log2Syslog_eventlog($$) {
my ($hash,$dev) = @_; my ($hash,$dev) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $rex = $hash->{HELPER}{EVNTLOG}; my $rex = $hash->{HELPER}{EVNTLOG};
my ($prival,$sock,$data,$pid); my $st = ReadingsVal($name,"state","active");
my $sendsev = AttrVal($name, "sendSeverity", ""); # Nachrichten welcher Schweregrade sollen gesendet werden
my ($prival,$sock,$data,$pid,$sevAstxt);
return if(IsDisabled($name) || !$rex || $hash->{MODEL} !~ /Sender/); return if(IsDisabled($name) || !$rex || $hash->{MODEL} !~ /Sender/);
my $events = deviceEvents($dev, AttrVal($name, "addStateEvent", 0)); my $events = deviceEvents($dev, AttrVal($name, "addStateEvent", 0));
@ -941,7 +953,12 @@ sub Log2Syslog_eventlog($$) {
if($n =~ m/^$rex$/ || "$n:$txt" =~ m/^$rex$/ || "$tim:$n:$txt" =~ m/^$rex$/) { if($n =~ m/^$rex$/ || "$n:$txt" =~ m/^$rex$/ || "$tim:$n:$txt" =~ m/^$rex$/) {
my $otp = "$n $txt"; my $otp = "$n $txt";
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0); $otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
$prival = Log2Syslog_setprival($txt); ($prival,$sevAstxt) = Log2Syslog_setprival($txt);
if($sendsev && $sendsev !~ m/$sevAstxt/) {
# nicht senden wenn Severity nicht in "sendSeverity" enthalten
Log2Syslog_Log3slog($name, 5, "$name - Warning - Payload NOT sent due to Message Severity not in attribute \"sendSeverity\"\n");
next;
}
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"event"); ($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"event");
next if(!$data); next if(!$data);
@ -952,17 +969,17 @@ sub Log2Syslog_eventlog($$) {
} else { } else {
my $err = $!; my $err = $!;
Log2Syslog_Log3slog($name, 4, "$name - Warning - Payload sequence $pid NOT sent: $err\n"); Log2Syslog_Log3slog($name, 4, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
$st = "write error: $err";
my $st = "write error: $err";
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
readingsSingleUpdate($hash, "state", $st, $evt);
$hash->{HELPER}{OLDSTATE} = $st;
} }
} }
} }
Log2Syslog_closesock($hash,$sock); Log2Syslog_closesock($hash,$sock);
} }
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
readingsSingleUpdate($hash, "state", $st, $evt);
$hash->{HELPER}{OLDSTATE} = $st;
return ""; return "";
} }
@ -973,7 +990,9 @@ sub Log2Syslog_fhemlog($$) {
my ($name,$raw) = @_; my ($name,$raw) = @_;
my $hash = $defs{$name}; my $hash = $defs{$name};
my $rex = $hash->{HELPER}{FHEMLOG}; my $rex = $hash->{HELPER}{FHEMLOG};
my ($prival,$sock,$err,$ret,$data,$pid); my $st = ReadingsVal($name,"state","active");
my $sendsev = AttrVal($name, "sendSeverity", ""); # Nachrichten welcher Schweregrade sollen gesendet werden
my ($prival,$sock,$err,$ret,$data,$pid,$sevAstxt);
return if(IsDisabled($name) || !$rex || $hash->{MODEL} !~ /Sender/); return if(IsDisabled($name) || !$rex || $hash->{MODEL} !~ /Sender/);
@ -985,7 +1004,12 @@ sub Log2Syslog_fhemlog($$) {
if($txt =~ m/^$rex$/ || "$vbose: $txt" =~ m/^$rex$/) { if($txt =~ m/^$rex$/ || "$vbose: $txt" =~ m/^$rex$/) {
my $otp = "$vbose: $txt"; my $otp = "$vbose: $txt";
$otp = "$tim $otp" if AttrVal($name,'addTimestamp',0); $otp = "$tim $otp" if AttrVal($name,'addTimestamp',0);
$prival = Log2Syslog_setprival($txt,$vbose); ($prival,$sevAstxt) = Log2Syslog_setprival($txt,$vbose);
if($sendsev && $sendsev !~ m/$sevAstxt/) {
# nicht senden wenn Severity nicht in "sendSeverity" enthalten
Log2Syslog_Log3slog($name, 5, "$name - Warning - Payload NOT sent due to Message Severity not in attribute \"sendSeverity\"\n");
return;
}
($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"fhem"); ($data,$pid) = Log2Syslog_setpayload($hash,$prival,$date,$time,$otp,"fhem");
return if(!$data); return if(!$data);
@ -999,16 +1023,16 @@ sub Log2Syslog_fhemlog($$) {
} else { } else {
my $err = $!; my $err = $!;
Log2Syslog_Log3slog($name, 4, "$name - Warning - Payload sequence $pid NOT sent: $err\n"); Log2Syslog_Log3slog($name, 4, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
$st = "write error: $err";
my $st = "write error: $err";
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
readingsSingleUpdate($hash, "state", $st, $evt);
$hash->{HELPER}{OLDSTATE} = $st;
} }
Log2Syslog_closesock($hash,$sock); Log2Syslog_closesock($hash,$sock);
} }
} }
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
readingsSingleUpdate($hash, "state", $st, $evt);
$hash->{HELPER}{OLDSTATE} = $st;
return; return;
} }
@ -1018,6 +1042,7 @@ return;
sub Log2Syslog_sendTestMsg($$) { sub Log2Syslog_sendTestMsg($$) {
my ($hash,$own) = @_; my ($hash,$own) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $st = ReadingsVal($name,"state","active");
my ($prival,$ts,$tim,$date,$time,$sock,$err,$ret,$data,$pid,$otp); my ($prival,$ts,$tim,$date,$time,$sock,$err,$ret,$data,$pid,$otp);
if($own) { if($own) {
@ -1047,15 +1072,15 @@ sub Log2Syslog_sendTestMsg($$) {
} else { } else {
my $err = $!; my $err = $!;
Log2Syslog_Log3slog($name, 4, "$name - Warning - Payload sequence $pid NOT sent: $err\n"); Log2Syslog_Log3slog($name, 4, "$name - Warning - Payload sequence $pid NOT sent: $err\n");
$st = "write error: $err";
my $st = "write error: $err";
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
readingsSingleUpdate($hash, "state", $st, $evt);
$hash->{HELPER}{OLDSTATE} = $st;
} }
Log2Syslog_closesock($hash,$sock); Log2Syslog_closesock($hash,$sock);
} }
my $evt = ($st eq $hash->{HELPER}{OLDSTATE})?0:1;
readingsSingleUpdate($hash, "state", $st, $evt);
$hash->{HELPER}{OLDSTATE} = $st;
return; return;
} }
@ -1206,7 +1231,7 @@ return;
############################################################################### ###############################################################################
sub Log2Syslog_setprival ($;$$) { sub Log2Syslog_setprival ($;$$) {
my ($txt,$vbose) = @_; my ($txt,$vbose) = @_;
my $prival; my ($prival,$sevAstxt);
# Priority = (facility * 8) + severity # Priority = (facility * 8) + severity
# https://tools.ietf.org/pdf/rfc5424.pdf # https://tools.ietf.org/pdf/rfc5424.pdf
@ -1239,8 +1264,9 @@ sub Log2Syslog_setprival ($;$$) {
$sv = 4 if (lc($txt) =~ m/warning/); # warning conditions $sv = 4 if (lc($txt) =~ m/warning/); # warning conditions
$prival = ($fac*8)+$sv; $prival = ($fac*8)+$sv;
$sevAstxt = $Log2Syslog_Severity{$sv};
return($prival); return($prival,$sevAstxt);
} }
############################################################################### ###############################################################################
@ -1252,6 +1278,7 @@ sub Log2Syslog_setpayload ($$$$$$) {
my $ident = ($hash->{HELPER}{IDENT}?$hash->{HELPER}{IDENT}:$name)."_".$lt; my $ident = ($hash->{HELPER}{IDENT}?$hash->{HELPER}{IDENT}:$name)."_".$lt;
my $myhost = $hash->{MYHOST}?$hash->{MYHOST}:"0.0.0.0"; my $myhost = $hash->{MYHOST}?$hash->{MYHOST}:"0.0.0.0";
my $lf = AttrVal($name, "logFormat", "IETF"); my $lf = AttrVal($name, "logFormat", "IETF");
my $tag = AttrVal($name, "contDelimiter", ""); # Trennzeichen vor Content (z.B. für Synology nötig)
my $data; my $data;
return undef,undef if(!$otp); return undef,undef if(!$otp);
@ -1267,7 +1294,7 @@ sub Log2Syslog_setpayload ($$$$$$) {
$day =~ s/0/ / if($day =~ m/^0.*$/); # in Tagen < 10 muss 0 durch Space ersetzt werden $day =~ s/0/ / if($day =~ m/^0.*$/); # in Tagen < 10 muss 0 durch Space ersetzt werden
$ident = substr($ident,0, $RFC3164len{TAG}); # Länge TAG Feld begrenzen $ident = substr($ident,0, $RFC3164len{TAG}); # Länge TAG Feld begrenzen
no warnings 'uninitialized'; no warnings 'uninitialized';
$data = "<$prival>$month $day $time $myhost $ident :$otp"; $data = "<$prival>$month $day $time $myhost $ident $tag$otp";
use warnings; use warnings;
$data = substr($data,0, ($RFC3164len{DL}-1)); # Länge Total begrenzen $data = substr($data,0, ($RFC3164len{DL}-1)); # Länge Total begrenzen
} }
@ -1289,7 +1316,7 @@ sub Log2Syslog_setpayload ($$$$$$) {
no warnings 'uninitialized'; no warnings 'uninitialized';
if ($IETFver == 1) { if ($IETFver == 1) {
$data = "<$prival>$IETFver $tim $myhost $ident $pid $mid $sdfield :$otp"; $data = "<$prival>$IETFver $tim $myhost $ident $pid $mid $sdfield $tag$otp";
} }
use warnings; use warnings;
} }
@ -1384,11 +1411,13 @@ sub Log2Syslog_evalPeer($) {
my ($hash) = @_; my ($hash) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $socket = $hash->{SERVERSOCKET}; my $socket = $hash->{SERVERSOCKET};
my $phost = "";
my $paddr = "";
my($pport, $pipaddr) = sockaddr_in($socket->peername); my($pport, $pipaddr) = sockaddr_in($socket->peername);
my $phost = gethostbyaddr($pipaddr, AF_INET); $phost = gethostbyaddr($pipaddr, AF_INET);
my $paddr = inet_ntoa($pipaddr); $paddr = inet_ntoa($pipaddr);
Log2Syslog_Log3slog ($hash, 5, "Log2Syslog $name - message peerhost: $phost, $paddr"); Log2Syslog_Log3slog ($hash, 5, "Log2Syslog $name - message peerhost: ".$phost?$phost:"".", ".$paddr);
return ($phost,$paddr); return ($phost,$paddr);
} }
@ -1912,11 +1941,23 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve
<br> <br>
<br> <br>
<ul>
<li><b>contDelimiter </b><br>
<br>
Das Attribut ist nur für "Sender" verwendbar. Es enthält ein zusätzliches Zeichen welches unmittelber vor das
Content-Feld eingefügt wird. <br>
Diese Möglichkeit ist in manchen speziellen Fällen hilfreich (z.B. kann das Zeichen ':' eingefügt werden um eine
ordnungsgemäße Anzeige im Synology-Protokollcenter zu erhalten).
</li>
</ul>
<br>
<br>
<ul> <ul>
<li><b>disable [1 | 0 | maintenance] </b><br> <li><b>disable [1 | 0 | maintenance] </b><br>
<br> <br>
Das Device wird aktiviert, deaktiviert bzw. in den Maintenance-Mode geschaltet. Im Maintenance-Mode kann mit dem "Sender" Das Device wird aktiviert, deaktiviert bzw. in den Maintenance-Mode geschaltet. Im Maintenance-Mode kann mit dem
eine Testnachricht gesendet werden (siehe "set &lt;name&gt; sendTestMessage"). "Sender"-Device eine Testnachricht gesendet werden (siehe "set &lt;name&gt; sendTestMessage").
</li> </li>
</ul> </ul>
<br> <br>
@ -1955,7 +1996,7 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve
<ul> <ul>
<li><b>outputFields </b><br> <li><b>outputFields </b><br>
<br> <br>
Über eine sortierbare Liste können die gewünschten Felder zur Eventgenerierung ausgewählt werden. Über eine sortierbare Liste können die gewünschten Felder des generierten Events ausgewählt werden.
Die abhängig vom Attribut <b>"parseProfil"</b> sinnvoll verwendbaren Felder und deren Bedeutung ist der Beschreibung Die abhängig vom Attribut <b>"parseProfil"</b> sinnvoll verwendbaren Felder und deren Bedeutung ist der Beschreibung
des Attributs "parseProfil" zu entnehmen. des Attributs "parseProfil" zu entnehmen.
Ist "outputFields" nicht gesetzt, wird ein vordefinierter Satz Felder zur Eventgenerierung verwendet. Ist "outputFields" nicht gesetzt, wird ein vordefinierter Satz Felder zur Eventgenerierung verwendet.
@ -1995,7 +2036,19 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve
<br> <br>
Die Variablennamen korrespondieren mit den Feldnamen und deren ursprünglicher Bedeutung angegeben im Attribut Die Variablennamen korrespondieren mit den Feldnamen und deren ursprünglicher Bedeutung angegeben im Attribut
<b>"parseProfile" (Erläuterung der Felddaten)</b>. <b>"parseProfile"</b> (Erläuterung der Felddaten). <br><br>
<ul>
<b>Beispiel: </b> <br>
# Quelltext: '<4> <;4>LAN IP and mask changed to 192.168.2.3 255.255.255.0' <br>
# Die Zeichen '<;4>' sollen aus dem CONT-Feld entfernt werden
<pre>
{
($PRIVAL,$CONT) = ($DATA =~ /^<(\d{1,3})>\s(.*)$/);
$CONT = (split(">",$CONT))[1] if($CONT =~ /^<.*>.*$/);
}
</pre>
</ul>
</li> </li>
</ul> </ul>
@ -2031,11 +2084,11 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve
<br> <br>
<ul> <ul>
<table> <table>
<colgroup> <col width=20%> <col width=80%> </colgroup> <colgroup> <col width=10%> <col width=90%> </colgroup>
<tr><td> BSD </td><td> PRIVAL,FAC,SEV,TS,HOST,ID,CONT </td></tr> <tr><td> BSD </td><td>-> PRIVAL,FAC,SEV,TS,HOST,ID,CONT </td></tr>
<tr><td> IETF </td><td> PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT </td></tr> <tr><td> IETF </td><td>-> PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT </td></tr>
<tr><td> ParseFn </td><td> PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT </td></tr> <tr><td> ParseFn </td><td>-> PRIVAL,FAC,SEV,TS,HOST,DATE,TIME,ID,PID,MID,SDFIELD,CONT </td></tr>
<tr><td> raw </td><td> keine Auswahl sinnvoll, es wird immer die Originalmeldung in einen Event umgesetzt </td></tr> <tr><td> raw </td><td>-> keine Auswahl sinnvoll, es wird immer die Originalmeldung in einen Event umgesetzt </td></tr>
</table> </table>
</ul> </ul>
<br> <br>
@ -2097,6 +2150,16 @@ Aug 18 21:26:54 fhemtest.myds.me 1 2017-08-18T21:26:54 fhemtest.myds.me Test_eve
<br> <br>
<br> <br>
<ul>
<li><b>sendSeverity </b><br>
<br>
Es werden nur Nachrichten übermittelt, deren Schweregrad im Attribut enthalten ist.
Ist "sendSeverity" nicht gesetzt, werden Nachrichten aller Schwierigkeitsgrade gesendet.
</li>
</ul>
<br>
<br>
<ul> <ul>
<li><b>ssldebug</b><br> <li><b>ssldebug</b><br>
<br> <br>