added zone lock functionality for tablet-ui thermostat
This commit is contained in:
parent
66a5c525a9
commit
ba14eee4b1
@ -239,14 +239,17 @@ sub TadoAPI_Set(@) {
|
||||
if( $value >= 1 ) {
|
||||
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";
|
||||
if(defined($zoneName)){
|
||||
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";
|
||||
}
|
||||
@ -356,8 +359,8 @@ sub TadoAPI_Get(@) {
|
||||
$message = "You have $zonecount Zones in Home " . $attr{$name}{homeID} . ".\n";
|
||||
my @devArr = TadoAPI_GetTadoDevices($hash);
|
||||
for (my $i=0; $i < @devArr; $i++){
|
||||
my $zoneid = $devArr[$i]->{'id'};
|
||||
$message .= "Zone ID $zoneid: " . TadoAPI_GetZoneNameById($hash, $zoneid) . "\n";
|
||||
my $zoneID = $devArr[$i]->{'id'};
|
||||
$message .= "Zone ID $zoneID: " . TadoAPI_GetZoneNameById($hash, $zoneID) . "\n";
|
||||
}
|
||||
$message .= "See Logfile for more Info";
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
|
||||
@ -600,6 +603,8 @@ sub TadoAPI_SetZoneOverlayById(@){
|
||||
my $dt = time();
|
||||
$dt += $duration if defined($duration);
|
||||
|
||||
delete($hash->{helper}{LockedZones}{$zoneID});
|
||||
|
||||
# remove overlay
|
||||
if($setting eq "remove"){
|
||||
$method = "DELETE";
|
||||
@ -637,10 +642,9 @@ sub TadoAPI_SetZoneOverlayById(@){
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
# infinite temperature overlay
|
||||
}
|
||||
elsif($setting > 0){
|
||||
# timed overlay
|
||||
# set timed overlay
|
||||
if(defined($duration) && $duration > 0){
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
@ -659,6 +663,8 @@ sub TadoAPI_SetZoneOverlayById(@){
|
||||
}
|
||||
};
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Set Timer Overlay for Zone $zoneID with $duration seconds expire.";
|
||||
# seet lock for this zone
|
||||
$hash->{helper}{LockedZones}{$zoneID}="locked";
|
||||
}
|
||||
else{
|
||||
# infinite setting
|
||||
@ -704,11 +710,11 @@ sub TadoAPI_SetAllOverlays(@){
|
||||
my @zones = TadoAPI_GetTadoDevices($hash);
|
||||
|
||||
for (my $i=0; $i < @zones; $i++) {
|
||||
my $zoneid = $zones[$i]->{'id'};
|
||||
my $zoneID = $zones[$i]->{'id'};
|
||||
if(defined($duration) && $duration > 0){
|
||||
TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting, $duration);
|
||||
TadoAPI_SetZoneOverlayById($hash, $zoneID, $setting, $duration);
|
||||
}else{
|
||||
TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting);
|
||||
TadoAPI_SetZoneOverlayById($hash, $zoneID, $setting);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -719,9 +725,9 @@ sub TadoAPI_GetAllZoneOverlays(@){
|
||||
my @zones = TadoAPI_GetTadoDevices($hash);
|
||||
|
||||
foreach my $zone ( @zones ){
|
||||
my $zoneId = $zone->{'id'};
|
||||
my $zoneID = $zone->{'id'};
|
||||
my $zoneName = TadoAPI_ReplaceUmlaute($zone->{'name'});
|
||||
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneId);
|
||||
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneID);
|
||||
readingsSingleUpdate($hash, "OverlayType_" . $zoneName, $overlay, 1);
|
||||
}
|
||||
}
|
||||
@ -810,11 +816,11 @@ sub TadoAPI_UpdateAllZoneReadingsCallback($){
|
||||
}else{
|
||||
readingsBeginUpdate($hash);
|
||||
foreach my $zone ( @$decoded_data ){
|
||||
my $zoneid = $zone->{'id'};
|
||||
my $zoneID = $zone->{'id'};
|
||||
my $zoneName = TadoAPI_ReplaceUmlaute($zone->{'name'});
|
||||
Log3 $name, 5, "TadoAPI $name" . ": " . "Set Reading Update for Zone $zoneid ";
|
||||
Log3 $name, 5, "TadoAPI $name" . ": " . "Set Reading Update for Zone $zoneID ";
|
||||
|
||||
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneid);
|
||||
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneID);
|
||||
|
||||
# updates zone readings
|
||||
readingsBulkUpdate($hash, "Temperatur_" . $zoneName, $temperature);
|
||||
@ -844,7 +850,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 "")
|
||||
@ -856,21 +862,30 @@ 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
|
||||
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneId);
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneId);
|
||||
my ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay ) = TadoAPI_GetZoneReadingsById($hash, $zoneID);
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneID);
|
||||
if(defined($zoneName)){
|
||||
# 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);
|
||||
|
||||
# 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 );
|
||||
# lock zone if timed overlay
|
||||
if(exists($hash->{helper}->{LockedZones}{$zoneID})){
|
||||
readingsBulkUpdate($hash, "Zone" . $zoneID . "Lock", "timer");
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
} else{
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
readingsDelete($hash, "Zone" . $zoneID . "Lock");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub TadoAPI_LogInfoCallback($){
|
||||
@ -1003,9 +1018,9 @@ sub TadoAPI_GetZoneInfo(@) {
|
||||
# zones
|
||||
my @devArr = TadoAPI_GetTadoDevices($hash);
|
||||
for (my $i=0; $i < @devArr; $i++) {
|
||||
my $zoneid = $devArr[$i]->{'id'};
|
||||
my $URL=$QueryURL . qq{/$homeID/zones/$zoneid/state};
|
||||
my $infotext = "ZoneID $zoneid (" . TadoAPI_GetZoneNameById($hash, $zoneid) . ") Status";
|
||||
my $zoneID = $devArr[$i]->{'id'};
|
||||
my $URL=$QueryURL . qq{/$homeID/zones/$zoneID/state};
|
||||
my $infotext = "ZoneID $zoneID (" . TadoAPI_GetZoneNameById($hash, $zoneID) . ") Status";
|
||||
my $request = {
|
||||
url => $URL,
|
||||
header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" },
|
||||
@ -1065,10 +1080,11 @@ sub TadoAPI_ReplaceUmlaute(@) {
|
||||
return $string;
|
||||
}
|
||||
|
||||
# helper sub for fhem tablet-ui thermostat widget: set timedZoneOverlay <zoneId> <duration> <setting>
|
||||
# helper sub for fhem tablet-ui thermostat widget: set timedZoneOverlay <zoneID> <duration> <setting>
|
||||
sub TadoAPI_SetTimedZoneOverlay(@){
|
||||
my ($hash, $zoneid, $duration, $setting) = @_;
|
||||
TadoAPI_SetZoneOverlayById($hash, $zoneid, $setting, $duration);
|
||||
my ($hash, $zoneID, $duration, $setting) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
TadoAPI_SetZoneOverlayById($hash, $zoneID, $setting, $duration);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user