timer overlay support added
This commit is contained in:
parent
841eebaa69
commit
37291b0358
104
98_TadoAPI.pm
104
98_TadoAPI.pm
@ -27,6 +27,7 @@ use utf8;
|
||||
use HTTP::Request::Common qw (POST GET PUT);
|
||||
use HTTP::Headers;
|
||||
use JSON;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
####DEFAULTS############
|
||||
my $client_id='public-api-preview';
|
||||
@ -186,10 +187,12 @@ sub TadoAPI_Set(@) {
|
||||
|
||||
if( $a[3] eq "off" ) {
|
||||
TadoAPI_SetZoneOverlayById($hash, $value, "off");
|
||||
} elsif (defined($a[4])) {
|
||||
TadoAPI_SetZoneOverlayById($hash, $value, $a[3], $a[4]);
|
||||
} elsif ($a[3] >= 0) {
|
||||
TadoAPI_SetZoneOverlayById($hash, $value, $a[3]);
|
||||
}
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
|
||||
Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished";
|
||||
|
||||
} elsif( $cmd eq 'setAllOverlays' ) {
|
||||
Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)";
|
||||
@ -199,7 +202,7 @@ sub TadoAPI_Set(@) {
|
||||
} elsif ($value >= 0) {
|
||||
TadoAPI_SetAllOverlays($hash, $value);
|
||||
}
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
|
||||
Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished\n";
|
||||
|
||||
} elsif( $cmd eq 'refreshToken' ) {
|
||||
Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)";
|
||||
@ -271,7 +274,6 @@ sub TadoAPI_Get(@) {
|
||||
if($cmd =~ /\Qget\E/) {
|
||||
|
||||
COMMAND_HANDLER: {
|
||||
|
||||
$cmd eq "getGeo" and do {
|
||||
return "Need at least one parameter (mobileID)" if(@a < 3);
|
||||
return "Wrong MobileID" if (length($value) < 6);
|
||||
@ -398,7 +400,7 @@ sub TadoAPI_LoadToken(@){
|
||||
open(TOKENFILE, '<', $tokenFileName) or die("ERROR: $!");
|
||||
$Token = decode_json(<TOKENFILE>)};
|
||||
if($@ || $tokenLifeTime < gettimeofday()){
|
||||
Log3 $name, 5, "TadoAPI $name" . ": " . "Error while loading: $@ ,requesting new one";
|
||||
Log3 $name, 5, "TadoAPI $name" . ": " . "Error while loading: $@ ,requesting new one" if $@;
|
||||
Log3 $name, 5, "TadoAPI $name" . ": " . "Token is expired, requesting new one" if $tokenLifeTime < gettimeofday();
|
||||
$Token = TadoAPI_NewTokenRequest($hash);
|
||||
}else{
|
||||
@ -556,7 +558,7 @@ sub TadoAPI_Update(@){
|
||||
##############################################################
|
||||
|
||||
sub TadoAPI_SetZoneOverlayById(@){
|
||||
my ($hash, $zoneID, $setting) = @_;
|
||||
my ($hash, $zoneID, $setting, $duration) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $homeID = $attr{$name}{homeID};
|
||||
my $URL = $QueryURL . qq{/$homeID/zones/$zoneID/overlay};
|
||||
@ -564,42 +566,93 @@ sub TadoAPI_SetZoneOverlayById(@){
|
||||
|
||||
if(defined($TokenData)){
|
||||
my $method = "";
|
||||
my $myjson ="";
|
||||
my $myjson =undef;
|
||||
|
||||
Log3 $name, 5, "TadoAPI $name" . ": SetOverlay for Zone $zoneID (Setting: " . $setting . ") - " . "query-URL: $URL";
|
||||
|
||||
if ($setting eq "off"){
|
||||
$method = "DELETE";
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Deleting Overlay for Zone $zoneID";
|
||||
}elsif($setting == 0){
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
setting => {
|
||||
my $dt = time();
|
||||
$dt += $duration;
|
||||
|
||||
# remove overlay
|
||||
if($setting eq "off"){
|
||||
$method = "DELETE";
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Deleting Overlay for Zone $zoneID";
|
||||
}
|
||||
# turn heating of
|
||||
elsif($setting == 0){
|
||||
# turn off for timer
|
||||
if(defined($duration) && $duration > 0){
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
type => "MANUAL",
|
||||
setting => {
|
||||
type => "HEATING",
|
||||
power => "OFF",
|
||||
power => "OFF"
|
||||
},
|
||||
termination => {
|
||||
type => "MANUAL"
|
||||
termination => {
|
||||
type => "TIMER",
|
||||
durationInSeconds => $duration,
|
||||
expiry => strftime('%Y-%m-%dT%H:%M:%SZ', gmtime($dt))
|
||||
}
|
||||
};
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Timer Overlay for Zone $zoneID . Power off for: $duration seconds";
|
||||
}
|
||||
# infinite off
|
||||
else{
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
setting => {
|
||||
type => "HEATING",
|
||||
power => "OFF",
|
||||
},
|
||||
termination => {
|
||||
type => "MANUAL"
|
||||
},
|
||||
};
|
||||
$myjson = encode_json($myjson);
|
||||
}elsif($setting > 0){
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
setting => {
|
||||
}
|
||||
}
|
||||
# infinite temperature overlay
|
||||
elsif($setting > 0){
|
||||
# timed overlay
|
||||
if(defined($duration) && $duration > 0){
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
type => "MANUAL",
|
||||
setting => {
|
||||
type => "HEATING",
|
||||
power => "ON",
|
||||
temperature => {
|
||||
celsius => $setting
|
||||
}
|
||||
},
|
||||
termination => {
|
||||
type => "TIMER",
|
||||
durationInSeconds => $duration,
|
||||
expiry => strftime('%Y-%m-%dT%H:%M:%SZ', gmtime($dt)),
|
||||
}
|
||||
};
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Timer Overlay for Zone $zoneID . Duration: $duration Exire";
|
||||
}
|
||||
else{
|
||||
# infinite setting
|
||||
$method = "PUT";
|
||||
$myjson = {
|
||||
setting => {
|
||||
type => "HEATING",
|
||||
power => "ON",
|
||||
temperature => {
|
||||
celsius => $setting
|
||||
},
|
||||
},
|
||||
termination => {
|
||||
termination => {
|
||||
type => "MANUAL"
|
||||
},
|
||||
};
|
||||
$myjson = encode_json($myjson);
|
||||
}
|
||||
}
|
||||
|
||||
$myjson = encode_json($myjson) if (defined($myjson));
|
||||
|
||||
my $request = {
|
||||
url => $URL,
|
||||
header => { "Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}" },
|
||||
@ -1434,7 +1487,7 @@ sub TadoAPI_readPassword($)
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<code>set <name> setZoneOverlay <zoneID> <setting></code><br>
|
||||
<code>set <name> setZoneOverlay <zoneID> <setting> [<duration>]</code><br>
|
||||
Setting: off delete overlay; 0 heating power off; > 1 sets desired temperature to given value (overlay)
|
||||
</li>
|
||||
|
||||
@ -1452,6 +1505,9 @@ sub TadoAPI_readPassword($)
|
||||
<li>homeID<br>
|
||||
Home ID that will be used for <b>API </b> querys.
|
||||
</li>
|
||||
<li>updateIntervall<br>
|
||||
Intervall that is used for <b>API </b> querys in seconds.
|
||||
</li>
|
||||
</ul>
|
||||
<br>
|
||||
</ul>
|
||||
|
Loading…
x
Reference in New Issue
Block a user