add NUKIDevice Readings rssi paired
This commit is contained in:
parent
f2c61e6c72
commit
8cb3f21115
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Developed with Kate
|
||||
#
|
||||
# (c) 2016 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
||||
# (c) 2016-2017 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
||||
# All rights reserved
|
||||
#
|
||||
# This script is free software; you can redistribute it and/or modify
|
||||
@ -46,7 +46,7 @@ use JSON;
|
||||
|
||||
use HttpUtils;
|
||||
|
||||
my $version = "0.4.5";
|
||||
my $version = "0.4.7";
|
||||
|
||||
|
||||
|
||||
@ -59,6 +59,29 @@ my %lockActions = (
|
||||
);
|
||||
|
||||
|
||||
# Declare functions
|
||||
sub NUKIBridge_Initialize ($);
|
||||
sub NUKIBridge_Define ($$);
|
||||
sub NUKIBridge_Undef ($$);
|
||||
sub NUKIBridge_Read($@);
|
||||
sub NUKIBridge_Attr(@);
|
||||
sub NUKIBridge_Set($@);
|
||||
sub NUKIBridge_Get($@);
|
||||
sub NUKIBridge_GetCheckBridgeAlive($);
|
||||
sub NUKIBridge_firstRun($);
|
||||
sub NUKIBridge_Call($$$$$);
|
||||
sub NUKIBridge_Distribution($$$);
|
||||
sub NUKIBridge_ResponseProcessing($$$);
|
||||
sub NUKIBridge_Autocreate($$;$);
|
||||
sub NUKIBridge_InfoProcessing($$);
|
||||
sub NUKIBridge_getLogfile($);
|
||||
sub NUKIBridge_getCallbackList($);
|
||||
sub NUKIBridge_CallBlocking($$$);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub NUKIBridge_Initialize($) {
|
||||
|
||||
my ($hash) = @_;
|
||||
@ -164,7 +187,6 @@ sub NUKIBridge_Attr(@) {
|
||||
|
||||
elsif( $cmd eq "del" ) {
|
||||
readingsSingleUpdate ( $hash, "state", "active", 1 );
|
||||
InternalTimer( gettimeofday()+5, 'NUKIBridge_GetCheckBridgeAlive', $hash, 1 );
|
||||
Log3 $name, 3, "NUKIBridge ($name) - enabled";
|
||||
}
|
||||
}
|
||||
@ -177,7 +199,6 @@ sub NUKIBridge_Attr(@) {
|
||||
|
||||
elsif( $cmd eq "del" ) {
|
||||
readingsSingleUpdate ( $hash, "state", "active", 1 );
|
||||
InternalTimer( gettimeofday()+5, 'NUKIBridge_GetCheckBridgeAlive', $hash, 1 );
|
||||
Log3 $name, 3, "NUKIBridge ($name) - delete disabledForIntervals";
|
||||
}
|
||||
}
|
||||
@ -278,9 +299,12 @@ sub NUKIBridge_GetCheckBridgeAlive($) {
|
||||
|
||||
NUKIBridge_Call($hash,$hash,'info',undef,undef);
|
||||
|
||||
InternalTimer( gettimeofday()+15+int(rand(15)), 'NUKIBridge_GetCheckBridgeAlive', $hash, 1 );
|
||||
Log3 $name, 4, "NUKIBridge ($name) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive";
|
||||
Log3 $name, 4, "NUKIBridge ($name) - run NUKIBridge_Call";
|
||||
}
|
||||
|
||||
InternalTimer( gettimeofday()+15+int(rand(15)), 'NUKIBridge_GetCheckBridgeAlive', $hash, 1 );
|
||||
|
||||
Log3 $name, 4, "NUKIBridge ($name) - Call InternalTimer for NUKIBridge_GetCheckBridgeAlive";
|
||||
}
|
||||
|
||||
sub NUKIBridge_firstRun($) {
|
||||
@ -362,6 +386,13 @@ sub NUKIBridge_Distribution($$$) {
|
||||
|
||||
if( $json eq "" 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";
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
return "received http code ".$param->{code}.": smartlock is offline";
|
||||
}
|
||||
|
||||
readingsBulkUpdate( $hash, "lastError", "Internal error, " .$param->{code} );
|
||||
Log3 $name, 4, "NUKIBridge ($name) - received http code " .$param->{code}." without any data after requesting";
|
||||
|
||||
@ -380,6 +411,7 @@ sub NUKIBridge_Distribution($$$) {
|
||||
NUKIDevice_Parse($param->{chash},$param->{code}) if( $param->{code} eq 400 and $hash != $param->{chash} );
|
||||
|
||||
|
||||
|
||||
Log3 $name, 4, "NUKIBridge ($name) - invalid API token" if( $param->{code} eq 401 );
|
||||
Log3 $name, 4, "NUKIBridge ($name) - nukiId is not known" if( $param->{code} eq 404 );
|
||||
Log3 $name, 4, "NUKIBridge ($name) - action is undefined" if( $param->{code} eq 400 and $hash == $param->{chash} );
|
||||
@ -404,7 +436,10 @@ sub NUKIBridge_Distribution($$$) {
|
||||
|
||||
if( $hash == $param->{chash} ) {
|
||||
|
||||
#$json = '[{"nukiId": 1,"name": "Home","lastKnownState": {"state": 1,"stateName": "locked","batteryCritical": false,"timestamp": "2016-10-03T06:49:00+00:00"}},{"nukiId": 2,"name": "Grandma","lastKnownState": {"state": 3,"stateName": "unlocked","batteryCritical": false,"timestamp": "2016-10-03T06:49:00+00:00"}}]' if( $param->{endpoint} eq "list" ); # zum testen da ich kein Nuki Smartlock habe
|
||||
# zum testen da ich kein Nuki Smartlock habe
|
||||
#$json = '[{"nukiId": 1,"name": "Home","lastKnownState": {"state": 1,"stateName": "locked","batteryCritical": false,"timestamp": "2016-10-03T06:49:00+00:00"}},{"nukiId": 2,"name": "Grandma","lastKnownState": {"state": 3,"stateName": "unlocked","batteryCritical": false,"timestamp": "2016-10-03T06:49:00+00:00"}}]' if( $param->{endpoint} eq "list" );
|
||||
|
||||
#$json= '{"bridgeType":2,"ids":{"serverId":142667440},"versions":{"appVersion":"0.2.14"},"uptime":1527,"currentTime":"2017-01-17T04:55:58Z","serverConnected":true,"scanResults":[{"nukiId": 1,"name": "Home","rssi": -87,"paired": true},{"nukiId": 2,"name": "Grandma","rssi": -93,"paired": false}]}';
|
||||
|
||||
NUKIBridge_ResponseProcessing($hash,$json,$param->{endpoint});
|
||||
|
||||
@ -531,6 +566,12 @@ sub NUKIBridge_InfoProcessing($$) {
|
||||
my ($hash,$decode_json) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
my $nukiId;
|
||||
my $scanResults;
|
||||
my %response_hash;
|
||||
my $dname;
|
||||
my $dhash;
|
||||
|
||||
my %bridgeType = (
|
||||
'1' => 'Hardware',
|
||||
'2' => 'Software'
|
||||
@ -548,6 +589,27 @@ sub NUKIBridge_InfoProcessing($$) {
|
||||
readingsBulkUpdate($hash,"currentTime",$decode_json->{currentTime});
|
||||
readingsBulkUpdate($hash,"serverConnected",$decode_json->{serverConnected});
|
||||
readingsEndUpdate($hash,1);
|
||||
|
||||
|
||||
foreach $scanResults (@{$decode_json->{scanResults}}) {
|
||||
if( ref($scanResults) eq "HASH" ) {
|
||||
if ( defined( $modules{NUKIDevice}{defptr} ) ) {
|
||||
while ( my ( $key, $value ) = each %{ $modules{NUKIDevice}{defptr} } ) {
|
||||
|
||||
$dhash = $modules{NUKIDevice}{defptr}{$key};
|
||||
$dname = $dhash->{NAME};
|
||||
$nukiId = InternalVal( $dname, "NUKIID", undef );
|
||||
next if ( !$nukiId or $nukiId ne $scanResults->{nukiId} );
|
||||
|
||||
Log3 $name, 4, "NUKIDevice ($dname) - Received scanResults for matching NukiID $nukiId at device $dname";
|
||||
|
||||
%response_hash = ('name'=>$scanResults->{name}, 'rssi'=>$scanResults->{rssi},'paired'=>$scanResults->{paired});
|
||||
|
||||
NUKIDevice_Parse($dhash,encode_json \%response_hash);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub NUKIBridge_getLogfile($) {
|
||||
@ -688,6 +750,9 @@ sub NUKIBridge_CallBlocking($$$) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
#
|
||||
# Developed with Kate
|
||||
#
|
||||
# (c) 2016 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
||||
# (c) 2016-2017 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
||||
# All rights reserved
|
||||
#
|
||||
# This script is free software; you can redistribute it and/or modify
|
||||
@ -33,7 +33,25 @@ use warnings;
|
||||
use JSON;
|
||||
|
||||
|
||||
my $version = "0.4.5";
|
||||
my $version = "0.4.7";
|
||||
|
||||
|
||||
|
||||
|
||||
# Declare functions
|
||||
sub NUKIDevice_Initialize($);
|
||||
sub NUKIDevice_Define($$);
|
||||
sub NUKIDevice_Undef($$);
|
||||
sub NUKIDevice_Attr(@);
|
||||
sub NUKIDevice_addExtension($$$);
|
||||
sub NUKIDevice_removeExtension($);
|
||||
sub NUKIDevice_Set($$@);
|
||||
sub NUKIDevice_GetUpdate($);
|
||||
sub NUKIDevice_ReadFromNUKIBridge($@);
|
||||
sub NUKIDevice_Parse($$);
|
||||
sub NUKIDevice_WriteReadings($$);
|
||||
sub NUKIDevice_CGI();
|
||||
|
||||
|
||||
|
||||
|
||||
@ -96,10 +114,10 @@ sub NUKIDevice_Define($$) {
|
||||
|
||||
if(defined($hash->{IODev}->{NAME})) {
|
||||
|
||||
Log3 $name, 3, "$name: I/O device is " . $hash->{IODev}->{NAME};
|
||||
Log3 $name, 3, "NUKIDevice ($name) - I/O device is " . $hash->{IODev}->{NAME};
|
||||
} else {
|
||||
|
||||
Log3 $name, 1, "$name: no I/O device";
|
||||
Log3 $name, 1, "NUKIDevice ($name) - no I/O device";
|
||||
}
|
||||
|
||||
$iodev = $hash->{IODev}->{NAME};
|
||||
@ -338,7 +356,7 @@ sub NUKIDevice_ReadFromNUKIBridge($@) {
|
||||
!$iohash->{TYPE} ||
|
||||
!$modules{$iohash->{TYPE}} ||
|
||||
!$modules{$iohash->{TYPE}}{ReadFn}) {
|
||||
Log3 $name, 3, "No I/O device or ReadFn found for $name";
|
||||
Log3 $name, 3, "NUKIDevice ($name) - No I/O device or ReadFn found for $name";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -381,6 +399,12 @@ sub NUKIDevice_Parse($$) {
|
||||
Log3 $name, 3, "NUKIDevice ($name) - nukiId is not known";
|
||||
return;
|
||||
}
|
||||
|
||||
if( $result eq 503 ) {
|
||||
readingsSingleUpdate( $hash, "state", "smartlock is offline", 1 );
|
||||
Log3 $name, 3, "NUKIDevice ($name) - smartlock is offline";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -456,6 +480,10 @@ sub NUKIDevice_WriteReadings($$) {
|
||||
readingsBulkUpdate( $hash, "battery", $battery );
|
||||
readingsBulkUpdate( $hash, "success", $decode_json->{success} );
|
||||
|
||||
readingsBulkUpdate( $hash, "name", $decode_json->{name} );
|
||||
readingsBulkUpdate( $hash, "rssi", $decode_json->{rssi} );
|
||||
readingsBulkUpdate( $hash, "paired", $decode_json->{paired} );
|
||||
|
||||
Log3 $name, 5, "NUKIDevice ($name) - readings set for $name";
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user