fixed error if tokendata is null

This commit is contained in:
Philipp Wo 2019-11-19 05:05:44 +01:00
parent cf3ac10da0
commit de68eebfc0
1 changed files with 53 additions and 39 deletions

View File

@ -644,9 +644,10 @@ sub Tado_UpdateZoneOverlayCallback($)
sub TadoAPI_SetAllOverlays(@){
my ($hash, $setting) = @_;
my $name = $hash->{NAME};
my $homeID = $attr{$name}{homeID};
my $homeID = $attr{$name}{homeID};
my $TokenData = TadoAPI_LoadToken($hash);
if($apiStatus == 1){
if(defined($TokenData)){
my $zonecount = TadoAPI_ZoneRequest($hash);
my $message = "";
my $method = "";
@ -697,11 +698,12 @@ sub TadoAPI_SetAllOverlays(@){
sub TadoAPI_UpdateFn(@){
my ($hash) = @_;
my $name = $hash->{NAME};
my $TokenData = TadoAPI_LoadToken($hash);
TadoAPI_Status($hash);
# zone specific updates
if($apiStatus == 1){
if($apiStatus == 1 && defined($TokenData)){
my @zones = TadoAPI_ZoneRequest($hash);
my @devices = TadoAPI_RequestTadoDevices($hash);
my $zonecount = @zones;
@ -745,6 +747,10 @@ sub TadoAPI_UpdateFn(@){
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "ActiveZones", $zonecount);
readingsEndUpdate( $hash, 1 );
$hash->{UpdateFn}="OK";
}else{
$hash->{UpdateFn}="Update error";
}
return undef;
}
@ -1101,21 +1107,24 @@ sub TadoAPI_GetZoneNameById(@) {
my $URL=$QueryURL.qq{/$homeID/zones};
my $TokenData = TadoAPI_LoadToken($hash);
$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 => 3,);
$UserAgent->default_headers($header);
if(defined($TokenData)){
$Request = GET($URL);
$Response = $UserAgent->request($Request);
$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 => 3,);
$UserAgent->default_headers($header);
if($Response->is_success){
my $ResponseData = decode_json($Response->content);
my $zoneName = TadoAPI_ReplaceUmlaute(@$ResponseData[$zoneID - 1]->{'name'});
$zoneName = encode("UTF-8", $zoneName);
$Request = GET($URL);
$Response = $UserAgent->request($Request);
return $zoneName;
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "GetZoneNameById: [Authentication Error]". $Response->status_line;
if($Response->is_success){
my $ResponseData = decode_json($Response->content);
my $zoneName = TadoAPI_ReplaceUmlaute(@$ResponseData[$zoneID - 1]->{'name'});
$zoneName = encode("UTF-8", $zoneName);
return $zoneName;
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "GetZoneNameById: [Authentication Error]". $Response->status_line;
}
}
return undef;
}
@ -1129,6 +1138,8 @@ sub TadoAPI_GetZoneTemperatureById(@){
my $humidity = 0;
my $TokenData = TadoAPI_LoadToken($hash);
if(defined($TokenData)){
$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 => 3,);
$UserAgent->default_headers($header);
@ -1145,6 +1156,7 @@ sub TadoAPI_GetZoneTemperatureById(@){
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "GetZoneTemperatureById: [Authentication Error]". $Response->status_line;
}
}
return undef;
}
@ -1160,35 +1172,37 @@ sub TadoAPI_GetZoneReadingsById(@){
my $overlay = 0;
my $TokenData = TadoAPI_LoadToken($hash);
my $header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
my $ua = LWP::UserAgent::Paranoid->new(ssl_opts => { verify_hostname => 1 },protocols_allowed => ['https','http'],request_timeout => 3,);
$ua->default_headers($header);
if(defined($TokenData)){
my $header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
my $ua = LWP::UserAgent::Paranoid->new(ssl_opts => { verify_hostname => 1 },protocols_allowed => ['https','http'],request_timeout => 3,);
$ua->default_headers($header);
my $req = GET($URL);
my $res = $ua->request($req);
my $req = GET($URL);
my $res = $ua->request($req);
if($res->is_success){
my $ResponseData = decode_json($res->content);
$temperature = $ResponseData->{'sensorDataPoints'}->{'insideTemperature'}->{'celsius'};
$humidity = $ResponseData->{'sensorDataPoints'}->{'humidity'}->{'percentage'};
$desiredTemp = $ResponseData->{'setting'}->{'temperature'}->{'celsius'};
$currentHeatingPower = $ResponseData->{'activityDataPoints'}->{'heatingPower'}->{'percentage'};
$overlay = $ResponseData->{'overlayType'};
if (!defined $overlay) {$overlay = "no overlay"};
if($res->is_success){
my $ResponseData = decode_json($res->content);
$temperature = $ResponseData->{'sensorDataPoints'}->{'insideTemperature'}->{'celsius'};
$humidity = $ResponseData->{'sensorDataPoints'}->{'humidity'}->{'percentage'};
$desiredTemp = $ResponseData->{'setting'}->{'temperature'}->{'celsius'};
$currentHeatingPower = $ResponseData->{'activityDataPoints'}->{'heatingPower'}->{'percentage'};
$overlay = $ResponseData->{'overlayType'};
if (!defined $overlay) {$overlay = "no overlay"};
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneID);
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneID);
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 );
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 );
return ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay );
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "GetZoneReadingsById: [Authentication Error]". $Response->status_line;
return ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay );
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "GetZoneReadingsById: [Authentication Error]". $Response->status_line;
}
}
return undef;
}