dynamic zone support started, helper methods for zonecount and zone names
This commit is contained in:
parent
572f1fc305
commit
ff7a81075d
|
@ -606,7 +606,6 @@ sub TadoAPI_SetOverlay(@){
|
|||
Log3 $name, 3, "TadoAPI $name" . ": " . "Status (setOverlay): " . $Response->status_line if $debug;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -628,6 +627,8 @@ sub TadoAPI_GetUpdate(@){
|
|||
|
||||
TadoAPI_Connect($hash);
|
||||
|
||||
my $zonecount = TadoAPI_GetZoneCount($hash);
|
||||
|
||||
# zone specific updates
|
||||
if($apiStatus == 1){
|
||||
$header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
|
||||
|
@ -637,8 +638,9 @@ sub TadoAPI_GetUpdate(@){
|
|||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
if($Response->is_success){
|
||||
my $ResponseData = decode_json($Response->content);
|
||||
|
||||
$temperature = $ResponseData->{'sensorDataPoints'}->{'insideTemperature'}->{'celsius'};
|
||||
$tadoMode = $ResponseData->{'tadoMode'};
|
||||
$humidity = $ResponseData->{'sensorDataPoints'}->{'humidity'}->{'percentage'};
|
||||
|
@ -680,6 +682,7 @@ sub TadoAPI_GetUpdate(@){
|
|||
readingsBulkUpdate($hash, "Heizleistung", $currentHeatingPower);
|
||||
readingsBulkUpdate($hash, "OverlayType", $overlay);
|
||||
readingsBulkUpdate($hash, "DesiredTemp", $desiredTemp);
|
||||
readingsBulkUpdate($hash, "ActiveZones", $zonecount);
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
}
|
||||
$success = 0;
|
||||
|
@ -803,7 +806,8 @@ sub TadoAPI_GetZoneInfo(@) {
|
|||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Tado Devices:\n" . $Response->content . "\n";
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Tado Devices:\n" . $Response->content . "\n";
|
||||
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
|
@ -818,19 +822,22 @@ sub TadoAPI_GetZoneInfo(@) {
|
|||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
# ZoneInfo
|
||||
$URL=$QueryURL.qq{/$homeID/zones/1/state};
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
my $ResponseData = decode_json($Response->content);
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Zone 1 State:\n" . $Response->content;
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
|
||||
for (my $i=1; $i <= TadoAPI_GetZoneCount($hash); $i++) {
|
||||
$URL=$QueryURL.qq{/$homeID/zones/$i/state};
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
print "\n";
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $i);
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Zone $i ($zoneName) Status:\n" . $Response->content;
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
@ -911,6 +918,60 @@ sub TadoAPI_SetGeo(@){
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
############ Helpers #################
|
||||
sub TadoAPI_GetZoneCount(@) {
|
||||
my ($hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $homeID = $attr{$name}{homeID};
|
||||
my $URL=$QueryURL.qq{/$homeID/zones};
|
||||
my $zonecount = 0;
|
||||
|
||||
$header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
|
||||
$UserAgent = LWP::UserAgent::Paranoid->new(ssl_opts => { verify_hostname => 1 },protocols_allowed => ['https','http'],request_timeout => 5,);
|
||||
$UserAgent->default_headers($header);
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
my $ResponseData = decode_json($Response->content);
|
||||
foreach my $item( @$ResponseData ) {
|
||||
$zonecount++;
|
||||
}
|
||||
return $zonecount;
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub TadoAPI_GetZoneNameById(@) {
|
||||
my ($hash, $zoneID) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $homeID = $attr{$name}{homeID};
|
||||
my $URL=$QueryURL.qq{/$homeID/zones};
|
||||
|
||||
$header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
|
||||
$UserAgent = LWP::UserAgent::Paranoid->new(ssl_opts => { verify_hostname => 1 },protocols_allowed => ['https','http'],request_timeout => 5,);
|
||||
$UserAgent->default_headers($header);
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
my $ResponseData = decode_json($Response->content);
|
||||
my $zoneName = @$ResponseData[$zoneID - 1]->{'name'};
|
||||
return $zoneName;
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
# Beginn der Commandref
|
||||
|
|
Loading…
Reference in New Issue