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 .= "
\n";
$ret .= "";
$ret .= "";
$ret .= "
";
+ $ret .= "";
}
return $ret;
}
@@ -254,13 +265,23 @@ sub DOIFtools_fhemwebFn($$$$) {
my $filter = $a ? ($a eq "log" ? "global" : $a) : ".*";
$ret .= "\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.