diff --git a/98_TadoAPI.pm b/98_TadoAPI.pm index 51874b3..c5db87b 100644 --- a/98_TadoAPI.pm +++ b/98_TadoAPI.pm @@ -210,7 +210,7 @@ sub TadoAPI_Set(@) { } elsif( $cmd eq 'update' ) { Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)"; - TadoAPI_UpdateFn($hash); + TadoAPI_UpdateFnNb($hash); Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n"; } elsif( $cmd eq 'zoneUpdate' ) { @@ -534,7 +534,7 @@ sub TadoAPI_Update(@){ InternalTimer( $nextTimer, "TadoAPI_Update", $hash, 0 ); # update subs - TadoAPI_UpdateFn($hash); + TadoAPI_UpdateFnNb($hash); return undef; } @@ -674,8 +674,14 @@ sub TadoAPI_SetAllOverlays(@){ } } } +###### main update function +sub TadoAPI_UpdateFnNb(@){ + my ($hash) = @_; + delete($hash->{helper}{RUNNING_PID}); + $hash->{helper}{RUNNING_PID} = BlockingCall("TadoAPI_DoUpdate", $hash,"TadoAPI_UpdateFnNbDone", 120, "TadoAPI_UpdateFnNbAborted", $hash) unless(exists($hash->{helper}{RUNNING_PID})); +} -sub TadoAPI_UpdateFn(@){ +sub TadoAPI_DoUpdate($){ my ($hash) = @_; my $name = $hash->{NAME}; my $TokenData = TadoAPI_LoadToken($hash); @@ -702,14 +708,33 @@ sub TadoAPI_UpdateFn(@){ url => $URL, header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" }, method => 'GET', - timeout => 10, + timeout => 15, incrementalTimout => 1, callback => \&TadoAPI_UpdateMobileReadingsCallback, hash => $hash }; HttpUtils_NonblockingGet($request); - } + return $name; +} + +sub TadoAPI_UpdateFnNbDone($){ + my ($string) = @_; + + return unless(defined($string)); + + my @a = split("\\|",$string); + my $hash = $defs{$a[0]}; + + delete($hash->{helper}{RUNNING_PID}); + Log3 $hash->{NAME}, 3, "BlockingCall for ".$hash->{NAME}." was DONE"; +} + +sub TadoAPI_UpdateFnNbAborted($){ + my ($hash) = @_; + + delete($hash->{helper}{RUNNING_PID}); + Log3 $hash->{NAME}, 3, "BlockingCall for ".$hash->{NAME}." was aborted"; } ########################################################################################################################################################################