Version 2.0 Pre-Release #20

Merged
marko merged 29 commits from devel into main 2021-12-05 11:25:38 +00:00
3 changed files with 49 additions and 41 deletions
Showing only changes of commit 99fcb221d8 - Show all commits

View File

@ -1,4 +1,4 @@
UPD 2021-11-27_22:52:03 9217 FHEM/73_NUKIBridge.pm UPD 2021-11-28_00:29:42 9217 FHEM/73_NUKIBridge.pm
UPD 2021-11-27_21:36:27 7569 FHEM/74_NUKIDevice.pm UPD 2021-11-28_00:29:54 7569 FHEM/74_NUKIDevice.pm
UPD 2021-11-27_23:33:54 40749 lib/FHEM/Devices/Nuki/Bridge.pm UPD 2021-11-28_00:30:36 41129 lib/FHEM/Devices/Nuki/Bridge.pm
UPD 2021-11-27_22:56:00 15826 lib/FHEM/Devices/Nuki/Device.pm UPD 2021-11-28_00:30:50 15802 lib/FHEM/Devices/Nuki/Device.pm

View File

@ -146,10 +146,6 @@ sub Define {
my ( $name, undef, $host, $token ) = split( m{\s+}xms, $def ); my ( $name, undef, $host, $token ) = split( m{\s+}xms, $def );
# return ('too few parameters: define <name> NUKIBridge <HOST> <TOKEN>')
# if ( !defined($host)
# || !defined($token) );
my $port = ::AttrVal( $name, 'port', 8080 ); my $port = ::AttrVal( $name, 'port', 8080 );
my $infix = 'NUKIBridge'; my $infix = 'NUKIBridge';
$hash->{HOST} = $host // 'discover'; $hash->{HOST} = $host // 'discover';
@ -413,7 +409,6 @@ sub Set {
my $endpoint; my $endpoint;
my $param; my $param;
if ( lc($cmd) eq 'getdevicelist' ) { if ( lc($cmd) eq 'getdevicelist' ) {
return 'usage: getDeviceList' if ($arg); return 'usage: getDeviceList' if ($arg);
$endpoint = 'list'; $endpoint = 'list';
@ -443,20 +438,21 @@ sub Set {
return 'usage: callbackRemove' if ( split( m{\s+}xms, $arg ) > 1 ); return 'usage: callbackRemove' if ( split( m{\s+}xms, $arg ) > 1 );
my $id = ( defined($arg) ? $arg : 0 ); my $id = ( defined($arg) ? $arg : 0 );
$endpoint = 'callback/remove'; $endpoint = 'callback/remove';
$param = '{"param":"' . $id . '"}'; $param = '{"param":"' . $id . '"}';
} }
elsif ( lc($cmd) eq 'configauth' ) { elsif ( lc($cmd) eq 'configauth' ) {
return 'usage: configAuth' if ( split( m{\s+}xms, $arg ) > 1 ); return 'usage: configAuth' if ( split( m{\s+}xms, $arg ) > 1 );
my $configAuth = 'enable=' . ($arg eq 'enable' ? 1 : 0); my $configAuth = 'enable=' . ( $arg eq 'enable' ? 1 : 0 );
$endpoint = 'configAuth'; $endpoint = 'configAuth';
$param = '{"param":"' . $configAuth . '"}'; $param = '{"param":"' . $configAuth . '"}';
} }
else { else {
my $list = ''; my $list = '';
$list .= 'info:noArg getDeviceList:noArg '; $list .= 'info:noArg getDeviceList:noArg ';
$list .= 'clearLog:noArg fwUpdate:noArg reboot:noArg factoryReset:noArg configAuth:enable,disable' $list .=
'clearLog:noArg fwUpdate:noArg reboot:noArg factoryReset:noArg configAuth:enable,disable'
if ( ::ReadingsVal( $name, 'bridgeType', 'Software' ) eq 'Hardware' ); if ( ::ReadingsVal( $name, 'bridgeType', 'Software' ) eq 'Hardware' );
return ( 'Unknown argument ' . $cmd . ', choose one of ' . $list ); return ( 'Unknown argument ' . $cmd . ', choose one of ' . $list );
} }
@ -535,6 +531,9 @@ sub FirstRun {
if ( !::IsDisabled($name) ); if ( !::IsDisabled($name) );
$hash->{helper}->{runInfo} = 0; $hash->{helper}->{runInfo} = 0;
::readingsSingleUpdate( $hash, 'configAuthSuccess', 'unknown', 0 )
if ( ::ReadingsVal( $name, 'configAuthSuccess', 'none' ) eq 'none' );
return ::InternalTimer( ::gettimeofday() + 5, return ::InternalTimer( ::gettimeofday() + 5,
\&FHEM::Devices::Nuki::Bridge::GetCheckBridgeAlive, $hash ); \&FHEM::Devices::Nuki::Bridge::GetCheckBridgeAlive, $hash );
} }
@ -602,7 +601,7 @@ sub CreateUri {
if ( $endpoint ne 'callback/add' if ( $endpoint ne 'callback/add'
&& $deviceType == 2 ); && $deviceType == 2 );
} }
$uri .= '&' . $param $uri .= '&' . $param
if ( defined($param) if ( defined($param)
&& $endpoint eq 'configAuth' ); && $endpoint eq 'configAuth' );
@ -916,11 +915,14 @@ sub ResponseProcessing {
} }
} }
WriteReadings( $hash, $decode_json ) WriteReadings( $hash, $decode_json, $endpoint )
if ( $endpoint eq 'info' ); if ( $endpoint eq 'info' );
return; return;
} }
elsif ( $endpoint eq 'configAuth' ) {
WriteReadings( $hash, $decode_json, $endpoint );
}
else { else {
return ::Log3( $name, 5, return ::Log3( $name, 5,
@ -989,6 +991,7 @@ sub CGI() {
sub WriteReadings { sub WriteReadings {
my $hash = shift; my $hash = shift;
my $decode_json = shift; my $decode_json = shift;
my $endpoint = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -999,25 +1002,34 @@ sub WriteReadings {
my $dhash; my $dhash;
::readingsBeginUpdate($hash); ::readingsBeginUpdate($hash);
::readingsBulkUpdate( $hash, 'appVersion',
$decode_json->{versions}->{appVersion} );
::readingsBulkUpdate( $hash, 'firmwareVersion',
$decode_json->{versions}->{firmwareVersion} );
::readingsBulkUpdate( $hash, 'wifiFirmwareVersion',
$decode_json->{versions}->{wifiFirmwareVersion} );
::readingsBulkUpdate( $hash, 'bridgeType',
$bridgeType{ $decode_json->{bridgeType} } );
::readingsBulkUpdate( $hash, 'hardwareId',
$decode_json->{ids}{hardwareId} );
::readingsBulkUpdate( $hash, 'serverId', $decode_json->{ids}{serverId} );
::readingsBulkUpdate( $hash, 'uptime', $decode_json->{uptime} );
::readingsBulkUpdate( $hash, 'currentGMTime', $decode_json->{currentTime} );
::readingsBulkUpdate( $hash, 'serverConnected',
$decode_json->{serverConnected} );
::readingsBulkUpdate( $hash, 'wlanConnected',
$decode_json->{wlanConnected} );
::readingsEndUpdate( $hash, 1 );
if ( $endpoint eq 'configAuth' ) {
::readingsBulkUpdate( $hash, 'configAuthSuccess',
$decode_json->{success} );
}
else {
::readingsBulkUpdate( $hash, 'appVersion',
$decode_json->{versions}->{appVersion} );
::readingsBulkUpdate( $hash, 'firmwareVersion',
$decode_json->{versions}->{firmwareVersion} );
::readingsBulkUpdate( $hash, 'wifiFirmwareVersion',
$decode_json->{versions}->{wifiFirmwareVersion} );
::readingsBulkUpdate( $hash, 'bridgeType',
$bridgeType{ $decode_json->{bridgeType} } );
::readingsBulkUpdate( $hash, 'hardwareId',
$decode_json->{ids}{hardwareId} );
::readingsBulkUpdate( $hash, 'serverId',
$decode_json->{ids}{serverId} );
::readingsBulkUpdate( $hash, 'uptime', $decode_json->{uptime} );
::readingsBulkUpdate( $hash, 'currentGMTime',
$decode_json->{currentTime} );
::readingsBulkUpdate( $hash, 'serverConnected',
$decode_json->{serverConnected} );
::readingsBulkUpdate( $hash, 'wlanConnected',
$decode_json->{wlanConnected} );
}
::readingsEndUpdate( $hash, 1 );
return; return;
} }

View File

@ -113,7 +113,6 @@ my %deviceTypes = (
my %deviceTypeIds = reverse(%deviceTypes); my %deviceTypeIds = reverse(%deviceTypes);
my %modes = ( my %modes = (
2 => { 2 => {
0 => 'door mode', 0 => 'door mode',
@ -191,7 +190,6 @@ my %doorsensorStates = (
5 => 'calibrating' 5 => 'calibrating'
); );
sub Define { sub Define {
my $hash = shift; my $hash = shift;
my $def = shift // return; my $def = shift // return;
@ -215,7 +213,6 @@ sub Define {
$hash->{STATE} = 'Initialized'; $hash->{STATE} = 'Initialized';
$hash->{NOTIFYDEV} = 'global,autocreate,' . $name; $hash->{NOTIFYDEV} = 'global,autocreate,' . $name;
my $iodev = ::AttrVal( $name, 'IODev', 'none' ); my $iodev = ::AttrVal( $name, 'IODev', 'none' );
::AssignIoPort( $hash, $iodev ) if ( !$hash->{IODev} ); ::AssignIoPort( $hash, $iodev ) if ( !$hash->{IODev} );
@ -558,7 +555,6 @@ sub WriteReadings {
&& $t ne 'doorsensorState' && $t ne 'doorsensorState'
&& $t ne 'doorsensorStateName' ); && $t ne 'doorsensorStateName' );
::readingsBulkUpdate( ::readingsBulkUpdate(
$hash, $t, $hash, $t,
( (
@ -573,13 +569,13 @@ sub WriteReadings {
::readingsBulkUpdate( $hash, $t, $deviceTypes{$v} ) ::readingsBulkUpdate( $hash, $t, $deviceTypes{$v} )
if ( $t eq 'deviceType' ); if ( $t eq 'deviceType' );
::readingsBulkUpdate( $hash, $t, $doorsensorStates{$v} ) ::readingsBulkUpdate( $hash, $t, $doorsensorStates{$v} )
if ( $t eq 'doorsensorState' ); if ( $t eq 'doorsensorState' );
::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) ) ::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) )
if ( $t eq 'paired' ); if ( $t eq 'paired' );
::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) ) ::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) )
if ( $t eq 'batteryCharging' ); if ( $t eq 'batteryCharging' );