diff --git a/FHEM/91_watchdog.pm b/FHEM/91_watchdog.pm index 2a2127a97..61b3ddc65 100644 --- a/FHEM/91_watchdog.pm +++ b/FHEM/91_watchdog.pm @@ -17,9 +17,35 @@ watchdog_Initialize($) $hash->{AttrFn} = "watchdog_Attr"; $hash->{SetFn} = "watchdog_Set"; $hash->{NotifyFn} = "watchdog_Notify"; - $hash->{AttrList} = "disable:0,1 disabledForIntervals execOnReactivate ". - "regexp1WontReactivate:0,1 addStateEvent:0,1 ". - "autoRestart:0,1"; + no warnings 'qw'; + my @attrList = qw( + activateOnStart:0,1 + addStateEvent:0,1 + autoRestart:0,1 + disable:0,1 + disabledForIntervals + execOnReactivate + regexp1WontReactivate:0,1 + ); + use warnings 'qw'; + $hash->{AttrList} = join(" ", @attrList); + + # acivateOnStart handling + InternalTimer(1, sub() { + my @arr = devspec2array("TYPE=watchdog"); + my $now = time(); + foreach my $wd (@arr) { + next if(!AttrVal($wd, "activateOnStart", 0)); + my $wh = $defs{$wd}; + my $aTime = ReadingsTimestamp($wd, "Activated", undef); + my $tTime = ReadingsTimestamp($wd, "Triggered", undef); + next if(!$aTime || + ($tTime && $tTime gt $aTime) || + time_str2num($aTime)+$wh->{TO} <= $now); + my $remaining = time_str2num($aTime)+$wh->{TO}; + watchdog_Activate($wh, $remaining); + } + }, 1) if(!$init_done); } @@ -169,10 +195,10 @@ watchdog_Trigger($) } sub -watchdog_Activate($) +watchdog_Activate($;$) { - my ($watchdog) = @_; - my $nt = gettimeofday() + $watchdog->{TO}; + my ($watchdog, $remaining) = @_; + my $nt = ($remaining ? $remaining : gettimeofday() + $watchdog->{TO}); $watchdog->{STATE} = "Next: " . FmtTime($nt); RemoveInternalTimer($watchdog); InternalTimer($nt, "watchdog_Trigger", $watchdog, 0); @@ -184,7 +210,7 @@ watchdog_Activate($) my $tTime = ReadingsTimestamp($wName, "Triggered", ""); $eor = undef if(!$aTime || !$tTime || $aTime ge $tTime) } - setReadingsVal($watchdog, "Activated", "activated", TimeNow()); + setReadingsVal($watchdog, "Activated","activated", TimeNow()) if(!$remaining); AnalyzeCommandChain(undef, SemicolonEscape($eor)) if($eor); } @@ -334,6 +360,14 @@ watchdog_Set($@) Attributes