From 47fe10394325df7ad41a96943017d2f34c4c774d Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Sun, 10 Nov 2019 08:22:50 +0000 Subject: [PATCH] 93_DbLog: contrib 4.9.0 git-svn-id: https://svn.fhem.de/fhem/trunk@20487 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/93_DbLog.pm | 121 +++++++++++++++++++++++++--- 1 file changed, 111 insertions(+), 10 deletions(-) diff --git a/fhem/contrib/DS_Starter/93_DbLog.pm b/fhem/contrib/DS_Starter/93_DbLog.pm index be2ff5ab9..2a9463c8f 100644 --- a/fhem/contrib/DS_Starter/93_DbLog.pm +++ b/fhem/contrib/DS_Starter/93_DbLog.pm @@ -1,5 +1,5 @@ ############################################################################################################################################ -# $Id: 93_DbLog.pm 20329 2019-10-07 22:34:08Z DS_Starter $ +# $Id: 93_DbLog.pm 20445 2019-11-03 16:50:27Z DS_Starter $ # # 93_DbLog.pm # written by Dr. Boris Neubert 2007-12-30 @@ -30,6 +30,7 @@ no if $] >= 5.017011, warnings => 'experimental::smartmatch'; # Version History intern by DS_Starter: our %DbLog_vNotesIntern = ( + "4.9.0" => "09.11.2019 new attribute defaultMinInterval to set a default minInterval central in dblog for all events ", "4.8.0" => "14.10.2019 change SQL-Statement for delta-h, delta-d (SVG getter) ", "4.7.5" => "07.10.2019 fix warning \"error valueFn: Global symbol \$CN requires ...\" in DbLog_addCacheLine ". "enhanced configCheck by insert mode check ", @@ -254,6 +255,7 @@ sub DbLog_Initialize($) { "DbLogSelectionMode:Exclude,Include,Exclude/Include ". "DbLogType:Current,History,Current/History,SampleFill/History ". "dbSchema ". + "defaultMinInterval:textField-long ". "disable:1,0 ". "excludeDevs ". "expimpdir ". @@ -1292,7 +1294,7 @@ sub DbLog_Log($$) { my $ts_0 = TimeNow(); # timestamp in SQL format YYYY-MM-DD hh:mm:ss my $now = gettimeofday(); # get timestamp in seconds since epoch my $DbLogExclude = AttrVal($dev_name, "DbLogExclude", undef); - my $DbLogInclude = AttrVal($dev_name, "DbLogInclude",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", "" ); @@ -1369,14 +1371,15 @@ sub DbLog_Log($$) { Log3 $name, 5, "DbLog $name -> DbLogExclude of \"$dev_name\": $DbLogExclude" if($vb4show && !$hash->{HELPER}{".RUNNING_PID"} && $DbLogExclude); Log3 $name, 5, "DbLog $name -> DbLogInclude of \"$dev_name\": $DbLogInclude" if($vb4show && !$hash->{HELPER}{".RUNNING_PID"} && $DbLogInclude); - #Je nach DBLogSelectionMode muss das vorgegebene Ergebnis der Include-, bzw. Exclude-Pruefung - #entsprechend unterschiedlich vorbelegt sein. - #keine Readings loggen die in DbLogExclude explizit ausgeschlossen sind + # Je nach DBLogSelectionMode muss das vorgegebene Ergebnis der Include-, bzw. Exclude-Pruefung + # entsprechend unterschiedlich vorbelegt sein. + # keine Readings loggen die in DbLogExclude explizit ausgeschlossen sind my $DoIt = 0; + $DoIt = 1 if($DbLogSelectionMode =~ m/Exclude/ ); if($DbLogExclude && $DbLogSelectionMode =~ m/Exclude/) { - # Bsp: "(temperature|humidity):300,battery:3600" + # Bsp: "(temperature|humidity):300,battery:3600:force" my @v1 = split(/,/, $DbLogExclude); for (my $i=0; $i{NAME}}{TIME} = $now; @@ -1561,9 +1567,75 @@ sub DbLog_Log($$) { if($net && AttrVal($name, "showNotifyTime", undef)) { readingsSingleUpdate($hash, "notify_processing_time", sprintf("%.4f",$net), 1); } + return; } +################################################################################################# +# +# check zentrale Angabe von defaultMinInterval für alle Devices/Readings +# (kein Überschreiben spezifischer Angaben von DbLogExclude / DbLogInclude in den Quelldevices) +# +################################################################################################# +sub DbLog_checkDefMinInt ($$$$$){ + my ($name,$dev_name,$now,$reading,$value) = @_; + my $force; + my $DoIt = 1; + + my $defminint = AttrVal($name, "defaultMinInterval", undef); + return $DoIt if(!$defminint); # Attribut "defaultMinInterval" nicht im DbLog gesetzt -> kein ToDo + + my $DbLogExclude = AttrVal($dev_name, "DbLogExclude", undef); + my $DbLogInclude = AttrVal($dev_name, "DbLogInclude", undef); + $defminint =~ s/[\s\n]/,/g; + my @adef = split(/,/, $defminint); + + my $inex = ($DbLogExclude?$DbLogExclude.",":"").($DbLogInclude?$DbLogInclude:""); + + if($inex) { # Quelldevice hat DbLogExclude und/oder DbLogInclude gesetzt + my @ie = split(/,/, $inex); + for (my $k=0; $k kein Überschreiben durch $defminint + } + } + } + + for (my $l=0; $l don't log it !"); + $DoIt = 0; + return $DoIt; + } + } + } + } + } + # Log3 ($name, 1, "DbLog $name - defaulMInInterval - compare of \"$dev_name\", reading \"$reading\" successful -> log it !"); + +return $DoIt; +} + ################################################################################################# # Schreibroutine Einfügen Werte in DB im Synchronmode ################################################################################################# @@ -5961,12 +6033,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{DbLog}{META}} - if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbLog.pm 20329 2019-10-07 22:34:08Z DS_Starter $ im Kopf komplett! vorhanden ) + if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 93_DbLog.pm 20445 2019-11-03 16:50:27Z 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 20329 2019-10-07 22:34:08Z DS_Starter $ im Kopf komplett! vorhanden ) + return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 93_DbLog.pm 20445 2019-11-03 16:50:27Z 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 @@ -8300,6 +8372,35 @@ attr SMA_Energymeter DbLogValueFn
+
    + +
  • defaultMinInterval +
      + + attr <device> defaultMinInterval <devspec>::<MinInterval>[::force],[<devspec>::<MinInterval>[::force]] ... +
      + + Mit diesem Attribut wird ein Standard Minimum Intervall für devspec festgelegt. + Ist defaultMinInterval angegeben, wird der Logeintrag nicht geloggt, wenn das Intervall noch nicht erreicht und der + Wert des Readings sich nicht verändert hat. + Ist der optionale Parameter "force" hinzugefügt, wird der Logeintrag auch dann nicht nicht geloggt, wenn sich der + Wert des Readings verändert hat.
      + Eventuell im Quelldevice angegebene Spezifikationen DbLogExclude / DbLogInclude haben Vorrag und werden durch + defaultMinInterval nicht überschrieben.
      + Die Eingabe kann mehrzeilig erfolgen.

      + + Beispiele
      + attr dblog defaultMinInterval .*::120::force
      + # Events aller Devices werden nur geloggt, wenn 120 Sekunden zum letzten Logeintrag vergangen sind ist (Reading spezifisch)
      + attr dblog defaultMinInterval (Weather|SMA)::300
      + # Events der Devices "Weather" und "SMA" werden nur geloggt wenn 300 Sekunden zum letzten Logeintrag vergangen sind (Reading spezifisch) und sich der Wert nicht geändert hat.
      + attr dblog defaultMinInterval TYPE=CUL_HM::600::force
      + # Events aller Devices des Typs "CUL_HM" werden nur geloggt, wenn 600 Sekunden zum letzten Logeintrag vergangen sind ist (Reading spezifisch) +
    +
  • +
+
+
  • disable