increased timeouts + verbose level support

This commit is contained in:
Philipp Wo 2019-11-22 02:56:10 +01:00
parent 70bbea2d2a
commit 08c32cf0dc
1 changed files with 62 additions and 70 deletions

View File

@ -4,7 +4,7 @@
# FILE: 98_TadoAPI.pm
#
# USAGE: Module for FHEM
# Info: Turn $debug on for debugging
# Info: Turn verbose on for debugging
#
# REQUIREMENTS: Below modules should be pre-installed.
# HTTP::Request::Common
@ -38,7 +38,6 @@ my $AuthURL = qq{https://auth.tado.com/oauth/token};
my $DataURL = qq{https://my.tado.com/api/v2/me};
my $QueryURL = qq{https://my.tado.com/api/v2/homes};
my $tokenFile = "./FHEM/FhemUtils/TadoAPI_token";
my $debug = 0;
my $header = {};
my $data = {};
my $TokenData = {};
@ -148,9 +147,8 @@ sub TadoAPI_Set(@) {
my $value = $a[2];
my $name = $hash->{NAME};
my $subcmd;
my $message = undef;
#debug
$debug = $attr{$name}{debug};
if(!defined($sets{$cmd})) {
my @cmds = ();
foreach my $key (sort keys %sets) {
@ -169,10 +167,9 @@ sub TadoAPI_Set(@) {
TadoAPI_SetGeoById($hash, $value, 0);
}
TadoAPI_GetGeoById($hash, $value);
return undef;
} elsif( $cmd eq 'setZoneOverlay' ) {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
return "Need at least two parameters (ZoneID, Setting)" if(@a < 4);
if( $a[3] eq "off" ) {
@ -181,10 +178,9 @@ sub TadoAPI_Set(@) {
TadoAPI_SetZoneOverlayById($hash, $value, $a[3]);
}
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
return undef;
} elsif( $cmd eq 'setAllOverlays' ) {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
return "Need at least one parameter (Setting)" if(@a < 3);
if( $value eq "off" ) {
TadoAPI_SetAllOverlays($hash, "off");
@ -192,22 +188,21 @@ sub TadoAPI_Set(@) {
TadoAPI_SetAllOverlays($hash, $value);
}
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
return undef;
} elsif( $cmd eq 'refreshToken' ) {
Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)";
RemoveInternalTimer($hash);
InternalTimer( gettimeofday() + 10, "TadoAPI_Update", $hash, 0 );
TadoAPI_LoadToken($hash);
return undef;
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
} elsif( $cmd eq 'update' ) {
Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)";
TadoAPI_UpdateFn($hash);
return undef;
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
} elsif( $cmd eq 'getTemperature' ) {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
return "ZoneID as parameter needed" if (!$value);
if( $value >= 1 ) {
TadoAPI_GetZoneReadingsById($hash, $value);
@ -215,24 +210,23 @@ sub TadoAPI_Set(@) {
return "Wrong ZoneID";
}
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
return undef;
} elsif( $cmd eq 'password' ) {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)";
# name und cmd überspringen
shift @a;
shift @a;
# den Rest der das passwort enthält, als ein String
$subcmd = join(" ",@a);
return TadoAPI_storePassword($name,$subcmd);
#Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
$message = TadoAPI_storePassword($name,$subcmd);
# start the status update timer
RemoveInternalTimer($hash);
InternalTimer( gettimeofday() + 10, "TadoAPI_Update", $hash, 0 );
return undef;
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
}
return $message if $message;
return TadoAPI_Catch($@) if $@;
}
@ -245,8 +239,6 @@ sub TadoAPI_Get(@) {
my $homeID = $attr{$name}{homeID};
my $message = undef;
#debug
$debug = $attr{$name}{debug};
if(!defined($gets{$cmd})) {
my @cmds = ();
foreach my $key (sort keys %gets) {
@ -262,14 +254,14 @@ sub TadoAPI_Get(@) {
$cmd eq "getGeo" and do {
return "Need at least one parameter (mobileID)" if(@a < 3);
return "Wrong MobileID" if (length($value) < 6);
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)";
TadoAPI_GetGeoById($hash, $value);
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
last;
};
$cmd eq "getMobileDevices" and do {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)";
my @data = TadoAPI_GetMobileDevices($hash);
$message = "Device List:\n";
foreach my $item ( @data ){
@ -281,14 +273,14 @@ sub TadoAPI_Get(@) {
};
$cmd eq "getXTest" and do {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
$message = "Name: " . TadoAPI_GetZoneNameById($hash, $value);
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
last;
};
$cmd eq "getZoneDevices" and do {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)";
my @devArr = TadoAPI_RequestTadoDevices($hash);
my $devicecount = 0;
$message = "Tado-Device(s):\n";
@ -309,7 +301,7 @@ sub TadoAPI_Get(@) {
};
$cmd eq "getZoneInfo" and do {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)";
TadoAPI_GetZoneInfo($hash);
my $zonecount = TadoAPI_GetZoneCount($hash);
$message = "You have $zonecount Zones in Home " . $attr{$name}{homeID} . ".\n";
@ -373,8 +365,6 @@ sub TadoAPI_LoadToken(@){
my $tokenLifeTime = $hash->{TOKEN_LIFETIME};
$tokenLifeTime = 0 if(!defined $tokenLifeTime || $tokenLifeTime eq '');
my $Token = undef;
#debug
$debug = $attr{$name}{debug};
TadoAPI_OnlineStatus($hash);
@ -383,14 +373,14 @@ sub TadoAPI_LoadToken(@){
open(TOKENFILE, '<', $tokenFileName) or die("ERROR: $!");
$Token = decode_json(<TOKENFILE>)};
if($@ || $tokenLifeTime < gettimeofday()){
Log3 $name, 3, "TadoAPI $name" . ": " . "Error while loading: $@" if $debug && $@;
Log3 $name, 3, "TadoAPI $name" . ": " . "No Token or Token is expired, requesting new one" if $debug && $tokenLifeTime < gettimeofday();
Log3 $name, 5, "TadoAPI $name" . ": " . "Error while loading: $@ ,requesting new one";
Log3 $name, 5, "TadoAPI $name" . ": " . "Token is expired, requesting new one" if $tokenLifeTime < gettimeofday();
TadoAPI_NewTokenRequest($hash);
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "Token expires at " . localtime($tokenLifeTime) if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "Token expires at " . localtime($tokenLifeTime);
# if token is about to expire, refresh him
if(($tokenLifeTime-15) < gettimeofday()){
Log3 $name, 3, "TadoAPI $name" . ": " . "Token will expire soon, refreshing" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "Token will expire soon, refreshing";
TadoAPI_TokenRefresh($hash);
}
}
@ -407,7 +397,7 @@ sub TadoAPI_NewTokenRequest(@) {
my $password = TadoAPI_readPassword($name);
my $tokenFileName = $tokenFile."_".$name;
Log3 $name, 3, "TadoAPI $name" . ": " . "calling NewTokenRequest()" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "calling NewTokenRequest()";
$data = {
client_id => $client_id,
@ -426,7 +416,7 @@ sub TadoAPI_NewTokenRequest(@) {
data => $data
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -435,7 +425,7 @@ sub TadoAPI_NewTokenRequest(@) {
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "NewTokenRequest: decode_json failed, invalid json. error: $@ ";
@ -448,7 +438,7 @@ sub TadoAPI_NewTokenRequest(@) {
# token lifetime management
$hash->{TOKEN_LIFETIME} = gettimeofday() + $decoded_data->{'expires_in'};
$hash->{TOKEN_LIFETIME_HR} = localtime($hash->{TOKEN_LIFETIME});
Log3 $name, 3, "TadoAPI $name" . ": " . "Retrived new authentication token successfully. Valid until " . localtime($hash->{TOKEN_LIFETIME})if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "Retrived new authentication token successfully. Valid until " . localtime($hash->{TOKEN_LIFETIME});
$hash->{STATE}="reachable";
}
}
@ -458,7 +448,7 @@ sub TadoAPI_TokenRefresh(@) {
my ($hash) = @_;
my $name = $hash->{NAME};
Log3 $name, 3, "TadoAPI $name" . ": " . "calling TokenRefresh()" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "calling TokenRefresh()";
# load token
eval {
@ -490,7 +480,7 @@ sub TadoAPI_Update(@){
my ($hash) = @_;
my $name = $hash->{NAME};
Log3 $name, 3, "TadoAPI $name" . ": " . "TadoAPI_Update called" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "TadoAPI_Update called";
# timer loop
#
@ -524,7 +514,7 @@ sub TadoAPI_SetZoneOverlayById(@){
my $method = "";
my $myjson ="";
Log3 $name, 3, "TadoAPI $name" . ": SetOverlay for Zone $zoneID (Setting: " . $setting . ") - " . "query-URL: $URL" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": SetOverlay for Zone $zoneID (Setting: " . $setting . ") - " . "query-URL: $URL";
if ($setting eq "off"){
$method = "DELETE";
@ -606,7 +596,7 @@ sub TadoAPI_SetAllOverlays(@){
url => $URL,
header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" },
method => $method,
timeout => 3,
timeout => 10,
callback => \&Tado_UpdateZoneOverlayCallback,
hash => $hash,
setting => $setting,
@ -634,10 +624,10 @@ sub TadoAPI_UpdateAllZonesCallback($){
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $zonecount = TadoAPI_GetZoneCount($hash);
for (my $i=1; $i <= $zonecount; $i++) {
Log3 $name, 3, "TadoAPI $name" . ": " . "Set Reading Update for Zone $i ";
Log3 $name, 5, "TadoAPI $name" . ": " . "Set Reading Update for Zone $i ";
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $i);
my $zoneName = TadoAPI_GetZoneNameById($hash, $i);
@ -670,7 +660,7 @@ sub TadoAPI_UpdateFn(@){
url => $URL,
header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" },
method => 'GET',
timeout => 4,
timeout => 10,
hash => $hash,
callback => \&TadoAPI_UpdateAllZonesCallback
};
@ -678,6 +668,7 @@ sub TadoAPI_UpdateFn(@){
HttpUtils_NonblockingGet($request);
# mobile devices
$TokenData = TadoAPI_LoadToken($hash);
$URL=$QueryURL . qq{/$homeID/mobileDevices};
$request = {
url => $URL,
@ -690,12 +681,13 @@ sub TadoAPI_UpdateFn(@){
HttpUtils_NonblockingGet($request);
# tado devices
$TokenData = TadoAPI_LoadToken($hash);
$URL=$QueryURL.qq{/$homeID/zones};
$request = {
url => $URL,
header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" },
method => 'GET',
timeout => 10,
timeout => 8,
callback => \&TadoAPI_UpdateTadoDeviceInformationCallback,
hash => $hash
};
@ -715,11 +707,11 @@ sub TadoAPI_GetGeoById(@){
url => $URL,
header => {"Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}"},
method => 'GET',
timeout => 2,
timeout => 4,
hash => $hash,
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -728,7 +720,7 @@ sub TadoAPI_GetGeoById(@){
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "TadoAPI_GetGeoById: decode_json failed, invalid json. error:$@\n";
@ -755,12 +747,12 @@ sub TadoAPI_callback($){
if($param->{code} == 401 || $param->{code} == 400){
$apiStatus = 1;
$hash->{STATE}="reachable";
Log3 $name, 3, "TadoAPI $name" . ": " . "API is reachable. Callback Status: " . $param->{code} if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "API is reachable. Callback Status: " . $param->{code};
}else{
$apiStatus = 0;
$hash->{STATE}="error";
Log3 $name, 3, "TadoAPI $name" . ": " . "API error: apiStatus $apiStatus ($err)" if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "API error: apiStatus $apiStatus ($err)";
}
return undef;
@ -781,7 +773,7 @@ sub Tado_StoreTokenCallback($)
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval{decode_json($data);};
@ -797,7 +789,7 @@ sub Tado_StoreTokenCallback($)
# token lifetime management
$hash->{TOKEN_LIFETIME} = gettimeofday() + $decoded_data->{'expires_in'};
$hash->{TOKEN_LIFETIME_HR} = localtime($hash->{TOKEN_LIFETIME});
Log3 $name, 3, "TadoAPI $name" . ": " . "StoreTokenCallback: Refreshed authentication token successfully. Valid until " . localtime($hash->{TOKEN_LIFETIME})if $debug;
Log3 $name, 5, "TadoAPI $name" . ": " . "StoreTokenCallback: Refreshed authentication token successfully. Valid until " . localtime($hash->{TOKEN_LIFETIME});
$hash->{STATE}="reachable";
}
}
@ -819,7 +811,7 @@ sub Tado_UpdateZoneOverlayCallback($)
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
Log3 $name, 3, "TadoAPI $name" . ": " . "Set Overlay for Zone $zoneID to: $setting";
}
@ -857,7 +849,7 @@ sub TadoAPI_UpdateTadoDeviceInformationCallback($){
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
# if api returns error
@ -888,12 +880,12 @@ sub TadoAPI_UpdateMobileReadingsCallback($){
if($err ne "")
{
Log3 $name, 3, "Error in TadoAPI_UpdateMobileReadingsCallback while requesting ".$param->{url}." - $err";
Log3 $name, 3, "Error in UpdateMobileReadingsCallback while requesting ".$param->{url}." - $err";
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
# if api returns error
@ -901,7 +893,7 @@ sub TadoAPI_UpdateMobileReadingsCallback($){
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "Decode_json failed, invalid json. error:$@\n" if $@;
Log3 $name, 3, "TadoAPI $name" . ": " . "Error in TadoAPI_UpdateMobileReadingsCallback, Code: " . $decoded_data->{'errors'}->[0]->{'code'};
Log3 $name, 3, "TadoAPI $name" . ": " . "Error in UpdateMobileReadingsCallback, Code: " . $decoded_data->{'errors'}->[0]->{'code'};
$hash->{LastRequest}="error";
}else{
foreach my $item ( @$decoded_data ){
@ -927,7 +919,7 @@ sub TadoAPI_GetZoneInfo(@) {
url => $URL,
header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" },
method => 'GET',
timeout => 3,
timeout => 4,
infotext => "HomeInfos",
hash => $hash,
callback => \&TadoAPI_LogInfoCallback
@ -1068,7 +1060,7 @@ sub TadoAPI_RequestTadoDevices(@) {
hash => $hash
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1077,7 +1069,7 @@ sub TadoAPI_RequestTadoDevices(@) {
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "TadoAPI_RequestTadoDevices: decode_json failed, invalid json. error:$@\n";
@ -1114,7 +1106,7 @@ sub TadoAPI_ZoneRequest(@) {
zoneID => $i
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1123,7 +1115,7 @@ sub TadoAPI_ZoneRequest(@) {
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
# An dieser Stelle die Antwort parsen / verarbeiten mit $data
my $decoded_data = eval { decode_json($data) };
@ -1155,7 +1147,7 @@ sub TadoAPI_GetMobileDevices(@) {
hash => $hash
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1165,7 +1157,7 @@ sub TadoAPI_GetMobileDevices(@) {
elsif($data ne "")
{
my @devices = ();
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "TadoAPI_GetMobileDevices: decode_json failed, invalid json. error:$@\n";
@ -1209,7 +1201,7 @@ sub TadoAPI_GetHomeId(@){
hash => $hash,
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1218,7 +1210,7 @@ sub TadoAPI_GetHomeId(@){
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "GetHomeId: Decode_json failed, invalid json. error:$@" if $@;
@ -1249,7 +1241,7 @@ sub TadoAPI_GetZoneCount(@) {
hash => $hash
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1259,7 +1251,7 @@ sub TadoAPI_GetZoneCount(@) {
elsif($data ne "")
{
my @devices = ();
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
#print Dumper($decoded_data);
@ -1294,7 +1286,7 @@ sub TadoAPI_GetZoneNameById(@) {
hash => $hash
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1304,7 +1296,7 @@ sub TadoAPI_GetZoneNameById(@) {
elsif($data ne "")
{
my @devices = ();
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
@ -1344,7 +1336,7 @@ sub TadoAPI_GetZoneReadingsById(@){
hash => $hash
};
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1353,7 +1345,7 @@ sub TadoAPI_GetZoneReadingsById(@){
}
elsif($data ne "")
{
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
Log3 $name, 5, "url ".$param->{url}." returned: $data";
my $decoded_data = eval { decode_json($data) };
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "TadoAPI_GetZoneReadingsById: Zone $zoneID decode_json failed, invalid json. error:$@\n";