From 9cb49c8778c08c8677dacdf12221b9e149099b08 Mon Sep 17 00:00:00 2001 From: damian-s Date: Mon, 13 Apr 2015 19:34:11 +0000 Subject: [PATCH] 98_DOIF.pm fixed: relative Timer +:MM git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@8432 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_DOIF.pm | 49 +++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 19 deletions(-) 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.