reduced API-querys in UpdateFn up to 50%

This commit is contained in:
Philipp Wo 2019-12-11 11:12:46 +01:00
parent e2a3946e3e
commit 4102cadc6c
1 changed files with 25 additions and 9 deletions

View File

@ -40,6 +40,7 @@ my $tokenFile = "./FHEM/FhemUtils/TadoAPI_token";
my $header = {};
my $data = {};
my $TokenData = {};
my $reqDebug = 5;
# helpers
my $apiStatus = 1;
@ -376,6 +377,7 @@ sub TadoAPI_CheckStatus(@){
callback => \&TadoAPI_callback
};
#test if api is reachable
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $AuthURL";
HttpUtils_NonblockingGet($param);
return undef;
@ -440,6 +442,7 @@ sub TadoAPI_NewTokenRequest(@) {
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $AuthURL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -495,6 +498,7 @@ sub TadoAPI_TokenRefresh(@) {
};
#Log3 $name, 5, 'Blocking GET TokenRefresh: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $AuthURL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -663,6 +667,7 @@ sub TadoAPI_SetZoneOverlayById(@){
};
#Log3 $name, 5, 'NonBlocking Request: ' . Dumper($request);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
}
}
@ -705,6 +710,7 @@ sub TadoAPI_UpdateFn(@){
hash => $hash,
callback => \&TadoAPI_UpdateAllZoneReadingsCallback
};
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "UpdFN: Request $URL";
HttpUtils_NonblockingGet($request);
# mobile devices
@ -718,6 +724,7 @@ sub TadoAPI_UpdateFn(@){
callback => \&TadoAPI_UpdateMobileReadingsCallback,
hash => $hash
};
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
}
}
@ -767,12 +774,13 @@ sub TadoAPI_UpdateAllZoneReadingsCallback($){
Log3 $name, 3, "TadoAPI $name" . ": " . "UpdateAllZonesCallback: Error in decoded data, Code: " . $decoded_data->{'errors'}->[0]->{'code'} if (exists($decoded_data->{'errors'}->[0]->{'code'}));
$hash->{LastRequest}="error";
}else{
readingsBeginUpdate($hash);
readingsBeginUpdate($hash);
foreach my $zone ( @$decoded_data ){
my $zoneid = $zone->{'id'};
my $zoneName = TadoAPI_ReplaceUmlaute($zone->{'name'});
Log3 $name, 5, "TadoAPI $name" . ": " . "Set Reading Update for Zone $zoneid ";
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay, $zoneName ) = TadoAPI_GetZoneReadingsById($hash, $zoneid);
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneid);
# updates zone readings
readingsBulkUpdate($hash, "Temperatur_" . $zoneName, $temperature);
@ -785,7 +793,6 @@ sub TadoAPI_UpdateAllZoneReadingsCallback($){
my $devices = $zone->{'devices'};
foreach my $device ( @$devices ){
readingsBulkUpdate($hash, "Battery_" . $device->{'serialNo'}, $device->{'batteryState'});
$hash->{LastRequest}="OK";
}
}
readingsEndUpdate( $hash, 1 );
@ -794,6 +801,7 @@ sub TadoAPI_UpdateAllZoneReadingsCallback($){
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "ActiveZones", $zonecount);
readingsEndUpdate( $hash, 0 );
$hash->{LastRequest}="OK";
}
}
@ -915,6 +923,7 @@ sub TadoAPI_GetZoneInfo(@) {
hash => $hash,
callback => \&TadoAPI_LogInfoCallback
};
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
# Mobileinfo
@ -943,6 +952,7 @@ sub TadoAPI_GetZoneInfo(@) {
hash => $hash,
callback => \&TadoAPI_LogInfoCallback
};
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
}
@ -961,6 +971,7 @@ sub TadoAPI_GetZoneInfo(@) {
hash => $hash,
callback => \&TadoAPI_LogInfoCallback
};
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
}
}
@ -993,6 +1004,7 @@ sub TadoAPI_SetGeoById(@){
hash => $hash,
callback => \&TadoAPI_SetGeoByIdCallback
};
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
}
}
@ -1026,6 +1038,7 @@ sub TadoAPI_GetHomeId(@){
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $DataURL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1068,6 +1081,7 @@ sub TadoAPI_GetGeoById(@){
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1092,7 +1106,7 @@ sub TadoAPI_GetGeoById(@){
}
}
}elsif(defined($item)){
Log3 $name, 3, "TadoAPI $name" . ": " . "GetGeoById: parsing item";
Log3 $name, 5, "TadoAPI $name" . ": " . "GetGeoById: parsing passed item";
return my ($setting, $distance) = TadoAPI_ParseMobileItem($hash, $item);
}
return undef;
@ -1143,6 +1157,7 @@ sub TadoAPI_GetMobileDevices(@) {
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1191,6 +1206,7 @@ sub TadoAPI_GetZoneCount(@) {
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1223,10 +1239,10 @@ sub TadoAPI_GetZoneCount(@) {
sub TadoAPI_GetZoneNameById(@) {
my ($hash, $zoneID) = @_;
my $name = $hash->{NAME};
my @devArr = TadoAPI_GetTadoDevices($hash);
my $zoneName = undef;
my @zones = TadoAPI_GetTadoDevices($hash);
foreach my $zone ( @devArr ){
foreach my $zone ( @zones ){
if ($zone->{'id'} == $zoneID){
$zoneName = TadoAPI_ReplaceUmlaute($zone->{'name'});
return $zoneName;
@ -1258,6 +1274,7 @@ sub TadoAPI_GetZoneReadingsById(@){
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")
@ -1271,8 +1288,6 @@ sub TadoAPI_GetZoneReadingsById(@){
if ($@){
Log3 $name, 3, "TadoAPI $name" . ": " . "GetZoneReadingsById: Zone $zoneID decode_json failed, invalid json. error:$@\n";
}else{
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneID);
$temperature = sprintf("%.1f", $decoded_data->{'sensorDataPoints'}->{'insideTemperature'}->{'celsius'});
$humidity = $decoded_data->{'sensorDataPoints'}->{'humidity'}->{'percentage'};
if($decoded_data->{'setting'}->{'power'} eq "OFF"){
@ -1284,7 +1299,7 @@ sub TadoAPI_GetZoneReadingsById(@){
$overlay = $decoded_data->{'overlayType'};
if (!defined $overlay) {$overlay = "no overlay"};
return ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay, $zoneName );
return ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay );
}
}
}
@ -1309,6 +1324,7 @@ sub TadoAPI_GetTadoDevices(@) {
};
#Log3 $name, 5, 'Blocking GET: ' . Dumper($param);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
my ($err, $data) = HttpUtils_BlockingGet($param);
if($err ne "")