added Setter for Overlay Desired Temp; getZoneInfo shows more information

This commit is contained in:
Philipp Wo 2019-11-07 11:02:52 +00:00
parent 9fed48fb7f
commit 572f1fc305
1 changed files with 127 additions and 13 deletions

View File

@ -60,7 +60,8 @@ my %sets = (
"getTemperature" => "noArg",
"refreshToken" => "noArg",
"password" => "",
"setGeo" => "on,off"
"setGeo" => "on,off",
"setOverlay" => "20,21,22,off"
);
my %gets = (
@ -165,9 +166,18 @@ sub TadoAPI_Set(@) {
TadoAPI_SetGeo($hash, 0);
}
TadoAPI_GetGeo($hash);
return undef;
} elsif( $cmd eq 'setOverlay' ) {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
if( $value > 10 ) {
TadoAPI_SetOverlay($hash, $value);
} else {
TadoAPI_SetOverlay($hash, "off");
}
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
return undef;
} elsif( $cmd eq 'refreshToken' ) {
Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)";
RemoveInternalTimer($hash);
@ -179,7 +189,6 @@ sub TadoAPI_Set(@) {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
TadoAPI_GetTemperature($hash);
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
return undef;
@ -206,6 +215,8 @@ sub TadoAPI_Get(@) {
my $name = $hash->{NAME};
my $homeID = $attr{$name}{homeID};
my $mobileID = $attr{$name}{mobileID};
my $message = undef;
#debug
$debug = $attr{$name}{debug};
if(!defined($gets{$cmd})) {
@ -237,11 +248,13 @@ sub TadoAPI_Get(@) {
$cmd eq "getZoneInfo" and do {
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
TadoAPI_GetZoneInfo($hash);
$message = "See Logfile for Info";
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
last;
};
}
};
return $message if $message;
return TadoAPI_Catch($@) if $@;
return undef;
}
@ -534,6 +547,69 @@ sub TadoAPI_Update(@){
######################## tado methods ########################
##############################################################
sub TadoAPI_SetOverlay(@){
my ($hash, $setting) = @_;
my $name = $hash->{NAME};
my $homeID = $attr{$name}{homeID};
my $URL = $QueryURL . qq{/$homeID/zones/1/overlay};
Log3 $name, 3, "TadoAPI $name" . ": SetOverlay (Setting: " . $setting . ") - " . "query-URL: $URL" if $debug;
if($apiStatus == 1){
TadoAPI_Connect($hash);
$header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
$UserAgent = LWP::UserAgent::Paranoid->new(ssl_opts => { verify_hostname => 1 },protocols_allowed => ['https','http'],request_timeout => 5,);
$UserAgent->default_headers($header);
if ($setting eq "off"){
# Delete overlay
$Request = HTTP::Request->new( 'DELETE', $URL );
$Request->content_type('application/json');
Log3 $name, 3, "TadoAPI $name" . ": " . "Deleting Overlay (off)" if $debug;
}elsif($setting > 10){
$Request = HTTP::Request->new( 'PUT', $URL );
$Request->content_type('application/json');
my $message = {
setting => {
type => "HEATING",
power => "ON",
temperature => {
celsius => $setting
},
},
termination => {
type => "MANUAL"
},
};
my $myjson = encode_json($message);
#print Dumper($myjson);
$Request->content($myjson);
}
$UserAgent->default_headers($header);
$Response = $UserAgent->request($Request);
if($Response->is_success){
print "\n Retriving State:\n" if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "Retriving state:\n" . $Response->content if $debug;
Log3 $name, 3, "TadoAPI $name" . ": " . "Set Overlay setting for to: $setting";
# write readings
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "OverlayType", "MANUAL");
readingsEndUpdate( $hash, 1 );
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "Error in SetOverlay()";
Log3 $name, 3, "TadoAPI $name" . ": " . "Status (setOverlay): " . $Response->status_line if $debug;
}
}
}
sub TadoAPI_GetUpdate(@){
my ($hash) = @_;
my $name = $hash->{NAME};
@ -547,6 +623,8 @@ sub TadoAPI_GetUpdate(@){
my $currentHeatingPower = 0;
my $tadoMode = 0;
my $success = 0;
my $overlay = 0;
my $desiredTemp = 0;
TadoAPI_Connect($hash);
@ -564,6 +642,11 @@ sub TadoAPI_GetUpdate(@){
$temperature = $ResponseData->{'sensorDataPoints'}->{'insideTemperature'}->{'celsius'};
$tadoMode = $ResponseData->{'tadoMode'};
$humidity = $ResponseData->{'sensorDataPoints'}->{'humidity'}->{'percentage'};
$overlay = $ResponseData->{'overlayType'};
if (!defined $overlay) {$overlay = "no overlay"};
$desiredTemp = $ResponseData->{'setting'}->{'temperature'}->{'celsius'};
$currentHeatingPower = $ResponseData->{'activityDataPoints'}->{'heatingPower'}->{'percentage'};
Log3 $name, 3, "TadoAPI $name" . ": " . "UpdateFn: Actual temperature is: $temperature Celsius and home mode $tadoMode" if $debug;
@ -595,9 +678,10 @@ sub TadoAPI_GetUpdate(@){
readingsBulkUpdate($hash, "HomeMode", $tadoMode);
readingsBulkUpdate($hash, "Luftfeuchtigkeit", $humidity);
readingsBulkUpdate($hash, "Heizleistung", $currentHeatingPower);
readingsBulkUpdate($hash, "OverlayType", $overlay);
readingsBulkUpdate($hash, "DesiredTemp", $desiredTemp);
readingsEndUpdate( $hash, 1 );
}
$success = 0;
}
return undef;
@ -700,24 +784,55 @@ sub TadoAPI_GetZoneInfo(@) {
$header = HTTP::Headers->new("Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}");
$UserAgent = LWP::UserAgent::Paranoid->new(ssl_opts => { verify_hostname => 1 },protocols_allowed => ['https','http'],request_timeout => 5,);
$UserAgent->default_headers($header);
# HomeInfo
$URL = qq{https://my.tado.com/api/v2/me};
$Request = GET($URL);
$Response = $UserAgent->request($Request);
if($Response->is_success){
Log3 $name, 3, "TadoAPI $name" . ": " . "Home Info:\n" . $Response->content . "\n";
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
}
# TadoDevicesInfo
$URL = $QueryURL.qq{/$homeID/zones};
$Request = GET($URL);
$Response = $UserAgent->request($Request);
if($Response->is_success){
Log3 $name, 3, "TadoAPI $name" . ": " . "Tado Devices:\n" . $Response->content . "\n";
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
}
# Mobileinfo
$URL = $QueryURL . qq{/$homeID/mobileDevices};
$Request = GET($URL);
$Response = $UserAgent->request($Request);
if($Response->is_success){
Log3 $name, 3, "TadoAPI $name" . ": " . "Mobile Devices:\n" . $Response->content . "\n";
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
}
# ZoneInfo
$URL=$QueryURL.qq{/$homeID/zones/1/state};
$Request = GET($URL);
$Response = $UserAgent->request($Request);
if($Response->is_success){
my $ResponseData = decode_json($Response->content);
Log3 $name, 3, "TadoAPI $name" . ": " . "Retriving zone 1 state:\n" . $Response->content if $debug;
my $text = $Response->content;
print "Retriving zone 1 state:\n" . $text;
Log3 $name, 3, "TadoAPI $name" . ": " . "Zone 1 State:\n" . $Response->content;
}else{
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
}
}
return undef;
}
sub TadoAPI_GetHomeMode(@) {
@ -727,7 +842,6 @@ sub TadoAPI_GetHomeMode(@) {
my $URL=$QueryURL.qq{/$homeID/zones/1/state};
my $tadoMode = 0;
if($apiStatus == 1){
TadoAPI_Connect($hash);