added update function for overlay, code cleaned

This commit is contained in:
Philipp Wo 2019-12-14 16:29:46 +01:00
parent a020f7ea0f
commit 085af3d5a8
1 changed files with 49 additions and 18 deletions

View File

@ -52,6 +52,7 @@ my %sets = (
"update" => "noArg",
"setGeo" => "",
"setZoneOverlay" => "",
"updateAllOverlays" => "noArg",
"setAllOverlays" => ""
);
@ -204,6 +205,11 @@ sub TadoAPI_Set(@) {
}
Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished\n";
} elsif( $cmd eq 'updateAllOverlays' ) {
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
TadoAPI_GetAllZoneOverlays($hash);
Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished\n";
} elsif( $cmd eq 'refreshToken' ) {
Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)";
RemoveInternalTimer($hash);
@ -220,7 +226,16 @@ sub TadoAPI_Set(@) {
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
return "ZoneID as parameter needed" if (!$value);
if( $value >= 1 ) {
TadoAPI_GetZoneReadingsById($hash, $value);
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $value);
my $zoneName = TadoAPI_GetZoneNameById($hash, $value);
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);
$message = "OK";
} else {
return "Wrong ZoneID";
}
@ -666,7 +681,6 @@ sub TadoAPI_SetZoneOverlayById(@){
data => $myjson
};
#Log3 $name, 5, 'NonBlocking Request: ' . Dumper($request);
Log3 $name, $reqDebug, "TadoAPI $name" . ": " . "Request $URL";
HttpUtils_NonblockingGet($request);
}
@ -676,19 +690,24 @@ sub TadoAPI_SetAllOverlays(@){
my ($hash, $setting) = @_;
my $name = $hash->{NAME};
my $homeID = $attr{$name}{homeID};
my $TokenData = TadoAPI_LoadToken($hash);
my @zones = TadoAPI_GetTadoDevices($hash);
if(defined($TokenData)){
my $message = "";
my $method = "";
my $myjson ="";
for (my $i=0; $i < @zones; $i++) {
my $zoneid = $zones[$i]->{'id'};
TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting);
}
}
my @devArr = TadoAPI_GetTadoDevices($hash);
sub TadoAPI_GetAllZoneOverlays(@){
my ($hash) = @_;
my $name = $hash->{NAME};
my @zones = TadoAPI_GetTadoDevices($hash);
for (my $i=0; $i < @devArr; $i++) {
my $zoneid = $devArr[$i]->{'id'};
TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting);
}
foreach my $zone ( @zones ){
my $zoneId = $zone->{'id'};
my $zoneName = TadoAPI_ReplaceUmlaute($zone->{'name'});
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneId);
readingsSingleUpdate($hash, "OverlayType_" . $zoneName, $overlay, 1);
}
}
@ -810,7 +829,7 @@ sub Tado_UpdateZoneOverlayCallback($)
my ($param, $err, $data) = @_;
my $hash = $param->{hash};
my $name = $hash->{NAME};
my $zoneID = $param->{zoneID};
my $zoneId = $param->{zoneID};
my $setting = $param->{setting};
if($err ne "")
@ -822,11 +841,21 @@ sub Tado_UpdateZoneOverlayCallback($)
elsif($data ne "")
{
Log3 $name, 5, "url ".$param->{url}." returned: $data";
Log3 $name, 3, "TadoAPI $name" . ": " . "set (async) Overlay for Zone $zoneID to: $setting";
Log3 $name, 3, "TadoAPI $name" . ": " . "set (async) Overlay for Zone $zoneId to: $setting";
}
# finaly update readings
TadoAPI_GetZoneReadingsById($hash, $zoneID);
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneId);
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneId);
# updates zone readings
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 );
}
sub TadoAPI_LogInfoCallback($){
@ -1425,7 +1454,7 @@ sub TadoAPI_readPassword($)
1;
=pod
=item helper
=item device
=item summary integration of the Tado API
=item summary_DE Anbindung der Tado Heizungssteuerung &uuml;ber API
=begin html
@ -1433,10 +1462,12 @@ sub TadoAPI_readPassword($)
<a name="TadoAPI"></a>
<h3>TadoAPI</h3>
<ul>
Module to control the integration of tado devices with FHEM.<br>
The TadoAPI module connects your tado devices to FHEM. Most zone readings are shown and desired temperature for a zone can be set.<br>
TadoAPI makes use of the (unofficial) tado api and does NOT rely on any addition local client installed.<br>
Notes:
<ul>
<li>JSON has to be installed on the FHEM host.</li>
<li>JSON has to be installed on the FHEM host.<br>
Please install the module (e.g. with <code>sudo apt-get install libjson-perl</code>) or the correct method for the underlying platform/system.</li>
</ul>
<a name="TadoAPIdefine"></a>