diff --git a/fhem/CHANGED b/fhem/CHANGED
index 69ccf6ff8..794ed875c 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,6 @@
# 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: chaining DOIF's detailFn if present
- feature: ESPEasy: added: dmx, motorshield, neopixel, candle, serialsend...
- feature: 57_Calendar: asynchronous parsing, disable update
- change: 34_ESPEasy: add IPv6 ULA to local IPs, add regexps to ACLs
diff --git a/fhem/FHEM/98_DOIFtools.pm b/fhem/FHEM/98_DOIFtools.pm
index adfd71187..8af65a3a2 100644
--- a/fhem/FHEM/98_DOIFtools.pm
+++ b/fhem/FHEM/98_DOIFtools.pm
@@ -325,7 +325,6 @@ sub DOIFtools_Initialize($)
$hash->{NotifyFn} = "DOIFtools_Notify";
$hash->{FW_detailFn} = "DOIFtools_fhemwebFn";
-
$data{FWEXT}{"/DOIFtools_logWrapper"}{CONTENTFUNC} = "DOIFtools_logWrapper";
my $oldAttr = "target_room:noArg target_group:noArg executeDefinition:noArg executeSave:noArg eventMonitorInDOIF:noArg readingsPrefix:noArg";
@@ -333,34 +332,46 @@ sub DOIFtools_Initialize($)
$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 DOIFtoolsEMbeforeReadings:1,0 DOIFtoolsNoLookUp:1,0 DOIFtoolsNoLookUpInDOIF:1,0 DOIFtoolsLogDir disabledForIntervals ".$oldAttr;
}
-sub DOIFtools_dO ($$$$){return "";}
+sub DOIFtools_dO ($$$$){
+return "";}
+
# FW_detailFn for DOIF injecting event monitor
sub DOIFtools_eM($$$$) {
my ($FW_wname, $d, $room, $pageHash) = @_; # pageHash is set for summaryFn.
my @dtn = devspec2array("TYPE=DOIFtools");
my $ret = "";
- $ret .= $DOIFtoolsJSfuncStart if (!AttrVal($dtn[0],"DOIFtoolsNoLookUpInDOIF",""));
- # Event Monitor
- my $a0 = ReadingsVal($d,".eM", "off") eq "on" ? "off" : "on";
- my $lang = AttrVal("global","language","EN");
- $ret .= "
Event monitor: toggle ";
- $ret .= "
";
+ # call DOIF_detailFn
+ no strict "refs";
+ $ret .= &{ReadingsVal($dtn[0],".DOIF_detailFn","")}($FW_wname, $d, $room, $pageHash) if (ReadingsVal($dtn[0],".DOIF_detailFn",""));
+ use strict "refs";
+ if (!$room) {
+ # LookUp in probably associated with
+ $ret .= $DOIFtoolsJSfuncStart if (!AttrVal($dtn[0],"DOIFtoolsNoLookUpInDOIF",""));
+ # Event Monitor
+ if (AttrVal($dtn[0],"DOIFtoolsEventMonitorInDOIF","")) {
+ my $a0 = ReadingsVal($d,".eM", "off") eq "on" ? "off" : "on";
+ my $lang = AttrVal("global","language","EN");
+ $ret .= "
" if (ReadingsVal($dtn[0],".DOIF_detailFn",""));
+ $ret .= "Event monitor: toggle ";
+ $ret .= " |
";
- my $a = "";
- if (ReadingsVal($d,".eM","off") eq "on") {
- $ret .= "";
- my $filter = $a ? ($a eq "log" ? "global" : $a) : ".*";
- $ret .= "";
- $ret .= $DOIFtoolsJSfuncEM;
+ my $a = "";
+ if (ReadingsVal($d,".eM","off") eq "on") {
+ $ret .= "";
+ my $filter = $a ? ($a eq "log" ? "global" : $a) : ".*";
+ $ret .= "";
+ $ret .= $DOIFtoolsJSfuncEM;
+ }
+ }
}
return $ret;
}
@@ -628,11 +639,14 @@ sub DOIFtools_Notify($$) {
CommandDeleteAttr(undef,"$pn eventMonitorInDOIF") if (AttrVal($pn,"eventMonitorInDOIF",""));
CommandSave(undef,undef);
}
- # Event monitor in DOIF
- if ($modules{DOIF}{LOADED} and !defined $modules{DOIF}->{FW_detailFn} and $sn eq "global" and $event =~ "^INITIALIZED\$" and AttrVal($pn,"DOIFtoolsEventMonitorInDOIF","")) {
- $modules{DOIF}->{FW_detailFn} = "DOIFtools_eM" if (!defined $modules{DOIF}->{FW_detailFn});
- readingsSingleUpdate($hash,".DOIFdO",$modules{DOIF}->{FW_deviceOverview},0);
- $modules{DOIF}->{FW_deviceOverview} = 1;
+ # Event monitor in DOIF FW_detailFn
+ if ($modules{DOIF}{LOADED} and $modules{DOIF}->{FW_detailFn} ne "DOIFtools_eM" and $sn eq "global" and $event =~ "^INITIALIZED\$" ) {
+ readingsBeginUpdate($hash);
+ readingsBulkUpdate($hash,".DOIF_detailFn",$modules{DOIF}->{FW_detailFn});
+ $modules{DOIF}->{FW_detailFn} = "DOIFtools_eM";
+ readingsBulkUpdate($hash,".DOIFdO",$modules{DOIF}->{FW_deviceOverview});
+ $modules{DOIF}->{FW_deviceOverview} = 1;
+ readingsEndUpdate($hash,0);
}
# Statistics event recording
if (ReadingsVal($pn,"doStatistics","disabled") eq "enabled" and !IsDisabled($pn) and $sn ne "global" and (ReadingsVal($pn,"statisticHours",0) <= ReadingsVal($pn,"recording_target_duration",0) or !ReadingsVal($pn,"recording_target_duration",0))) {
@@ -1022,14 +1036,14 @@ sub DOIFtools_Attr(@)
my $hash = $defs{$pn};
my $ret="";
if ($init_done and $attr eq "DOIFtoolsEventMonitorInDOIF") {
- if (!defined $modules{DOIF}->{FW_detailFn} and $cmd eq "set" and $value) {
- $modules{DOIF}->{FW_detailFn} = "DOIFtools_eM";
- readingsSingleUpdate($hash,".DOIFdO",$modules{DOIF}->{FW_deviceOverview},0);
- $modules{DOIF}->{FW_deviceOverview} = "DOIFtools_dO";
- } elsif ($modules{DOIF}->{FW_detailFn} eq "DOIFtools_eM" and ($cmd eq "del" or !$value)) {
- delete $modules{DOIF}->{FW_detailFn};
- $modules{DOIF}->{FW_deviceOverview} = ReadingsVal($pn,"DOIFtools_dO","");
- }
+ # if (!defined $modules{DOIF}->{FW_detailFn} and $cmd eq "set" and $value) {
+ # $modules{DOIF}->{FW_detailFn} = "DOIFtools_eM";
+ # readingsSingleUpdate($hash,".DOIFdO",$modules{DOIF}->{FW_deviceOverview},0);
+ # $modules{DOIF}->{FW_deviceOverview} = 1;
+ # } elsif ($modules{DOIF}->{FW_detailFn} eq "DOIFtools_eM" and ($cmd eq "del" or !$value)) {
+ # delete $modules{DOIF}->{FW_detailFn};
+ # $modules{DOIF}->{FW_deviceOverview} = ReadingsVal($pn,".DOIFdO","");
+ # }
} elsif ($init_done and $attr eq "DOIFtoolsMenuEntry") {
if ($cmd eq "set" and $value) {
if (!(AttrVal($FW_wname, "menuEntries","") =~ m/(DOIFtools\,$FW_ME\?detail\=DOIFtools\,)/)) {
@@ -1073,8 +1087,8 @@ sub DOIFtools_Undef
my ($hash, $pn) = @_;
$hash->{DELETED} = 1;
if (devspec2array("TYPE=DOIFtools") <=1 and defined($modules{DOIF}->{FW_detailFn}) and $modules{DOIF}->{FW_detailFn} eq "DOIFtools_eM") {
- delete $modules{DOIF}->{FW_detailFn};
- $modules{DOIF}->{FW_deviceOverview} = ReadingsVal($pn,"DOIFtools_dO","");
+ $modules{DOIF}->{FW_detailFn} = ReadingsVal($pn,".DOIF_detailFn","");
+ $modules{DOIF}->{FW_deviceOverview} = ReadingsVal($pn,".DOIFdO","");
}
if (AttrVal($pn,"DOIFtoolsMenuEntry","")) {
CommandDeleteAttr(undef, "$pn DOIFtoolsMenuEntry");
@@ -1691,7 +1705,8 @@ DOIFtools stellt Funktionen zur Unterstützung von DOIF-Geräten bereit.
disabledForIntervals pausiert die Statistikdatenerfassung.
-
+
+
Readings