From 078e57d7e61761c5d82c64655c7a9a29503c6443 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Thu, 17 Jun 2021 18:07:31 +0000 Subject: [PATCH] 91_watchdog.pm: add $DEV/$EVENT (Forum #121598) git-svn-id: https://svn.fhem.de/fhem/trunk@24648 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/91_watchdog.pm | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/fhem/FHEM/91_watchdog.pm b/fhem/FHEM/91_watchdog.pm index f767cb8fe..1d850b39e 100644 --- a/fhem/FHEM/91_watchdog.pm +++ b/fhem/FHEM/91_watchdog.pm @@ -46,7 +46,7 @@ watchdog_Initialize($) ($tTime && $tTime gt $aTime) || time_str2num($aTime)+$wh->{TO} <= $now); my $remaining = time_str2num($aTime)+$wh->{TO}; - watchdog_Activate($wh, $remaining); + watchdog_Activate($wh, undef, undef, $remaining); } }, 1) if(!$init_done); } @@ -57,6 +57,10 @@ watchdog_reset($) my ($watchdog) = @_; $watchdog->{STATE} = "defined"; setReadingsVal($watchdog, "Reset", "reset", TimeNow()); + if($watchdog->{READINGS}) { + delete($watchdog->{READINGS}{triggeredByDev}) ; + delete($watchdog->{READINGS}{triggeredByEvent}) ; + } } ##################################### @@ -99,7 +103,7 @@ watchdog_Define($$) $watchdog->{CMD} = $cmd; if($re1 eq ".") { - watchdog_Activate($watchdog) + watchdog_Activate($watchdog); } else { $watchdog->{STATE} = "defined"; # do not set the reading @@ -154,7 +158,7 @@ watchdog_Notify($$) RemoveInternalTimer($watchdog); if($re1 eq $re2 || $re1 eq "." || $re2act) { - watchdog_Activate($watchdog); + watchdog_Activate($watchdog, $n, $s); return ""; } else { @@ -163,13 +167,13 @@ watchdog_Notify($$) } } elsif($n =~ m/^$re1$/ || "$n:$s" =~ m/^$re1$/) { - watchdog_Activate($watchdog) if(!$dontReAct); + watchdog_Activate($watchdog, $n, $s) if(!$dontReAct); } } elsif($watchdog->{STATE} eq "defined") { if($dotTrigger || ($n =~ m/^$re1$/ || "$n:$s" =~ m/^$re1$/)) { - watchdog_Activate($watchdog) + watchdog_Activate($watchdog, $n, $s) } } elsif($dotTrigger) { @@ -193,11 +197,15 @@ watchdog_Trigger($) } Log3 $name, 3, "Watchdog $name triggered"; - my $exec = SemicolonEscape($watchdog->{CMD}); + my %specials= ( + "%NAME" => ReadingsVal($name, "triggeredByDev", ""), + "%EVENT" => ReadingsVal($name, "triggeredByEvent", "") + ); + my $exec = EvalSpecials($watchdog->{CMD}, %specials); $watchdog->{STATE} = "triggered"; - + setReadingsVal($watchdog, "Triggered", "triggered", TimeNow()); - + my $ret = AnalyzeCommandChain(undef, $exec); Log3 $name, 3, $ret if($ret); @@ -207,14 +215,19 @@ watchdog_Trigger($) } sub -watchdog_Activate($;$) +watchdog_Activate($;$$$) { - my ($watchdog, $remaining) = @_; - my $nt = ($remaining ? $remaining : gettimeofday() + $watchdog->{TO}); + my ($watchdog, $dev, $event, $remaining) = @_; + my $now = gettimeofday(); + my $nt = ($remaining ? $remaining : $now + $watchdog->{TO}); $watchdog->{STATE} = "Next: " . FmtTime($nt); RemoveInternalTimer($watchdog); InternalTimer($nt, "watchdog_Trigger", $watchdog, 0); + my $fmtNow = FmtDateTime($now); + setReadingsVal($watchdog, "triggeredByDev", $dev, $fmtNow) if($dev); + setReadingsVal($watchdog, "triggeredByEvent", $event, $fmtNow) if($event); + my $eor = AttrVal($watchdog->{NAME}, "execOnReactivate", undef); if($eor) { my $wName = $watchdog->{NAME}; @@ -346,6 +359,8 @@ watchdog_Set($@) currently not possible.
  • with modify all parameters are optional, and will not be changed if not specified.
  • +
  • the device and the event triggering the watchdog is available as $DEV + and $EVENT in the executable.

  • @@ -487,6 +502,9 @@ watchdog_Set($@)
  • Bei modify sind alle Parameter optional, und werden nicht geaendert, falls nicht spezifiziert.
  • +
  • Das aktivierende Gerät und Event sind al $DEV und $EVENT im + ausführenden Teil verfügbar.
  • +