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)