diff --git a/fhem/CHANGED b/fhem/CHANGED index 0732e0bdd..286b1e946 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,8 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - update: 98_DOIFtools.pm: new attribute DOIFtoolsEventOnDeleted generates + events for stat_ Readings before deletion + remove add... button in DOIFtools event monitor - changed: 00_SIGNALduino.pm: version 3.3.1 needs less cpu time for parsing messages new command to query protocolids diff --git a/fhem/FHEM/98_DOIFtools.pm b/fhem/FHEM/98_DOIFtools.pm index ca1470c73..61e3eee94 100644 --- a/fhem/FHEM/98_DOIFtools.pm +++ b/fhem/FHEM/98_DOIFtools.pm @@ -42,6 +42,7 @@ sub DOIFtools_dO ($$$$); sub DOIFtoolsSetNotifyDev; sub DOIFtools_logWrapper($); sub DOIFtoolsCounterReset($); +sub DOIFtoolsDeleteStatReadings; my @DOIFtools_we =(); @@ -62,7 +63,7 @@ sub DOIFtools_Initialize($) $data{FWEXT}{"/DOIFtools_logWrapper"}{CONTENTFUNC} = "DOIFtools_logWrapper"; my $oldAttr = "target_room:noArg target_group:noArg executeDefinition:noArg executeSave:noArg eventMonitorInDOIF:noArg readingsPrefix:noArg"; - $hash->{AttrList} = "DOIFtoolsExecuteDefinition:1,0 DOIFtoolsTargetRoom DOIFtoolsTargetGroup DOIFtoolsExecuteSave:1,0 DOIFtoolsReadingsPrefix DOIFtoolsEventMonitorInDOIF:1,0 DOIFtoolsHideModulShortcuts:1,0 DOIFtoolsHideGetSet:1,0 DOIFtoolsMyShortcuts:textField-long DOIFtoolsMenuEntry:1,0 DOIFtoolsHideStatReadings:1,0 disabledForIntervals ".$oldAttr; + $hash->{AttrList} = "DOIFtoolsExecuteDefinition:1,0 DOIFtoolsTargetRoom DOIFtoolsTargetGroup DOIFtoolsExecuteSave:1,0 DOIFtoolsReadingsPrefix DOIFtoolsEventMonitorInDOIF:1,0 DOIFtoolsHideModulShortcuts:1,0 DOIFtoolsHideGetSet:1,0 DOIFtoolsMyShortcuts:textField-long DOIFtoolsMenuEntry:1,0 DOIFtoolsHideStatReadings:1,0 DOIFtoolsEventOnDeleted:1,0 disabledForIntervals ".$oldAttr; } sub DOIFtools_dO ($$$$){return "";} @@ -81,13 +82,23 @@ sub DOIFtools_eM($$$$) { my $filter = $a ? ($a eq "log" ? "global" : $a) : ".*"; $ret .= "

"; $ret .= "Events (Filter: $filter) ". - "  FHEM log ". + "  FHEM log ". "". "  
\n"; $ret .= "
"; $ret .= ""; $ret .= "
"; + $ret .= ""; } return $ret; } @@ -254,13 +265,23 @@ sub DOIFtools_fhemwebFn($$$$) { my $filter = $a ? ($a eq "log" ? "global" : $a) : ".*"; $ret .= "

"; $ret .= "Events (Filter: $filter) ". - "  FHEM log ". + "  FHEM log ". "". "  
\n"; $ret .= "
"; $ret .= ""; $ret .= "
"; + $ret .= ""; } return $ret; } @@ -575,6 +596,27 @@ sub DOIFtoolsCounterReset($) { InternalTimer($nt, "DOIFtoolsCounterReset", $pn, 0); return undef; } +sub DOIFtoolsDeleteStatReadings { + my ($hash, @a) = @_; + my $pn = $hash->{NAME}; + my $st = AttrVal($pn,"DOIFtoolsHideStatReadings","") ? ".stat_" : "stat_"; readingsBeginUpdate($hash); + readingsBulkUpdate($hash,"Action","event recording stopped and data deleted"); + readingsBulkUpdate($hash,"doStatistics","disabled"); + readingsBulkUpdate($hash,"statisticHours","0.00"); + readingsBulkUpdate($hash,".t0",gettimeofday()); + readingsBulkUpdate($hash,".te",0); + readingsEndUpdate($hash,0); + if (AttrVal($pn,"DOIFtoolsEventOnDeleted","")){ + readingsBeginUpdate($hash); + foreach my $key (keys %{$hash->{READINGS}}) { + readingsBulkUpdate($hash,"stat_$1",ReadingsVal($pn,"$key",0)) if ($key =~ m/^$st(.*)/); + } + readingsEndUpdate($hash,1); + } + foreach my $key (keys %{$hash->{READINGS}}) { + delete $hash->{READINGS}{$key} if ($key =~ "^(stat_|\.stat_)"); + } +} ################################# sub DOIFtools_Define($$$) { @@ -627,16 +669,7 @@ sub DOIFtools_Attr(@) } } elsif ($init_done and $attr eq "DOIFtoolsHideStatReadings") { DOIFtoolsSetNotifyDev($hash,1,0); - readingsBeginUpdate($hash); - readingsBulkUpdate($hash,"Action","event recording stopped"); - readingsBulkUpdate($hash,"doStatistics","disabled"); - readingsBulkUpdate($hash,"statisticHours","0.00"); - readingsBulkUpdate($hash,".t0",gettimeofday()); - readingsBulkUpdate($hash,".te",0); - readingsEndUpdate($hash,0); - foreach my $key (keys %{$defs{$pn}->{READINGS}}) { - delete $defs{$pn}->{READINGS}{$key} if ($key =~ "^(stat_|\.stat_)"); - } + DOIFtoolsDeleteStatReadings($hash); } elsif ($init_done and $cmd eq "set" and $attr =~ m/^(executeDefinition|executeSave|target_room|target_group|readingsPrefix|eventMonitorInDOIF)$/) { $ret .= "\n$1 is an old attribute name use a new one beginning with DOIFtools..."; @@ -701,16 +734,7 @@ sub DOIFtools_Set($@) } elsif ($arg eq "doStatistics") { if ($value eq "deleted") { DOIFtoolsSetNotifyDev($hash,1,0); - readingsBeginUpdate($hash); - readingsBulkUpdate($hash,"Action","event recording stopped"); - readingsBulkUpdate($hash,"doStatistics","disabled"); - readingsBulkUpdate($hash,"statisticHours","0.00"); - readingsBulkUpdate($hash,".t0",gettimeofday()); - readingsBulkUpdate($hash,".te",0); - readingsEndUpdate($hash,0); - foreach my $key (keys %{$defs{$pn}->{READINGS}}) { - delete $defs{$pn}->{READINGS}{$key} if ($key =~ "^(stat_|\.stat_)"); - } + DOIFtoolsDeleteStatReadings($hash); } elsif ($value eq "disabled") { readingsBeginUpdate($hash); readingsBulkUpdate($hash,"Action","event recording paused"); @@ -729,14 +753,8 @@ sub DOIFtools_Set($@) $value =~ s/\,/|/g; readingsBeginUpdate($hash); readingsBulkUpdate($hash,"statisticsTYPEs",$value); - readingsBulkUpdate($hash,"doStatistics","disabled"); - readingsBulkUpdate($hash,".te",0); - readingsBulkUpdate($hash,".t0",gettimeofday()); - readingsBulkUpdate($hash,"statisticHours","0.00"); readingsEndUpdate($hash,0); - foreach my $key (keys %{$defs{$pn}->{READINGS}}) { - delete $defs{$pn}->{READINGS}{$key} if ($key =~ "^(stat_|\.stat_)"); - } + DOIFtoolsDeleteStatReadings($hash); DOIFtoolsSetNotifyDev($hash,1,0); } elsif ($arg eq "recording_target_duration") { $value =~ m/(\d+)/; @@ -1147,6 +1165,9 @@ DOIFtools stellt Funktionen zur Unterstützung von DOIF-Geräten bereit.
attr <name> DOIFtoolsHideStatReadings <0|1>
DOIFtoolsHideStatReadings 1, verstecken der stat_ Readings. Das Ändern des Attributs löscht eine bestehende Event-Aufzeichnung. Default 0.

+ attr <name> DOIFtoolsEventOnDeleted <0|1>
+ DOIFtoolsEventOnDeleted 1, es werden Events für alle stat_ erzeugt, bevor sie gelöscht werden. Damit könnten die erfassten Daten geloggt werden. Default 0.
+
attr <name> DOIFtoolsMyShortcuts <shortcut name>,<command>, ...
DOIFtoolsMyShortcuts <Bezeichnung>,<Befehl>,... anzeigen eigener Shortcuts, siehe globales Attribut menuEntries.
Zusätzlich gilt, wenn ein Eintrag mit ## beginnt und mit ,, endet, wird er als HTML interpretiert.