diff --git a/98_TadoAPI.pm b/98_TadoAPI.pm index 2985577..919e748 100644 --- a/98_TadoAPI.pm +++ b/98_TadoAPI.pm @@ -52,6 +52,7 @@ my %sets = ( "update" => "noArg", "setGeo" => "", "setZoneOverlay" => "", + "updateAllOverlays" => "noArg", "setAllOverlays" => "" ); @@ -204,6 +205,11 @@ sub TadoAPI_Set(@) { } Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished\n"; + } elsif( $cmd eq 'updateAllOverlays' ) { + Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)"; + TadoAPI_GetAllZoneOverlays($hash); + Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished\n"; + } elsif( $cmd eq 'refreshToken' ) { Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)"; RemoveInternalTimer($hash); @@ -220,7 +226,16 @@ sub TadoAPI_Set(@) { Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)"; return "ZoneID as parameter needed" if (!$value); if( $value >= 1 ) { - TadoAPI_GetZoneReadingsById($hash, $value); + my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $value); + my $zoneName = TadoAPI_GetZoneNameById($hash, $value); + readingsBeginUpdate($hash); + readingsBulkUpdate($hash, "Temperatur_" . $zoneName, $temperature); + readingsBulkUpdate($hash, "Luftfeuchtigkeit_" . $zoneName, $humidity); + readingsBulkUpdate($hash, "Heizleistung_" . $zoneName, $currentHeatingPower); + readingsBulkUpdate($hash, "OverlayType_" . $zoneName, $overlay); + readingsBulkUpdate($hash, "DesiredTemp_" . $zoneName, $desiredTemp); + readingsEndUpdate($hash, 1); + $message = "OK"; } else { return "Wrong ZoneID"; } @@ -666,7 +681,6 @@ sub TadoAPI_SetZoneOverlayById(@){ data => $myjson }; - #Log3 $name, 5, 'NonBlocking Request: ' . Dumper($request); Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL"; HttpUtils_NonblockingGet($request); } @@ -676,19 +690,24 @@ sub TadoAPI_SetAllOverlays(@){ my ($hash, $setting) = @_; my $name = $hash->{NAME}; my $homeID = $attr{$name}{homeID}; - my $TokenData = TadoAPI_LoadToken($hash); + my @zones = TadoAPI_GetTadoDevices($hash); - if(defined($TokenData)){ - my $message = ""; - my $method = ""; - my $myjson =""; + for (my $i=0; $i < @zones; $i++) { + my $zoneid = $zones[$i]->{'id'}; + TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting); + } +} - my @devArr = TadoAPI_GetTadoDevices($hash); +sub TadoAPI_GetAllZoneOverlays(@){ + my ($hash) = @_; + my $name = $hash->{NAME}; + my @zones = TadoAPI_GetTadoDevices($hash); - for (my $i=0; $i < @devArr; $i++) { - my $zoneid = $devArr[$i]->{'id'}; - TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting); - } + foreach my $zone ( @zones ){ + my $zoneId = $zone->{'id'}; + my $zoneName = TadoAPI_ReplaceUmlaute($zone->{'name'}); + my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneId); + readingsSingleUpdate($hash, "OverlayType_" . $zoneName, $overlay, 1); } } @@ -810,7 +829,7 @@ sub Tado_UpdateZoneOverlayCallback($) my ($param, $err, $data) = @_; my $hash = $param->{hash}; my $name = $hash->{NAME}; - my $zoneID = $param->{zoneID}; + my $zoneId = $param->{zoneID}; my $setting = $param->{setting}; if($err ne "") @@ -822,11 +841,21 @@ sub Tado_UpdateZoneOverlayCallback($) elsif($data ne "") { Log3 $name, 5, "url ".$param->{url}." returned: $data"; - Log3 $name, 3, "TadoAPI $name" . ": " . "set (async) Overlay for Zone $zoneID to: $setting"; + Log3 $name, 3, "TadoAPI $name" . ": " . "set (async) Overlay for Zone $zoneId to: $setting"; } # finaly update readings - TadoAPI_GetZoneReadingsById($hash, $zoneID); + my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneId); + my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneId); + + # updates zone readings + readingsBeginUpdate($hash); + # readingsBulkUpdate($hash, "Temperatur_" . $zoneName, $temperature); + # readingsBulkUpdate($hash, "Luftfeuchtigkeit_" . $zoneName, $humidity); + # readingsBulkUpdate($hash, "Heizleistung_" . $zoneName, $currentHeatingPower); + readingsBulkUpdate($hash, "OverlayType_" . $zoneName, $overlay); + readingsBulkUpdate($hash, "DesiredTemp_" . $zoneName, $desiredTemp); + readingsEndUpdate( $hash, 1 ); } sub TadoAPI_LogInfoCallback($){ @@ -1425,7 +1454,7 @@ sub TadoAPI_readPassword($) 1; =pod -=item helper +=item device =item summary integration of the Tado API =item summary_DE Anbindung der Tado Heizungssteuerung über API =begin html @@ -1433,10 +1462,12 @@ sub TadoAPI_readPassword($)

TadoAPI