From 25a682224b479226ffd698b16910a3ee82217465 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Sat, 27 Nov 2021 22:51:25 +0100 Subject: [PATCH] change model and fix problems --- controls_NukiSmart.txt | 8 ++++---- lib/FHEM/Devices/Nuki/Bridge.pm | 10 +++++++++- lib/FHEM/Devices/Nuki/Device.pm | 20 ++++++++++++++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/controls_NukiSmart.txt b/controls_NukiSmart.txt index 23c5644..ffcdf25 100644 --- a/controls_NukiSmart.txt +++ b/controls_NukiSmart.txt @@ -1,4 +1,4 @@ -UPD 2021-11-27_21:26:06 9224 FHEM/73_NUKIBridge.pm -UPD 2021-11-27_21:30:28 7569 FHEM/74_NUKIDevice.pm -UPD 2021-11-27_21:26:06 40444 lib/FHEM/Devices/Nuki/Bridge.pm -UPD 2021-11-27_21:32:02 15123 lib/FHEM/Devices/Nuki/Device.pm +UPD 2021-11-27_21:42:00 9224 FHEM/73_NUKIBridge.pm +UPD 2021-11-27_21:36:27 7569 FHEM/74_NUKIDevice.pm +UPD 2021-11-27_22:32:28 40699 lib/FHEM/Devices/Nuki/Bridge.pm +UPD 2021-11-27_22:49:00 15481 lib/FHEM/Devices/Nuki/Device.pm diff --git a/lib/FHEM/Devices/Nuki/Bridge.pm b/lib/FHEM/Devices/Nuki/Bridge.pm index a5e042c..aa4c8dc 100644 --- a/lib/FHEM/Devices/Nuki/Bridge.pm +++ b/lib/FHEM/Devices/Nuki/Bridge.pm @@ -501,7 +501,14 @@ sub GetCheckBridgeAlive { if ( !::IsDisabled($name) && $hash->{helper}->{iowrite} == 0 ) { - Write( $hash, 'info', undef ); + if ( $hash->{helper}->{runInfo} == 0 ) { + Write( $hash, 'info', undef ); + $hash->{helper}->{runInfo} = 1; + } + else { + Write( $hash, 'list', undef ); + $hash->{helper}->{runInfo} = 0; + } ::Log3( $name, 4, "NUKIBridge ($name) - run Write" ); } @@ -521,6 +528,7 @@ sub FirstRun { Write( $hash, 'list', undef ) if ( !::IsDisabled($name) ); + $hash->{helper}->{runInfo} = 0; return ::InternalTimer( ::gettimeofday() + 5, \&FHEM::Devices::Nuki::Bridge::GetCheckBridgeAlive, $hash ); } diff --git a/lib/FHEM/Devices/Nuki/Device.pm b/lib/FHEM/Devices/Nuki/Device.pm index f07c6cd..660701d 100644 --- a/lib/FHEM/Devices/Nuki/Device.pm +++ b/lib/FHEM/Devices/Nuki/Device.pm @@ -111,6 +111,9 @@ my %deviceTypes = ( 4 => 'smartlock3' ); +my %deviceTypeIds = reverse(%deviceTypes); + + my %modes = ( 2 => { 0 => 'door mode', @@ -180,7 +183,14 @@ my %lockStates = ( } ); -my %deviceTypeIds = reverse(%deviceTypes); +my %doorsensorStates = ( + 1 => 'deactivated', + 2 => 'door closed', + 3 => 'door opened', + 4 => 'door state unknown', + 5 => 'calibrating' +); + sub Define { my $hash = shift; @@ -205,6 +215,7 @@ sub Define { $hash->{STATE} = 'Initialized'; $hash->{NOTIFYDEV} = 'global,autocreate,' . $name; + my $iodev = ::AttrVal( $name, 'IODev', 'none' ); ::AssignIoPort( $hash, $iodev ) if ( !$hash->{IODev} ); @@ -541,7 +552,9 @@ sub WriteReadings { && $t ne 'deviceType' && $t ne 'paired' && $t ne 'batteryCritical' - && $t ne 'timestamp' ); + && $t ne 'timestamp' + && $t ne 'doorsensorState' + && $t ne 'doorsensorStateName' ); ::readingsBulkUpdate( $hash, $t, ( $v =~ m/^[0-9]$/ ? $lockStates{$v}{ $hash->{DEVICETYPEID} } : $v ) ) @@ -552,6 +565,9 @@ sub WriteReadings { ::readingsBulkUpdate( $hash, $t, $deviceTypes{$v} ) if ( $t eq 'deviceType' ); + + ::readingsBulkUpdate( $hash, $t, $doorsensorStates{$v} ) + if ( $t eq 'doorsensorState' ); ::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) ) if ( $t eq 'paired' );