diff --git a/98_TadoAPI.pm b/98_TadoAPI.pm index 841c5d9..b1a780f 100644 --- a/98_TadoAPI.pm +++ b/98_TadoAPI.pm @@ -1,5 +1,5 @@ #=============================================================================== -# $Id: 98_TadoAPI.pm 102 2019-12-27 15:58:26Z psycho160 $ +# $Id: 98_TadoAPI.pm 105 2019-12-27 15:58:26Z psycho160 $ # # FILE: 98_TadoAPI.pm # @@ -79,14 +79,18 @@ sub TadoAPI_Initialize { . "showPosData:0,1 " . "updateIntervall " . $readingFnAttributes; + + return; } sub TadoAPI_Init { my $hash = shift; - my @args = @_; + my $def = shift; + + my @args = split( "[ \t][ \t]*", $def ); my $u = - "wrong syntax: define TadoAPI []"; + "wrong syntax: define TadoAPI "; return $u if ( int(@args) < 2 ); return; } @@ -101,7 +105,7 @@ sub TadoAPI_Define { my $tokenFileName = $tokenFile . "_" . $name; return "Invalid number of arguments: " - . "define TadoAPI []" + . "define TadoAPI " if ( int(@a) < 1 ); my ( $user, $homeID ) = @a; @@ -149,13 +153,13 @@ sub TadoAPI_Define { } sub TadoAPI_Set { - my $hash = shift; - my @a = @_; - return "Need at least one parameters" if ( @a < 2 ); - my $cmd = $a[1]; - my $value = $a[2]; - my $name = $hash->{NAME}; - my $subcmd; + my $hash = shift; + my $name = shift; + my $cmd = shift // return qq{set $name needs at least one argument}; + my $value = shift; + my $value2 = shift; + my $value3 = shift; + my $message = undef; if ( !defined( $sets{$cmd} ) ) { @@ -164,7 +168,7 @@ sub TadoAPI_Set { push @cmds, $sets{$key} ? $key . ":" . join( ",", $sets{$key} ) : $key; } - return "Unknown argument $a[1], choose one of " . join( " ", @cmds ); + return "Unknown argument $cmd, choose one of " . join( " ", @cmds ); } if ( ( $cmd ne "password" ) ) { @@ -179,8 +183,8 @@ sub TadoAPI_Set { } if ( $cmd eq 'setGeo' ) { - return "Need at least two parameters (mobileID, Setting)" if ( @a < 4 ); - if ( $a[3] eq "on" ) { + return "Need at least two parameters (mobileID, Setting)" if ( !defined($value) ); + if ( $value2 eq "on" ) { Log3 $name, 3, "TadoAPI: set $name: processing ($cmd)"; TadoAPI_SetGeoById( $hash, $value, 1 ); } @@ -195,16 +199,16 @@ sub TadoAPI_Set { Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)"; return "Need at least two parameters [ZoneID] [Setting] (duration in sec); Setting Info: remove=delete overlay; 0=heating power off; 1<=desired temperature (overlay)" - if ( @a < 4 ); + if ( !defined($value2) ); - if ( $a[3] eq "remove" ) { + if ( $value2 eq "remove" ) { TadoAPI_SetZoneOverlayById( $hash, $value, "remove" ); } - elsif ( defined( $a[4] ) ) { - TadoAPI_SetZoneOverlayById( $hash, $value, $a[3], $a[4] ); + elsif ( defined( $value3 ) ) { + TadoAPI_SetZoneOverlayById( $hash, $value, $value2, $value3 ); } - elsif ( $a[3] >= 0 ) { - TadoAPI_SetZoneOverlayById( $hash, $value, $a[3] ); + elsif ( $value2 >= 0 ) { + TadoAPI_SetZoneOverlayById( $hash, $value, $value2 ); } Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished"; @@ -213,19 +217,17 @@ sub TadoAPI_Set { Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)"; return "Need at least three parameters [ZoneID] [Duration (sec)] [Setting]" - if ( @a < 4 ); + if (!defined($value3) ); - if ( defined( $a[4] ) ) { - TadoAPI_SetTimedZoneOverlay( $hash, $value, $a[3], $a[4] ); + if ( defined( $value3 ) ) { + TadoAPI_SetTimedZoneOverlay( $hash, $value, $value2, $value3 ); } Log3 $name, 4, "TadoAPI $name" . ": " . "$cmd finished"; } elsif ( $cmd eq 'setAllOverlays' ) { Log3 $name, 5, "TadoAPI $name" . ": " . "processing ($cmd)"; - return -"Need at least one parameter (Setting) - Setting: remove=delete overlay; 0=heating power off; 1<=desired temperature (overlay)" - if ( @a < 3 ); + return "Need at least one parameter (Setting) - Setting: remove=delete overlay; 0=heating power off; 1<=desired temperature (overlay)" if ( !defined($value) ); if ( $value eq "remove" ) { TadoAPI_SetAllOverlays( $hash, "remove" ); } @@ -289,13 +291,13 @@ sub TadoAPI_Set { elsif ( $cmd eq 'password' ) { Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)"; - # name und cmd überspringen - shift @a; - shift @a; - # den Rest der das passwort enthält, als ein String - $subcmd = join( " ", @a ); - $message = TadoAPI_storePassword( $name, $subcmd ); + if (defined($value)){ + $message = TadoAPI_storePassword( $name, $value ); + } + else{ + $message = "no password given"; + } # start the status update timer RemoveInternalTimer($hash); @@ -308,13 +310,11 @@ sub TadoAPI_Set { } sub TadoAPI_Get { - my $hash = shift; - my @a = @_; + my $hash = shift; + my $name = shift; + my $cmd = shift // return qq{get $name needs at least one argument}; + my $value = shift; - return "Need at least one parameters" if ( @a < 2 ); - my $cmd = $a[1]; - my $value = $a[2]; - my $name = $hash->{NAME}; my $homeID = $attr{$name}{homeID}; my $message = undef; @@ -324,7 +324,7 @@ sub TadoAPI_Get { push @cmds, $gets{$key} ? $key . ":" . join( ",", $gets{$key} ) : $key; } - return "Unknown argument $a[1], choose one of " . join( " ", @cmds ); + return "Unknown argument $cmd, choose one of " . join( " ", @cmds ); } my $pwd = TadoAPI_readPassword($name); @@ -340,7 +340,7 @@ sub TadoAPI_Get { COMMAND_HANDLER: { $cmd eq "getGeo" and do { - return "Need at least one parameter (mobileID)" if ( @a < 3 ); + return "Need at least one parameter (mobileID)" if ( !defined($value) ); return "Wrong MobileID" if ( length($value) < 6 ); Log3 $name, 3, "TadoAPI $name" . ": " . "processing ($cmd)"; TadoAPI_GetGeoById( $hash, $value ); @@ -466,8 +466,10 @@ sub TadoAPI_LoadToken { my $Token = undef; if ($apiStatus) { - open( my $TOKENFILE, q{<}, $tokenFileName ) or croak("ERROR: $!"); - eval { $Token = decode_json(<$TOKENFILE>) }; + my $TOKENFILE; + eval{ + open( $TOKENFILE, q{<}, $tokenFileName ) or die("ERROR: $!"); + $Token = decode_json(<$TOKENFILE>) }; close($TOKENFILE); if ( $@ || $tokenLifeTime < gettimeofday() ) { @@ -546,13 +548,14 @@ sub TadoAPI_NewTokenRequest { } else { #write token data in file - open( my $TOKENFILE, q{>}, $tokenFileName ) or croak("ERROR: $!"); + open( my $TOKENFILE, q{>}, $tokenFileName ) or die("ERROR: $!"); print $TOKENFILE $returnData . "\n"; close($TOKENFILE); # token lifetime management - $hash->{TOKEN_LIFETIME} = - gettimeofday() + $decoded_data->{'expires_in'}; + if (defined($decoded_data)){ + $hash->{TOKEN_LIFETIME} = gettimeofday() + $decoded_data->{'expires_in'}; + } $hash->{TOKEN_LIFETIME_HR} = localtime( $hash->{TOKEN_LIFETIME} ); Log3 $name, 5, "TadoAPI $name" . ": " @@ -572,8 +575,10 @@ sub TadoAPI_TokenRefresh { my $Token = undef; # load token - open( my $TOKENFILE, q{<}, $tokenFileName ) or croak("ERROR: $!"); - eval { $Token = decode_json(<$TOKENFILE>) }; + my $TOKENFILE; + eval { + open( $TOKENFILE, q{<}, $tokenFileName ) or die("ERROR: $!"); + $Token = decode_json(<$TOKENFILE>) }; close($TOKENFILE); my $data = { @@ -618,7 +623,7 @@ sub TadoAPI_TokenRefresh { } else { #write token data in file - open( my $TOKENFILE, q{>}, $tokenFileName ) or croak("ERROR: $!"); + open( my $TOKENFILE, q{>}, $tokenFileName ) or die("ERROR: $!"); print $TOKENFILE $returnData . "\n"; close($TOKENFILE); @@ -1778,7 +1783,7 @@ sub TadoAPI_storePassword { sub TadoAPI_readPassword { my $name = shift; - + my $index = "TadoAPI_" . $name . "_passwd"; my $key = getUniqueId() . $index;