diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm index bd133d51b..c080eadbf 100644 --- a/fhem/FHEM/98_DOIF.pm +++ b/fhem/FHEM/98_DOIF.pm @@ -389,29 +389,33 @@ DOIF_CheckTimers($$$$$) my ($hash,$timer,$condition,$trigger,$timerarray)=@_; $timer =~ s/\s//g; while ($timer ne "") { - if ($timer=~ /^\s*\+\(/) { + if ($timer=~ /^\+\(/) { ($beginning,$time,$err,$timer)=GetBlockDoIf($timer,'[\(\)]'); return ($time,$err) if ($err); $time="+(".$time.")"; ($result,$err)=ReplaceAllReadingsDoIf($hash,$time,-3,0); return ($time,$err) if ($err); - } elsif ($timer=~ /^\s*\(/) { + } elsif ($timer=~ /^\(/) { ($beginning,$time,$err,$timer)=GetBlockDoIf($timer,'[\(\)]'); return ($time,$err) if ($err); $time="(".$time.")"; ($result,$err)=ReplaceAllReadingsDoIf($hash,$time,-3,0); return ($time,$err) if ($err); - } elsif ($timer=~ /^\s*\{/) { + } elsif ($timer=~ /^\{/) { ($beginning,$time,$err,$timer)=GetBlockDoIf($timer,'[\{\}]'); return ($time,$err) if ($err); $time="{".$time."}"; - } elsif ($timer=~ /^\s*\+\[/) { + } elsif ($timer=~ m/^\+\[([0-9]+)\]:([0-5][0-9])/g) { + $pos=pos($timer); + $time=substr($timer,0,$pos); + $timer=substr($timer,$pos); + } elsif ($timer=~ /^\+\[/) { ($beginning,$time,$err,$timer)=GetBlockDoIf($timer,'[\[\]]'); return ($time,$err) if ($err); $time="+[".$time."]"; ($result,$err)=ReplaceAllReadingsDoIf($hash,$time,-3,0); return ($time,$err) if ($err); - } elsif ($timer=~ /^\s*\[/) { + } elsif ($timer=~ /^\[/) { ($beginning,$time,$err,$timer)=GetBlockDoIf($timer,'[\[\]]'); return ($time,$err) if ($err); $time="[".$time."]"; @@ -839,6 +843,7 @@ DOIF_DetTime($) $h = $hour; } } + $rel=0; } else { $m=$align; if ($hr > 1) { @@ -875,18 +880,20 @@ DOIF_CalcTime($) my $device; my $pos; my $ret; - - if ($block =~ /^\s*\+/g) { + if ($block=~ m/^\+\[([0-9]+)\]:([0-5][0-9])$/) { + ($err,$rel,$block)=DOIF_DetTime($block); + return ($block,$err,$rel); + } elsif ($block =~ /^\+\(/ or $block =~ /^\+\[/) { $relGlobal=1; - $pos=pos($block); - $block=substr($block,$pos); - } - - if ($block =~ /^\s*\(/) { + #$pos=pos($block); + $block=substr($block,1); + } + + if ($block =~ /^\(/) { ($beginning,$tailBlock,$err,$tailBlock)=GetBlockDoIf($block,'[\(\)]'); return ($tailBlock,$err) if ($err); } else { - if ($block =~ /^\s*\[/) { + if ($block =~ /^\[/) { ($beginning,$block,$err,$tailBlock)=GetBlockDoIf($block,'[\[\]]'); return ($block,$err) if ($err); ($block,$err,$device,$reading,$internal)=ReplaceReadingEvalDoIf($block,1); @@ -1276,9 +1283,9 @@ Many examples with english identifiers - see german section.
define di_gong DOIF ([+:15]) (set Gong_mp3 playTone 1)
attr di_gong do always[<begin>-<end>] für <begin> bzw. <end> wird das gleiche Zeitformat verwendet, wie bei einzelnen Zeitangaben.[<begin>-<end>],
+für <begin> bzw. <end> wird das gleiche Zeitformat verwendet,
+wie bei einzelnen Zeitangaben. Getriggert wird das Modul zum Zeitpunkt <begin> und zum Zeitpunkt <end>.
+Soll ein Zeitintervall ohne Zeittrigger lediglich zur Abfrage dienen, so muss hinter der eckigen Klammer ein Fragezeichen angegeben werden (siehe Beispiele weiter unten).
+Das Zeitintervall ist als logischer Ausdruck ab dem Zeitpunkt <begin> wahr und ab dem Zeitpunkt <end> nicht mehr wahr.define di_light DOIF ([({sunset()}+300+int(rand(600)))])
+define di_light DOIF ([({sunset()}+900+int(rand(600)))])
(set lamp on)
DOELSEIF ([([23:00]+int(rand(600)))])
(set lamp off)