From 1cce897457e4fd5a7ce680ac37062432e1ac37d4 Mon Sep 17 00:00:00 2001 From: jpawlowski Date: Tue, 3 Nov 2015 13:56:40 +0000 Subject: [PATCH] 70_Pushover: revert file added by accident in commit 9761 git-svn-id: https://svn.fhem.de/fhem/trunk@9762 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/70_Pushover.pm | 236 ++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 142 deletions(-) diff --git a/fhem/FHEM/70_Pushover.pm b/fhem/FHEM/70_Pushover.pm index 990dfa6e0..236b1bbc9 100644 --- a/fhem/FHEM/70_Pushover.pm +++ b/fhem/FHEM/70_Pushover.pm @@ -136,11 +136,7 @@ sub Pushover_Define($$) { # start Validation Timer RemoveInternalTimer($hash); - if (ReadingsVal($name,"tokenState","invalid") ne "valid" || ReadingsVal($name,"userState","invalid") ne "valid" || $init_done) { - InternalTimer( gettimeofday() + 5, "Pushover_ValidateUser", $hash, 0 ); - } else { - InternalTimer( gettimeofday() + 21600, "Pushover_ValidateUser", $hash, 0 ); - } + InternalTimer( gettimeofday() + 5, "Pushover_ValidateUser", $hash, 0 ); return undef; } @@ -174,17 +170,13 @@ sub Pushover_Set($@) { . join( " ", sort keys %sets ); } - return "Unable to send message: Device is disabled" - if ( AttrVal( $name, "disable", 0 ) == 1 ); + if ( AttrVal( $name, "disable", 0 ) == 1 ) { + return "Device is disabled"; + } - return "Unable to send message: User key is invalid" - if ( ReadingsVal( $name, "userState", "invalid" ) eq "invalid" ); - - return "Unable to send message: App token is invalid" - if ( ReadingsVal( $name, "tokenState", "invalid" ) eq "invalid" ); - - return Pushover_SetMessage( $hash, @args ) - if ( $cmd eq 'msg' ); + if ( $cmd eq 'msg' ) { + return Pushover_SetMessage( $hash, @args ); + } } #------------------------------------------------------------------------------ @@ -318,7 +310,7 @@ sub Pushover_ReceiveCommand($$$) { my $values = $param->{type}; my $return; - Log3 $name, 5, "Pushover $name: Received HttpUtils callback:\n\nPARAM:\n".Dumper($param)."\n\nERROR:\n".Dumper($err)."\n\nDATA:\n".Dumper($data); + Log3 $name, 5, "Pushover $name: called function Pushover_ReceiveCommand()"; readingsBeginUpdate($hash); @@ -386,81 +378,6 @@ sub Pushover_ReceiveCommand($$$) { # $values{result} = "ok"; - - # extract API stats - my $apiLimit = 7500; - my $apiRemaining = 1; - my $apiReset; - if ( $param->{httpheader} =~ m/X-Limit-App-Limit:[\s\t]*(.*)[\s\t\n]*/ ) { - $apiLimit = $1; - readingsBulkUpdate( $hash, "apiLimit", $1 ) - if ( ReadingsVal($name,"apiLimit","") ne $1 ); - } - if ( $param->{httpheader} =~ m/X-Limit-App-Remaining:[\s\t]*(.*)[\s\t\n]*/ ) { - $apiRemaining = $1; - readingsBulkUpdate( $hash, "apiRemaining", $1 ) - if ( ReadingsVal($name,"apiRemaining","") ne $1 ); - } - if ( $param->{httpheader} =~ m/X-Limit-App-Reset:[\s\t]*(.*)[\s\t\n]*/ ) { - $apiReset = $1; - readingsBulkUpdate( $hash, "apiReset", $1 ) - if ( ReadingsVal($name,"apiReset","") ne $1 ); - } - - # Server error - if ($param->{code} >= 500) { - $state = "error"; - $values{result} = "Server Error " . $param->{code}; - } - - # error handling - elsif ( ($param->{code} == 200 || $param->{code} >= 400) && - ( (ref($return) eq "HASH" && $return->{status} ne "1") || (ref($return) ne "HASH" && $return !~ m/"status":1,/) ) ) { - $values{result} = "Error " . $param->{code} . ": Unspecified error occured"; - if (ref($return) eq "HASH" && defined $return->{errors}) { - $values{result} = - "Error " . $param->{code} . ": " . join( ". ", @{ $return->{errors} } ) . "."; - } - elsif ( ref($return) ne "HASH" && $return =~ m/"errors":\[(.*)\]/ ) { - $values{result} = "Error " . $param->{code} . ": " . $1; - } - - $state = "error"; - - if ( ref($return) eq "HASH" && defined($return->{token}) ) { - $state = "unauthorized"; - readingsBulkUpdate( $hash, "tokenState", $return->{token} ) - if ( ReadingsVal($name,"tokenState","") ne $return->{token} ); - } elsif ( ref($return) ne "HASH" && $return =~ m/"token":"invalid"/ ) { - $state = "unauthorized"; - readingsBulkUpdate( $hash, "tokenState", "invalid" ) - if ( ReadingsVal($name,"tokenState","") ne "invalid" ); - } else { - readingsBulkUpdate( $hash, "tokenState", "valid" ) - if ( ReadingsVal($name,"tokenState","") ne "valid" ); - } - - if ( ref($return) eq "HASH" && defined($return->{user}) ) { - $state = "unauthorized"; - readingsBulkUpdate( $hash, "tokenState", $return->{user} ) - if ( ReadingsVal($name,"tokenState","") ne $return->{user} ); - } elsif ( ref($return) ne "HASH" && $return =~ m/"user":"invalid"/ ) { - $state = "unauthorized"; - readingsBulkUpdate( $hash, "userState", "invalid" ) - if ( ReadingsVal($name,"userState","") ne "invalid" ); - } else { - readingsBulkUpdate( $hash, "userState", "valid" ) - if ( ReadingsVal($name,"userState","") ne "valid" ); - } - - } else { - $state = "limited" if($apiRemaining < 1); - - readingsBulkUpdate( $hash, "tokenState", "valid" ) - if ( ReadingsVal($name,"tokenState","") ne "valid" ); - readingsBulkUpdate( $hash, "userState", "valid" ) - if ( ReadingsVal($name,"userState","") ne "valid" ); - } # messages.json if ( $service eq "messages.json" ) { @@ -474,11 +391,23 @@ sub Pushover_ReceiveCommand($$$) { if ( $values->{action} eq "" ); readingsBulkUpdate( $hash, "lastDevice", $values->{device} ) if ( $values->{device} ne "" ); - readingsBulkUpdate( $hash, "lastDevice", ReadingsVal($name, "devices", "all") ) - if ( $values->{device} eq "" ); + readingsBulkUpdate( $hash, "lastDevice", $hash->{DEVICES} ) + if ( $values->{device} eq "" && defined( $hash->{DEVICES} ) ); + readingsBulkUpdate( $hash, "lastDevice", "all" ) + if ( $values->{device} eq "" && !defined( $hash->{DEVICES} ) ); if ( ref($return) eq "HASH" ) { + if ( $return->{status} ne "1" && defined $return->{errors} ) { + $values{result} = + "Error: " . Dumper( $return->{errors} ); + $state = "error"; + } + elsif ( $return->{status} ne "1" ) { + $values{result} = "Unspecified error"; + $state = "error"; + } + readingsBulkUpdate( $hash, "lastRequest", $return->{request} ) if ( defined $return->{request} ); @@ -498,7 +427,7 @@ sub Pushover_ReceiveCommand($$$) { } else { readingsBulkUpdate( $hash, "cbDev_" . $values->{cbNr}, - ReadingsVal($name, "devices", "all") ); + $hash->{DEVICES} ); } if ( defined $return->{receipt} ) { @@ -517,6 +446,16 @@ sub Pushover_ReceiveCommand($$$) { } } + # simple error handling if no JSON module was loaded + elsif ( $return !~ m/"status":1,/ ) { + $state = "error"; + if ( $return =~ m/"errors":\[(.*)\]/ ) { + $values{result} = "Error: " . $1; + } + else { + $values{result} = "Unspecified error"; + } + } elsif ( $values{expire} ne "" ) { $values{result} = "SoftFail: Callback not supported. Please install Perl::JSON"; @@ -525,17 +464,36 @@ sub Pushover_ReceiveCommand($$$) { # users/validate.json elsif ( $service eq "users/validate.json" ) { - if ( ref($return) eq "HASH" ) { - my $devices = "-"; - my $group = "0"; - $devices = join( ",", @{ $return->{devices} } ) if (defined($return->{devices})); - $group = $return->{group} if (defined($return->{group})); - readingsBulkUpdate( $hash, "devices", $devices ) - if ( ReadingsVal($name,"devices","") ne $devices ); - readingsBulkUpdate( $hash, "group", $group ) - if ( ReadingsVal($name,"group","") ne $group ); + if ( ref($return) eq "HASH" ) { + + if ( $return->{status} ne "1" && defined $return->{errors} ) { + $values{result} = + "Error: " . join( ". ", @{ $return->{errors} } ) . "."; + $state = "unauthorized"; + } + elsif ( $return->{status} ne "1" ) { + $values{result} = "Unspecified error"; + $state = "unauthorized"; + } + else { + $hash->{DEVICES} = join( ",", @{ $return->{devices} } ); + $hash->{GROUP} = $return->{group}; + } + } + + # simple error handling if no JSON module was loaded + elsif ( $return !~ m/"status":1,/ ) { + $state = "unauthorized"; + if ( $return =~ m/"errors":\[(.*)\]/ ) { + $values{result} = "Error: " . $1; + } + else { + $values{result} = "Unspecified error"; + } + } + } readingsBulkUpdate( $hash, "lastResult", $values{result} ); @@ -544,33 +502,25 @@ sub Pushover_ReceiveCommand($$$) { # Set reading for availability # my $available = 0; - $available = 1 if ( $param->{code} ne "429" && ($state eq "connected" || $state eq "error") ); - readingsBulkUpdate( $hash, "available", $available ) - if ( ReadingsVal($name,"available","") ne $available ); + $available = 1 if ( $state eq "connected" ); + if ( !defined( $hash->{READINGS}{available}{VAL} ) + || $hash->{READINGS}{available}{VAL} ne $available ) + { + readingsBulkUpdate( $hash, "available", $available ); + } + + if ($available eq "0") { + RemoveInternalTimer($hash); + InternalTimer( gettimeofday() + 900, "Pushover_ValidateUser", $hash, 0 ) + } # Set reading for state # - readingsBulkUpdate( $hash, "state", $state ) - if ( ReadingsVal($name,"state","") ne $state ); - - # credentials validation loop - # - my $nextTimer = "none"; - - # if we could not connect, try again in 5 minutes - if ($state eq "disconnected") { - $nextTimer = gettimeofday() + 300; - - # re-validate every 6 hours if there was no message sent during that time - } elsif ($available eq "1") { - $nextTimer = gettimeofday() + 21600; - # re-validate after API limit was reset - } elsif ($state eq "limited" || $param->{code} == 429) { - $nextTimer = ReadingsVal($name,"apiReset",gettimeofday() + 21277) + 323; + if ( !defined( $hash->{READINGS}{state}{VAL} ) + || $hash->{READINGS}{state}{VAL} ne $state ) + { + readingsBulkUpdate( $hash, "state", $state ); } - RemoveInternalTimer($hash); - $hash->{VALIDATION_TIMER} = $nextTimer; - InternalTimer( $nextTimer, "Pushover_ValidateUser", $hash, 0 ) if ($nextTimer ne "none"); readingsEndUpdate( $hash, 1 ); @@ -586,18 +536,18 @@ sub Pushover_ValidateUser ($;$) { Log3 $name, 5, "Pushover $name: called function Pushover_ValidateUser()"; RemoveInternalTimer($hash); - - if ( AttrVal( $name, "disable", 0 ) == 1 ) { - $hash->{VALIDATION_TIMER} = "disabled"; - RemoveInternalTimer($hash); + if (ReadingsVal($name, "available", "0") ne "1") { InternalTimer( gettimeofday() + 900, "Pushover_ValidateUser", $hash, 0 ); - return; + } else { + InternalTimer( gettimeofday() + 21600, "Pushover_ValidateUser", $hash, 0 ); } - elsif ( $device ne "" ) { + return + if ( AttrVal( $name, "disable", 0 ) == 1 ); + + if ( $device ne "" ) { Pushover_SendCommand( $hash, "users/validate.json", "device=$device" ); } - else { Pushover_SendCommand( $hash, "users/validate.json" ); } @@ -780,7 +730,7 @@ sub Pushover_SetMessage { $values{cbNr} = int( time() ) + $values{expire}; my $cbReading = "cb_" . $values{cbNr}; - until ( ReadingsVal($name, $cbReading, "") eq "" ) { + until ( !defined( $hash->{READINGS}{$cbReading}{VAL} ) ) { $values{cbNr}++; $cbReading = "cb_" . $values{cbNr}; } @@ -848,11 +798,11 @@ sub Pushover_SetMessage { . $hash->{NAME} . " $key: time=" . $rBase[1] . " ack=" - . ReadingsVal($name, $rAck, "-") + . $hash->{READINGS}{$rAck}{VAL} . " curTime=" . int( time() ); - if ( ReadingsVal($name, $rAck, 0) == 1 + if ( $hash->{READINGS}{$rAck}{VAL} == 1 || $rBase[1] <= int( time() ) ) { delete $hash->{READINGS}{$key}; @@ -972,7 +922,7 @@ sub Pushover_CGI() { if ( !defined( $webArgs->{acknowledged_by} ) || $webArgs->{acknowledged_by} ne $hash->{USER_KEY} ); - if ( ReadingsVal($name, $rAck, 1) == 0 + if ( $hash->{READINGS}{$rAck}{VAL} == 0 && $rBase[1] > int( time() ) ) { readingsBeginUpdate($hash); @@ -994,19 +944,21 @@ sub Pushover_CGI() { my $redirect = ""; # run FHEM command if desired - if ( ReadingsVal($name, $rAct, "pushover://") !~ /^[\w-]+:\/\/.*$/ ) + if ( defined( $hash->{READINGS}{$rAct}{VAL} ) + && $hash->{READINGS}{$rAct}{VAL} !~ /^[\w-]+:\/\/.*$/ ) { $redirect = "pushover://"; - fhem ReadingsVal($name, $rAct, ""); + fhem $hash->{READINGS}{$rAct}{VAL}; readingsBulkUpdate( $hash, $rAct, - "executed: " . ReadingsVal($name, $rAct, "")); + "executed: " . $hash->{READINGS}{$rAct}{VAL} ); } # redirect to presented URL - if ( ReadingsVal($name, $rAct, "none") =~ /^[\w-]+:\/\/.*$/ ) + if ( defined( $hash->{READINGS}{$rAct}{VAL} ) + && $hash->{READINGS}{$rAct}{VAL} =~ /^[\w-]+:\/\/.*$/ ) { - $redirect = ReadingsVal($name, $rAct, ""); + $redirect = $hash->{READINGS}{$rAct}{VAL}; } readingsEndUpdate( $hash, 1 );