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