no homeID for define required
This commit is contained in:
parent
de68eebfc0
commit
5f35ab1c38
104
98_TadoAPI.pm
104
98_TadoAPI.pm
|
@ -45,9 +45,10 @@ my $debug = 0;
|
|||
my $header = {};
|
||||
my $data = {};
|
||||
my $TokenData = {};
|
||||
|
||||
# helpers
|
||||
my $apiStatus = 1;
|
||||
|
||||
|
||||
my $tokenLock = 0;
|
||||
|
||||
#####################################
|
||||
#Request data for HTTP Request & Response
|
||||
|
@ -110,10 +111,10 @@ sub TadoAPI_Define($$)
|
|||
my $tokenFileName = $tokenFile."_".$name;
|
||||
|
||||
return "Invalid number of arguments: "
|
||||
. "define <name> TadoAPI <username> <homeID> [<mobileID>]"
|
||||
if ( int(@a) < 2 );
|
||||
. "define <name> TadoAPI <username> [<homeID>]"
|
||||
if ( int(@a) < 1 );
|
||||
|
||||
my ( $user, $homeID, $mobileID ) = @a;
|
||||
my ( $user, $homeID ) = @a;
|
||||
Log3 $name, 3, "TadoAPI_Define $name: called ";
|
||||
$hash->{STATE}="defined";
|
||||
|
||||
|
@ -123,15 +124,7 @@ sub TadoAPI_Define($$)
|
|||
$hash->{TADO_USER} = $user;
|
||||
$hash->{TOKEN_FILE} = $tokenFileName;
|
||||
|
||||
if ( defined($homeID) && $homeID ne "" ) {
|
||||
$attr{$name}{homeID} = $homeID;
|
||||
}
|
||||
|
||||
if ( defined($mobileID) && $mobileID ne "" ) {
|
||||
$main::attr{$a[0]}{"mobileID"}= $mobileID;
|
||||
}
|
||||
|
||||
my @args = ($homeID, $mobileID);
|
||||
my @args = ($homeID);
|
||||
|
||||
if ($main::init_done) {
|
||||
# do something?
|
||||
|
@ -139,10 +132,21 @@ sub TadoAPI_Define($$)
|
|||
return TadoAPI_Catch($@) if $@;
|
||||
}
|
||||
|
||||
TadoAPI_LoadToken($hash);
|
||||
|
||||
# start the status update timer
|
||||
RemoveInternalTimer($hash);
|
||||
InternalTimer( gettimeofday() + 10, "TadoAPI_Update", $hash, 0 );
|
||||
|
||||
if ( defined($homeID) && $homeID ne "" ) {
|
||||
$attr{$name}{homeID} = $homeID;
|
||||
} else{
|
||||
my $id = TadoAPI_GetHomeId($hash);
|
||||
if ( defined($id) && $id ne "" ) {
|
||||
$attr{$name}{homeID} = $id;
|
||||
}
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
@ -284,7 +288,7 @@ sub TadoAPI_Get(@) {
|
|||
|
||||
$cmd eq "getXTest" and do {
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)" if $debug;
|
||||
TadoAPI_ZoneRequest($hash);
|
||||
TadoAPI_GetHomeId($hash);
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "$cmd finished\n";
|
||||
last;
|
||||
};
|
||||
|
@ -408,20 +412,24 @@ sub TadoAPI_LoadToken(@){
|
|||
open(TOKENFILE, '<', $tokenFileName) or die("ERROR: $!");
|
||||
$Token = decode_json(<TOKENFILE>)};
|
||||
|
||||
if($@ || $tokenLifeTime < gettimeofday()){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Error while loading: $@" if $debug && $@;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Token expired, requesting new one" if $debug && $tokenLifeTime < gettimeofday();
|
||||
TadoAPI_NewTokenRequest($hash);
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Token expires at " . localtime($tokenLifeTime) if $debug;
|
||||
# if token is about to expire, refresh him
|
||||
if (($tokenLifeTime-15) < gettimeofday()){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Token will expire soon, refreshing" if $debug;
|
||||
TadoAPI_TokenRefresh($hash);
|
||||
if (!$tokenLock){
|
||||
$tokenLock = 1;
|
||||
if($@ || $tokenLifeTime < gettimeofday()){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Error while loading: $@" if $debug && $@;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Token expired, requesting new one" if $debug && $tokenLifeTime < gettimeofday();
|
||||
TadoAPI_NewTokenRequest($hash);
|
||||
}else{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Token expires at " . localtime($tokenLifeTime) if $debug;
|
||||
# if token is about to expire, refresh him
|
||||
if (($tokenLifeTime-15) < gettimeofday()){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Token will expire soon, refreshing" if $debug;
|
||||
TadoAPI_TokenRefresh($hash);
|
||||
}
|
||||
}
|
||||
close(TOKENFILE);
|
||||
$tokenLock = 0;
|
||||
return $Token;
|
||||
}
|
||||
close(TOKENFILE);
|
||||
return $Token;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
@ -452,7 +460,7 @@ sub TadoAPI_NewTokenRequest(@) {
|
|||
hash => $hash,
|
||||
data => $data
|
||||
};
|
||||
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Calling new token...";
|
||||
HttpUtils_NonblockingGet($request);
|
||||
}
|
||||
|
||||
|
@ -485,6 +493,7 @@ sub TadoAPI_TokenRefresh(@) {
|
|||
data => $data
|
||||
};
|
||||
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Calling refresh token...";
|
||||
HttpUtils_NonblockingGet($request);
|
||||
}
|
||||
|
||||
|
@ -531,7 +540,7 @@ sub Tado_StoreTokenCallback($)
|
|||
# token lifetime management
|
||||
$hash->{TOKEN_LIFETIME} = gettimeofday() + $TokenData->{'expires_in'};
|
||||
$hash->{TOKEN_LIFETIME_HR} = localtime($hash->{TOKEN_LIFETIME});
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Retrived new authentication token successfully. Valid until " . localtime($hash->{TOKEN_LIFETIME}); #if $debug;
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "Retrived new authentication token successfully. Valid until " . localtime($hash->{TOKEN_LIFETIME})if $debug;
|
||||
$hash->{STATE}="reachable";
|
||||
}
|
||||
}
|
||||
|
@ -1072,6 +1081,43 @@ sub TadoAPI_ReplaceUmlaute(@) {
|
|||
return $string;
|
||||
}
|
||||
|
||||
sub TadoAPI_GetHomeId(@){
|
||||
# returns first home id only
|
||||
my ($hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $TokenData = TadoAPI_LoadToken($hash);
|
||||
|
||||
if(defined($TokenData))
|
||||
{
|
||||
my $param = {
|
||||
url => $DataURL,
|
||||
header => {"Content-Type"=>"application/json;charset=UTF-8","Authorization" => "$TokenData->{'token_type'} $TokenData->{'access_token'}"},
|
||||
method => 'GET',
|
||||
timeout => 2,
|
||||
hash => $hash,
|
||||
};
|
||||
|
||||
Log3 $name, 3, 'Blocking GET: ' . Dumper($param) if $debug;
|
||||
my ($err, $data) = HttpUtils_BlockingGet($param);
|
||||
|
||||
if($err ne "")
|
||||
{
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "GetHomeId: Error while requesting ".$param->{url}." - $err";
|
||||
}
|
||||
elsif($data ne "")
|
||||
{
|
||||
Log3 $name, 3, "url ".$param->{url}." returned: $data" if $debug;
|
||||
my $decoded_data = eval { decode_json($data) };
|
||||
if ($@){
|
||||
Log3 $name, 3, "TadoAPI $name" . ": " . "GetHomeId: decode_json failed, invalid json. error:$@\n";
|
||||
}else{
|
||||
my $homes = $decoded_data->{'homes'};
|
||||
return @$homes[0]->{'id'};
|
||||
}
|
||||
}
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub TadoAPI_GetZoneCount(@) {
|
||||
my ($hash) = @_;
|
||||
|
|
|
@ -18,7 +18,7 @@ Bin unter philipp@wolfmajer.at erreichbar.
|
|||
|
||||
In FHEM wird das Modul folgendermaßen definiert:
|
||||
|
||||
`define <name> TadoAPI <username> <homeID> [<mobileID>]`
|
||||
`define <name> TadoAPI <username> [<homeID>]`
|
||||
|
||||
Das Passwort muss mit dem `set <name> <password>` Befehl (z.B. set myTado password 12345) gesetzt werden.
|
||||
|
||||
|
|
Loading…
Reference in New Issue