From ece62ce8c60220750c70970bc005c7acf6488965 Mon Sep 17 00:00:00 2001 From: Damian <> Date: Tue, 3 Jan 2017 12:56:17 +0000 Subject: [PATCH] 98_IF.pm: sleep not blocking git-svn-id: https://svn.fhem.de/fhem/trunk@12944 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_IF.pm | 49 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/fhem/FHEM/98_IF.pm b/fhem/FHEM/98_IF.pm index 8147b0e48..c55522c40 100644 --- a/fhem/FHEM/98_IF.pm +++ b/fhem/FHEM/98_IF.pm @@ -204,6 +204,7 @@ ParseCommandsIf($) my $parsedCmd=""; my $pos=0; $tailBlock =~ s/;/;;/g; + my $sleep; while ($tailBlock ne "") { if ($tailBlock=~ /^\s*\{/) { # perl block ($beginning,$currentBlock,$err,$tailBlock)=GetBlockIf($tailBlock,'[\{\}]'); @@ -240,20 +241,34 @@ ParseCommandsIf($) $currentBlock=$tailBlock; $tailBlock=""; } - if ($currentBlock =~ /[^\s]/g) { - $currentBlock =~ s/'/\\'/g; - ($currentBlock,$err)=ReplaceAllReadingsIf($currentBlock,1); - return ($currentBlock,$err) if ($err); - ($currentBlock,$err)=EvalAllIf($currentBlock); - $currentBlock =~ s/;/;;/g; - return ($currentBlock,$err) if ($err); - $parsedCmd.="fhem('".$currentBlock."')"; - $parsedCmd.=";;" if ($tailBlock); - } else { - $parsedCmd.=";;" if ($tailBlock); - } + if ($currentBlock =~ /[^\s]/g) { + $currentBlock =~ s/'/\\'/g; + ($currentBlock,$err)=ReplaceAllReadingsIf($currentBlock,1); + return ($currentBlock,$err) if ($err); + ($currentBlock,$err)=EvalAllIf($currentBlock); + $currentBlock =~ s/;/;;/g; + return ($currentBlock,$err) if ($err); + if ($sleep) { + $parsedCmd.=$currentBlock; + if ($tailBlock) { + $parsedCmd.=";;" + } else { + $parsedCmd.="')" + } + } elsif ($currentBlock =~ /^\s*sleep/) { + $sleep=1; + $parsedCmd.="fhem('".$currentBlock.";;"; + $parsedCmd.="')" if !($tailBlock); + } else { + $parsedCmd.="fhem('".$currentBlock."')"; + $parsedCmd.=";;" if ($tailBlock); + } + } else { + $parsedCmd.=";;" if ($tailBlock); + } } } + return($parsedCmd,""); } @@ -336,6 +351,8 @@ CommandIF($$) 1; =pod +=item summary FHEM IF-command +=item summary_DE FHEM IF-Befehl =begin html @@ -433,6 +450,10 @@ CommandIF($$)
define check at *10:00 IF ([indoor] eq "on") (set lamp1 on,define a_test at +00:10 set lampe2 on;;set lampe3 off;;set temp desired 20)

+ sleep can be used with comma, it is not blocking:
+
+ define check at *10:00 IF ([indoor] eq "on") (sleep 2,set lampe1 on,sleep 3,set lampe2 on)
+
Time-dependent switch: In the period 20:00 to 22:00 clock the light should go off when it was on and I leave the room:

define n_lamp_off notify sensor IF ($hms gt "20:00" and $hms lt "22:00" and [sensor] eq "absent") (set lamp:FILTER=STATE!=off off)
@@ -558,6 +579,10 @@ CommandIF($$)
define check at *10:00 IF ([indoor] eq "on") (set lamp1 on,define a_test at +00:10 set lampe2 on;;set lampe3 off;;set temp desired 20)

+ sleep kann mit Komma verwendet werden, dabei wirkt das sleep nicht blockierend:
+
+ define check at *10:00 IF ([indoor] eq "on") (sleep 2,set lampe1 on,sleep 3,set lampe2 on)
+
Zeitabhängig schalten: In der Zeit zwischen 20:00 und 22:00 Uhr soll das Licht ausgehen, wenn es an war und ich den Raum verlasse:

define n_lamp_off notify sensor IF ($hms gt "20:00" and $hms lt "22:00" and [sensor] eq "absent") (set lamp:FILTER=STATE!=off off)