From 19e7ad0ed24b0848d91a239ee58e660723604721 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Thu, 25 Jul 2019 20:52:54 +0000 Subject: [PATCH] 93_DbLog: contrib V4.2.0 git-svn-id: https://svn.fhem.de/fhem/trunk@19898 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/93_DbLog.pm | 90 ++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 9 deletions(-) diff --git a/fhem/contrib/DS_Starter/93_DbLog.pm b/fhem/contrib/DS_Starter/93_DbLog.pm index ea73266f3..b9787a0d4 100644 --- a/fhem/contrib/DS_Starter/93_DbLog.pm +++ b/fhem/contrib/DS_Starter/93_DbLog.pm @@ -1,16 +1,17 @@ ############################################################################################################################################ -# $Id: 93_DbLog.pm 19251 2019-04-23 19:59:00Z DS_Starter $ +# $Id: 93_DbLog.pm 19529 2019-06-02 05:21:16Z DS_Starter $ # # 93_DbLog.pm # written by Dr. Boris Neubert 2007-12-30 # e-mail: omega at online dot de # -# modified and maintained by Tobias Faust since 2012-06-26 +# modified and maintained by Tobias Faust since 2012-06-26 until 2016 # e-mail: tobias dot faust at online dot de # -# reduceLog() created by Claudiu Schuster (rapster) -# # redesigned 2016-2019 by DS_Starter with credits by: JoeAllb, DeeSpe +# e-mail: heiko dot maaz at t-online dot de +# +# reduceLog() created by Claudiu Schuster (rapster) # ############################################################################################################################################ @@ -28,7 +29,8 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch'; # Version History intern by DS_Starter: our %DbLog_vNotesIntern = ( - "4.1.1" => "25.05.2019 fix ignore MinInterval if value is \"0\" ", + "4.2.0" => "25.07.2019 DbLogValueFn as device specific function propagated in devices if dblog is used ", + "4.1.1" => "25.05.2019 fix ignore MinInterval if value is \"0\", Forum: #100344 ", "4.1.0" => "17.04.2019 DbLog_Get: change reconnect for MySQL (Forum: #99719), change index suggestion in DbLog_configcheck ", "4.0.0" => "14.04.2019 rewrite DbLog_PushAsync / DbLog_Push / DbLog_Connectxx, new attribute \"bulkInsert\" ", "3.14.1" => "12.04.2019 DbLog_Get: change select of MySQL Forum: https://forum.fhem.de/index.php/topic,99280.0.html ", @@ -260,6 +262,7 @@ sub DbLog_Initialize($) addToAttrList("DbLogInclude"); addToAttrList("DbLogExclude"); + addToAttrList("DbLogValueFn:textField-long"); $hash->{FW_detailFn} = "DbLog_fhemwebFn"; $hash->{SVG_sampleDataFn} = "DbLog_sampleDataFn"; @@ -1229,7 +1232,6 @@ sub DbLog_Log($$) { last; } } - # Log3 $name, 5, "DbLog $name -> verbose 4 output of device $dev_name skipped due to attribute \"verbose4Devs\" restrictions" if(!$vb4show); } if($vb4show && !$hash->{HELPER}{".RUNNING_PID"}) { @@ -1246,9 +1248,17 @@ sub DbLog_Log($$) { my $now = gettimeofday(); # get timestamp in seconds since epoch my $DbLogExclude = AttrVal($dev_name, "DbLogExclude", undef); my $DbLogInclude = AttrVal($dev_name, "DbLogInclude",undef); + my $DbLogValueFn = AttrVal($dev_name, "DbLogValueFn",""); my $DbLogSelectionMode = AttrVal($name, "DbLogSelectionMode","Exclude"); my $value_fn = AttrVal( $name, "valueFn", "" ); + # Funktion aus Device spezifischer DbLogValueFn validieren + if( $DbLogValueFn =~ m/^\s*(\{.*\})\s*$/s ) { + $DbLogValueFn = $1; + } else { + $DbLogValueFn = ''; + } + # Funktion aus Attr valueFn validieren if( $value_fn =~ m/^\s*(\{.*\})\s*$/s ) { $value_fn = $1; @@ -1375,8 +1385,34 @@ sub DbLog_Log($$) { if ($DoIt) { $defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{TIME} = $now; $defs{$dev_name}{Helper}{DBLOG}{$reading}{$hash->{NAME}}{VALUE} = $value; + + # Device spezifische DbLogValueFn-Funktion anwenden + if($DbLogValueFn ne '') { + my $TIMESTAMP = $timestamp; + my $EVENT = $event; + my $READING = $reading; + my $VALUE = $value; + my $UNIT = $unit; + my $IGNORE = 0; + my $CN = " "; + + eval $DbLogValueFn; + Log3 $name, 2, "DbLog $name -> error device \"$dev_name\" specific DbLogValueFn: ".$@ if($@); + + if($IGNORE) { + # aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt in $DbLogValueFn + Log3 $hash->{NAME}, 4, "DbLog $name -> Event ignored by device \"$dev_name\" specific DbLogValueFn - TS: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit" + if($vb4show && !$hash->{HELPER}{".RUNNING_PID"}); + next; + } + + $timestamp = $TIMESTAMP if($TIMESTAMP =~ /(19[0-9][0-9]|2[0-9][0-9][0-9])-(0[1-9]|1[1-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]) (0[0-9]|1[1-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/); + $reading = $READING if($READING ne ''); + $value = $VALUE if(defined $VALUE); + $unit = $UNIT if(defined $UNIT); + } - # Anwender kann Feldwerte mit Funktion aus Attr valueFn verändern oder Datensatz-Log überspringen + # zentrale valueFn im DbLog-Device abarbeiten if($value_fn ne '') { my $TIMESTAMP = $timestamp; my $DEVICE = $dev_name; @@ -1390,6 +1426,7 @@ sub DbLog_Log($$) { eval $value_fn; Log3 $name, 2, "DbLog $name -> error valueFn: ".$@ if($@); + if($IGNORE) { # aktueller Event wird nicht geloggt wenn $IGNORE=1 gesetzt in $value_fn Log3 $hash->{NAME}, 4, "DbLog $name -> Event ignored by valueFn - TS: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit" @@ -5675,12 +5712,12 @@ sub DbLog_setVersionInfo($) { if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) { # META-Daten sind vorhanden $modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}} - if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbLog.pm 19251 2019-04-23 19:59:00Z DS_Starter $ im Kopf komplett! vorhanden ) + if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbLog.pm 19529 2019-06-02 05:21:16Z DS_Starter $ im Kopf komplett! vorhanden ) $modules{$type}{META}{x_version} =~ s/1.1.1/$v/g; } else { $modules{$type}{META}{x_version} = $v; } - return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbLog.pm 19251 2019-04-23 19:59:00Z DS_Starter $ im Kopf komplett! vorhanden ) + return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbLog.pm 19529 2019-06-02 05:21:16Z DS_Starter $ im Kopf komplett! vorhanden ) if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) { # es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen # mit {->VERSION()} im FHEMWEB kann Modulversion abgefragt werden @@ -7833,6 +7870,41 @@ return;
+ +