redefined Helper Methods, se

This commit is contained in:
Philipp Wo 2019-11-10 19:35:31 +00:00
parent 5c10147c88
commit 812d9c51df
1 changed files with 105 additions and 75 deletions

View File

@ -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;