dynamic zone support started, helper methods for zonecount and zone names

This commit is contained in:
Philipp Wo 2019-11-10 01:53:13 +00:00
parent 572f1fc305
commit ff7a81075d
1 changed files with 75 additions and 14 deletions

View File

@ -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