2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 12:49:34 +00:00

made sleep nonblocking in at/notify/etc

git-svn-id: https://svn.fhem.de/fhem/trunk@1398 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2012-03-30 07:11:39 +00:00
parent b88ece1aaf
commit 7dff85e2fc
3 changed files with 24 additions and 7 deletions

View File

@ -20,6 +20,7 @@
- feature: FHEMWEB console (== inform timer) - feature: FHEMWEB console (== inform timer)
- feature: remove dependency on Google::Weather, major rewrite (Boris) - feature: remove dependency on Google::Weather, major rewrite (Boris)
- feature: started experimental interface implementation (fhem API v2) (Boris) - feature: started experimental interface implementation (fhem API v2) (Boris)
- feature: sleep issued in at/notify/etc is not blocking fhem anymore
- 2011-12-31 (5.2) - 2011-12-31 (5.2)

View File

@ -1020,12 +1020,11 @@ A line ending with \ will be concatenated with the next one, so long lines
Example: Example:
<ul> <ul>
<code>sleep 0.5</code><br> <code>sleep 0.5</code><br>
<code>notify btn3 set lamp toggle;;sleep 0.5;;set lamp toggle</code> <code>define n3 notify btn3.* set lamp toggle;;sleep 0.5;;set lamp toggle</code>
</ul> </ul>
<br> <br>
Note: As the server is <b>not</b> multithreaded, everything is blocked for Note: sleep followed by another command and issued in at/notify/etc is not
the given amount.<br> blocking fhem.<br>
</ul> </ul>

View File

@ -183,6 +183,7 @@ my $namedef =
"- a range seperated by dash (-)\n"; "- a range seperated by dash (-)\n";
my $stt_sec; # Used by SecondsTillTomorrow() my $stt_sec; # Used by SecondsTillTomorrow()
my $stt_day; # Used by SecondsTillTomorrow() my $stt_day; # Used by SecondsTillTomorrow()
my @cmdList; # Remaining commands in a chain. Used by sleep
$init_done = 0; $init_done = 0;
@ -683,7 +684,8 @@ AnalyzeCommandChain($$)
$cmd =~ s/#.*$//s; $cmd =~ s/#.*$//s;
$cmd =~ s/;;/SeMiCoLoN/g; $cmd =~ s/;;/SeMiCoLoN/g;
foreach my $subcmd (split(";", $cmd)) { @cmdList = split(";", $cmd);
while(my $subcmd = shift @cmdList) {
$subcmd =~ s/SeMiCoLoN/;/g; $subcmd =~ s/SeMiCoLoN/;/g;
my $lret = AnalyzeCommand($c, $subcmd); my $lret = AnalyzeCommand($c, $subcmd);
push(@ret, $lret) if(defined($lret)); push(@ret, $lret) if(defined($lret));
@ -725,7 +727,6 @@ AnalyzeCommand($$)
$cmd =~ s/^(\\\n|[ \t])*//;# Strip space or \\n at the begginning $cmd =~ s/^(\\\n|[ \t])*//;# Strip space or \\n at the begginning
$cmd =~ s/[ \t]*$//; $cmd =~ s/[ \t]*$//;
Log 5, "Cmd: >$cmd<"; Log 5, "Cmd: >$cmd<";
return undef if(!$cmd); return undef if(!$cmd);
@ -1929,10 +1930,26 @@ CommandSleep($$)
return "Cannot interpret $param as seconds" if($param !~ m/^[0-9\.]+$/); return "Cannot interpret $param as seconds" if($param !~ m/^[0-9\.]+$/);
Log 4, "sleeping for $param"; Log 4, "sleeping for $param";
if(!$cl && @cmdList && $param && $init_done) {
InternalTimer(gettimeofday()+$param, "WakeUpFn", join(";;", @cmdList), 0);
@cmdList=();
} else {
select(undef, undef, undef, $param); select(undef, undef, undef, $param);
}
return undef; return undef;
} }
sub
WakeUpFn($)
{
my $param = shift;
my $ret = AnalyzeCommandChain(undef, $param);
Log 2, "After sleep: $ret" if($ret);
}
##################################### #####################################
# Return the time to the next event (or undef if there is none) # Return the time to the next event (or undef if there is none)