redefined Helper Methods, se
This commit is contained in:
parent
5c10147c88
commit
812d9c51df
180
98_TadoAPI.pm
180
98_TadoAPI.pm
|
@ -189,12 +189,7 @@ sub TadoAPI_Set(@) {
|
|||
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
|
||||
return "ZoneID as parameter needed" if (!$value);
|
||||
if( $value >= 1 ) {
|
||||
my ($temperature, $humidity) = TadoAPI_GetZoneTemperatureById($hash, $value);
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $value);
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash, "Temperatur_" . $zoneName, $temperature);
|
||||
readingsBulkUpdate($hash, "Luftfeuchtigkeit_" . $zoneName, $humidity);
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
TadoAPI_GetZoneReadingsById($hash, $value);
|
||||
} else {
|
||||
return "Wrong ZoneID";
|
||||
}
|
||||
|
@ -258,7 +253,12 @@ 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";
|
||||
my $zonecount = TadoAPI_GetZoneCount($hash);
|
||||
$message = "You have $zonecount Zones.\n";
|
||||
for (my $i=1; $i <= $zonecount; $i++) {
|
||||
$message =+ $message . "ZoneID:$i: " . TadoAPI_GetZoneNameById($hash, $i) . "\n";
|
||||
}
|
||||
$message =+ $message . "See Logfile for more Info";
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
|
||||
last;
|
||||
};
|
||||
|
@ -563,25 +563,35 @@ sub TadoAPI_SetOverlay(@){
|
|||
my $name = $hash->{NAME};
|
||||
my $homeID = $attr{$name}{homeID};
|
||||
my $URL = $QueryURL . qq{/$homeID/zones/1/overlay};
|
||||
|
||||
# todo make dynamic
|
||||
my $zoneID = 1;
|
||||
|
||||
|
||||
Log3 $name, 3, "TadoAPI $name" . ": SetOverlay (Setting: " . $setting . ") - " . "query-URL: $URL" if $debug;
|
||||
|
||||
if($apiStatus == 1){
|
||||
TadoAPI_Connect($hash);
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneID);
|
||||
|
||||
$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);
|
||||
|
||||
my $req = undef;
|
||||
my $res = undef;
|
||||
my $message = "";
|
||||
|
||||
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;
|
||||
$req = HTTP::Request->new( 'DELETE', $URL );
|
||||
$req->content_type('application/json');
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Deleting Overlay (off)" if $debug;
|
||||
$message = "no overlay";
|
||||
}elsif($setting > 10){
|
||||
$Request = HTTP::Request->new( 'PUT', $URL );
|
||||
$Request->content_type('application/json');
|
||||
$req = HTTP::Request->new( 'PUT', $URL );
|
||||
$req->content_type('application/json');
|
||||
my $message = {
|
||||
setting => {
|
||||
type => "HEATING",
|
||||
|
@ -596,26 +606,28 @@ sub TadoAPI_SetOverlay(@){
|
|||
};
|
||||
my $myjson = encode_json($message);
|
||||
#print Dumper($myjson);
|
||||
$Request->content($myjson);
|
||||
$req->content($myjson);
|
||||
|
||||
$message = "MANUAL";
|
||||
}
|
||||
|
||||
$UserAgent->default_headers($header);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
$res = $UserAgent->request($req);
|
||||
|
||||
if($res->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";
|
||||
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Retriving state:\n" . $res->content if $debug;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Set Overlay setting to: $setting";
|
||||
|
||||
# write readings
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash, "OverlayType", "MANUAL");
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
|
||||
readingsBulkUpdate($hash, "OverlayType_" . $zoneName, $message);
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Error in SetOverlay()";
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Status (setOverlay): " . $Response->status_line if $debug;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Status (setOverlay): " . $res->status_line if $debug;
|
||||
}
|
||||
# finaly update readings
|
||||
TadoAPI_GetZoneReadingsById($hash, $zoneID);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -628,13 +640,8 @@ sub TadoAPI_GetUpdate(@){
|
|||
my $URL=$QueryURL.qq{/$homeID/zones/1/state};
|
||||
my $deviceURL=$QueryURL.qq{/$homeID/mobileDevices/$mobileID/settings};
|
||||
my $setting = 0;
|
||||
my $temperature = 0;
|
||||
my $humidity = 0;
|
||||
my $currentHeatingPower = 0;
|
||||
my $tadoMode = 0;
|
||||
my $success = 0;
|
||||
my $overlay = 0;
|
||||
my $desiredTemp = 0;
|
||||
|
||||
TadoAPI_Connect($hash);
|
||||
|
||||
|
@ -651,18 +658,7 @@ sub TadoAPI_GetUpdate(@){
|
|||
|
||||
if($Response->is_success){
|
||||
my $ResponseData = decode_json($Response->content);
|
||||
|
||||
$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;
|
||||
$success = 1;
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "UpdateFn: [Authentication Error]". $Response->status_line;
|
||||
|
@ -685,19 +681,13 @@ sub TadoAPI_GetUpdate(@){
|
|||
|
||||
if ($success){
|
||||
# readings update
|
||||
readingsBeginUpdate($hash);
|
||||
for (my $i=1; $i <= TadoAPI_GetZoneCount($hash); $i++) {
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $i);
|
||||
# returns temp and humidity
|
||||
my ($temperature, $humidity) = TadoAPI_GetZoneTemperatureById($hash, $i);
|
||||
readingsBulkUpdate($hash, "Temperatur_" . $zoneName, $temperature);
|
||||
readingsBulkUpdate($hash, "Luftfeuchtigkeit_" . $zoneName, $humidity);
|
||||
for (my $i=1; $i <= TadoAPI_GetZoneCount($hash); $i++) {
|
||||
TadoAPI_GetZoneReadingsById($hash, $i);
|
||||
}
|
||||
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash, "Geolocation", $setting);
|
||||
readingsBulkUpdate($hash, "HomeMode", $tadoMode);
|
||||
readingsBulkUpdate($hash, "Heizleistung", $currentHeatingPower);
|
||||
readingsBulkUpdate($hash, "OverlayType", $overlay);
|
||||
readingsBulkUpdate($hash, "DesiredTemp", $desiredTemp);
|
||||
readingsBulkUpdate($hash, "ActiveZones", $zonecount);
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
}
|
||||
|
@ -764,51 +754,51 @@ sub TadoAPI_GetZoneInfo(@) {
|
|||
# HomeInfo
|
||||
$URL = qq{https://my.tado.com/api/v2/me};
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
my $req = GET($URL);
|
||||
my $res = $UserAgent->request($req);
|
||||
|
||||
if($Response->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Home Info:\n" . $Response->content . "\n";
|
||||
if($res->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Home Info:\n" . $res->content . "\n";
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $res->status_line;
|
||||
}
|
||||
# TadoDevicesInfo
|
||||
$URL = $QueryURL.qq{/$homeID/zones};
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
$req = GET($URL);
|
||||
$res = $UserAgent->request($req);
|
||||
|
||||
if($Response->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Tado Devices:\n" . $Response->content . "\n";
|
||||
if($res->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Tado Devices:\n" . $res->content . "\n";
|
||||
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $res->status_line;
|
||||
}
|
||||
# Mobileinfo
|
||||
$URL = $QueryURL . qq{/$homeID/mobileDevices};
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
$req = GET($URL);
|
||||
$res = $UserAgent->request($req);
|
||||
|
||||
if($Response->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Mobile Devices:\n" . $Response->content . "\n";
|
||||
if($res->is_success){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Mobile Devices:\n" . $res->content . "\n";
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $res->status_line;
|
||||
}
|
||||
|
||||
|
||||
for (my $i=1; $i <= TadoAPI_GetZoneCount($hash); $i++) {
|
||||
$URL=$QueryURL.qq{/$homeID/zones/$i/state};
|
||||
$URL=$QueryURL.qq{/$homeID/zones/$i/state};
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
$req = GET($URL);
|
||||
$res = $UserAgent->request($req);
|
||||
|
||||
if($Response->is_success){
|
||||
if($res->is_success){
|
||||
print "\n";
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $i);
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Zone $i ($zoneName) Status:\n" . $Response->content;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Zone $i ($zoneName) Status:\n" . $res->content;
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $res->status_line;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -951,9 +941,6 @@ sub TadoAPI_GetZoneTemperatureById(@){
|
|||
my $temperature = 0;
|
||||
my $humidity = 0;
|
||||
|
||||
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);
|
||||
|
@ -971,7 +958,50 @@ sub TadoAPI_GetZoneTemperatureById(@){
|
|||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
}
|
||||
|
||||
sub TadoAPI_GetZoneReadingsById(@){
|
||||
my ($hash, $zoneID) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $homeID = $attr{$name}{homeID};
|
||||
my $URL=$QueryURL.qq{/$homeID/zones/$zoneID/state};
|
||||
my $temperature = 0;
|
||||
my $humidity = 0;
|
||||
my $desiredTemp = 0;
|
||||
my $currentHeatingPower = 0;
|
||||
my $overlay = 0;
|
||||
|
||||
$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);
|
||||
|
||||
$Request = GET($URL);
|
||||
$Response = $UserAgent->request($Request);
|
||||
|
||||
if($Response->is_success){
|
||||
my $ResponseData = decode_json($Response->content);
|
||||
$temperature = $ResponseData->{'sensorDataPoints'}->{'insideTemperature'}->{'celsius'};
|
||||
$humidity = $ResponseData->{'sensorDataPoints'}->{'humidity'}->{'percentage'};
|
||||
$desiredTemp = $ResponseData->{'setting'}->{'temperature'}->{'celsius'};
|
||||
$currentHeatingPower = $ResponseData->{'activityDataPoints'}->{'heatingPower'}->{'percentage'};
|
||||
$overlay = $ResponseData->{'overlayType'};
|
||||
if (!defined $overlay) {$overlay = "no overlay"};
|
||||
|
||||
my $zoneName = TadoAPI_GetZoneNameById($hash, $zoneID);
|
||||
|
||||
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 );
|
||||
|
||||
return ($temperature, $humidity, $desiredTemp, $currentHeatingPower, $overlay );
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "[Authentication Error]". $Response->status_line;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
Loading…
Reference in New Issue