From 3d93169a094378438c2b6cd1556c3b82af25633b Mon Sep 17 00:00:00 2001 From: Olaf Bock Date: Sun, 12 Nov 2017 11:09:20 +0100 Subject: [PATCH] Nuki response HTTP 503: Handling of response corrected --- 73_NUKIBridge.pm | 25 +++++++++++++++++-------- 74_NUKIDevice.pm | 19 ++++++++++--------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/73_NUKIBridge.pm b/73_NUKIBridge.pm index 8b859df..082462f 100644 --- a/73_NUKIBridge.pm +++ b/73_NUKIBridge.pm @@ -46,8 +46,8 @@ use JSON; use HttpUtils; -my $version = "0.6.1"; -my $bridgeapi = "1.5"; +my $version = "0.6.2"; +my $bridgeapi = "1.6"; # 1.6 ist gleich 1.5 bei den hier verwendeten Funktionen @@ -344,6 +344,15 @@ sub NUKIBridge_Call($$$$$) { $uri .= "&url=" . $lockAction if( defined($lockAction) and $path eq "callback/add" ); $uri .= "&nukiId=" . $nukiId if( defined($nukiId) ); +# Hier ist die zentrale Anlaufstelle für alle Anfragen an die NUKIBridge +# Wenn die Brige noch mit einer Anfrage beschäftigt ist, wird sie mit HTTP 503 not available antworten +# Normale Statusanfragen von können dann übersprungen werden, da die Bridge ja offensichtlich beschäftigt ist +# und damit verbunden. Das sind alle Anfragen mit $path=info +# +# Anfragen mit einer Aktion dürfen nicht übersprungen werden, sondern müssen ausgeführt werden, wenn die +# Bridge wieder verfügbar ist. +# Diese Anfragen sind mit einer $lockAction belegt + HttpUtils_NonblockingGet( { @@ -373,7 +382,7 @@ sub NUKIBridge_Distribution($$$) { Log3 $name, 5, "NUKIBridge ($name) - Response JSON: $json"; Log3 $name, 5, "NUKIBridge ($name) - Response ERROR: $err"; Log3 $name, 5, "NUKIBridge ($name) - Response CODE: $param->{code}" if( defined($param->{code}) and ($param->{code}) ); - + readingsBeginUpdate($hash); if( defined( $err ) ) { @@ -391,13 +400,13 @@ sub NUKIBridge_Distribution($$$) { } } - if( $json eq "" and exists( $param->{code} ) and $param->{code} ne 200 ) { + if( $json !~ m/^[\[{].*[}\]]$/ and exists( $param->{code} ) and $param->{code} ne 200 ) { - if( $param->{code} eq 503 ) { - NUKIDevice_Parse($param->{chash},$param->{code}) if( $hash != $param->{chash} ); - Log3 $name, 4, "NUKIBridge ($name) - smartlock is offline"; + if( $param->{code} eq 503 and $json ne "" ) { + readingsBulkUpdate( $hash, "state", "unavailable"); + Log3 $name, 4, "NUKIBridge ($name) - Bridge is unavailable"; readingsEndUpdate( $hash, 1 ); - return "received http code ".$param->{code}.": smartlock is offline"; + return "received http code ".$param->{code}.": Bridge is unavailable"; } readingsBulkUpdate( $hash, "lastError", "Internal error, " .$param->{code} ); diff --git a/74_NUKIDevice.pm b/74_NUKIDevice.pm index 6f6cb3f..e7ab59d 100644 --- a/74_NUKIDevice.pm +++ b/74_NUKIDevice.pm @@ -33,7 +33,7 @@ use warnings; use JSON; -my $version = "0.6.1"; +my $version = "0.6.2"; @@ -386,10 +386,7 @@ sub NUKIDevice_Parse($$) { } elsif( $result =~ m'HTTP/1.1 200 OK' ) { Log3 $name, 4, "NUKIDevice ($name) - empty answer received"; return undef; - } elsif( $result !~ m/^[\[{].*[}\]]$/ ) { - Log3 $name, 3, "NUKIDevice ($name) - invalid json detected: $result"; - return "NUKIDevice ($name) - invalid json detected: $result"; - } + } if( $result =~ /\d{3}/ ) { if( $result eq 400 ) { @@ -405,12 +402,16 @@ sub NUKIDevice_Parse($$) { } if( $result eq 503 ) { - readingsSingleUpdate( $hash, "state", "smartlock is offline", 1 ); - Log3 $name, 3, "NUKIDevice ($name) - smartlock is offline"; + readingsSingleUpdate( $hash, "state", "smartlock is unavailable", 1 ); + Log3 $name, 3, "NUKIDevice ($name) - smartlock is unavailable"; return; } } + if( $result !~ m/^[\[{].*[}\]]$/ ) { + Log3 $name, 3, "NUKIDevice ($name) - invalid json detected by NUKIDevice_Parse: $result"; + return "NUKIDevice ($name) - invalid json detected by NUKIDevice_Parse: $result"; + } ######################################### #### verarbeiten des JSON Strings ####### @@ -523,8 +524,8 @@ sub NUKIDevice_CGI() { Log3 $name, 4, "NUKIDevice ($name) - empty answer received"; return undef; } elsif( $json !~ m/^[\[{].*[}\]]$/ ) { - Log3 $name, 3, "NUKIDevice ($name) - invalid json detected: $json"; - return "NUKIDevice ($name) - invalid json detected: $json"; + Log3 $name, 3, "NUKIDevice ($name) - invalid json detected by NUKIDevice_CGI: $json"; + return "NUKIDevice ($name) - invalid json detected by NUKIDevice_CGI: $json"; } my $decode_json = decode_json($json);