Nuki SmartLock cannot connect

Hi,
I want to try using nymea with my nuki SmartLock. I use a pi zero, with the latest nymea image burnt on a sd card. The Pi is 1 meter away from the lock. I tried more than once, rebooted, waited on the system updates, and so on. Of course, il put my lock in pairing mode when asked.

Here are the logs :

I | Nuki: Start bluetooth discovery…
I | Nuki: Bluetooth discovery for nuki devices finished
W | Nuki: Could not read serial number from bluetooth thing name “Nuki_Opener_1D97FE32”
I | Nuki: Pairing confirmed, assuming the pairing mode is active. Start authentication process
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Disconnected
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Connecting
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Connected
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Discovering
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Disconnected
W | Bluez: Could not connect device “54:D2:72:B0:20:05” “org.bluez.Error.Failed” “Software caused connection abort”
W | JsonRpc: RPC call timed out: “Devices” : “ConfirmPairing”
I | Nuki: Start bluetooth discovery…
I | Nuki: Bluetooth discovery for nuki devices finished
W | Nuki: Could not read serial number from bluetooth thing name “Nuki_Opener_1D97FE32”
I | Nuki: Pairing confirmed, assuming the pairing mode is active. Start authentication process
W | Nuki: There is already an async setup for a nuki running.
W | ThingManager: ConfirmPairing failed for “Nuki” QUuid("{4a1cc5d9-9b44-4632-8db0-66d64efd4767}")

Is there something I miss?

Thanks! Laurent

Hi @heriss,

This message seems suspicious:

 Nuki: Could not read serial number from bluetooth thing name “Nuki_Opener_1D97FE32”

I’m wondering if there might have been a Firmware update for the nuki which would render it incompatible with the current nymea Plugin. I don’t have such a device but I know @Simon has one in use with nymea. Perhaps you guys want to compare firmware versions as a first step.

No, nothing to do with the problem : I have two nuki equipment showing when I look for my SmartLock, and one of them is an Opener (Nuki_Opener_1D97FE32). I don’t choose it, but the SmartLock (Nuki_1CB02005) when trying to pair… you see the serial number equals the end of the bluetooth mac address,…

Thanks to look into my problem…

Laurent

PS : I wonder, is the rpi zero powerful enough to work with Nymea? could it be that the pairing times out before succeeding?

Good question… I do run nymea on a Pi0 and while it is not exactly a great experience because it is a very slow device, I did not experience any major issues with it either. But I also didn’t try any Bluetooth device with it. I wouldn’t think that is the problem, but to be sure, you could probably try that yourself by installing nymea on something more powerful and try with that…

I’ve read again through your log and I see there seems to be a bug in the Nuki plugin that it doesn’t properly recover if a pairing fails. If I am reading the code correctly, once a setup process fails, all subsequent attempts will fail too with the message “There is already an async setup for a nuki running.”

That needs to be fixed in the plugin, however, that might indicate that you could have success by restarting nymea in between attempts… So perhaps it’s a combination of the connections sometimes timing out as you suspected and then you only having one attempt to make it work…

Can you try again a couple of times but restart nymead in between failed attempts?

Hi @heriss!
I do use a Nuki lock with nymea on a Pi 3.
Also just re-paired it to check if it still works and it does. (Logs attached)

So my suspicion is (adding to @mzanetti thoughts):
The nymea Plugin has been build when there was only the Nuki Smartlock on the market (and I have the first one). So I suppose since opener (and other Nuki products) are not implemented in the plugin, it might get confused when other products than the Smartlock advertise themself on the same API.

Maybe check if we have the same firmware (1.7.3 for me).

Maybe you can get it work after restarting nymead (you can do that from the App) - if not let us know - we try to schedule a upgrade of the open source Nuki plugin.

 I | Nuki: Start bluetooth discovery...
 I | Nuki: Bluetooth discovery for nuki devices finished
 I | Nuki: Nuki with address "54:D2:72:A2:A9:C9" already added.
 I | Nuki: Start bluetooth discovery...
 I | Nuki: Bluetooth discovery for nuki devices finished
 I | Nuki: Nuki with address "54:D2:72:A2:A9:C9" already added.
 I | Nuki: Delete pairing information from bluez BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) 
 I | Nuki: Start bluetooth discovery...
 I | Nuki: Bluetooth discovery for nuki devices finished
 I | Nuki: Pairing confirmed, assuming the pairing mode is active. Start authentication process
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Disconnected
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Connecting
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Connected
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Discovering
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Discovered
 I | Nuki: GattService(Primary, Generic Attribute, {00001801-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "GATT Service Changed" "{00002a05-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Device Information, {0000180a-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "Hardware Revision String" "{00002a27-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Serial Number String" "{00002a25-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Firmware Revision String" "{00002a26-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee200-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee201-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee202-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee203-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee100-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee101-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: Init BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) 
 I | Nuki: Authenticator: Settings loaded from "/etc/nymea/plugin-nuki.conf"
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthenticated
 I | Nuki: Device "54:D2:72:A2:A9:C9" authenticated.
 I | Nuki: Read thing information characteristic finished "Serial Number String" 0EA2A9C9
 I | Nuki: Read thing information characteristic finished "Hardware Revision String" 5.1
 I | Nuki: Read thing information characteristic finished "Firmware Revision String" 1.7.3
 I | Nuki: Bluetooth device "Nuki_0EA2A9C9" is now available
 I | Nuki: Executing Nuki::NukiActionAuthenticate
 I | Nuki: NukiAuthenticator::AuthenticationStateRequestPublicKey
 I | Nuki: Authenticator: Request public key fom Nuki
 I | Nuki: Authenticator: Nuki public key message received ""
 I | Nuki: NukiAuthenticator::AuthenticationStateGenerateKeyPair
 I | Nuki: Generate key pair
 I | Nuki: NukiAuthenticator::AuthenticationStateSendPublicKey
 I | Nuki: Authenticator: Send public key to Nuki
 I | Nuki: NukiAuthenticator::AuthenticationStateReadChallenge
 I | Nuki: Authenticator: Nuki challenge message received ""
 I | Nuki: NukiAuthenticator::AuthenticationStateAutorization
 I | Nuki: Authenticator: Calculate shared key
 I | Nuki: Authenticator: Calculate authenticator data
 I | Nuki: Authenticator: Send authorization authenticator to Nuki
 I | Nuki: NukiAuthenticator::AuthenticationStateReadSecondChallenge
 I | Nuki: Authenticator: Nuki challenge message received ""
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthenticateData
 I | Nuki: Authenticator: Calculate shared key
 I | Nuki: Authenticator: Calculate authenticator data
 I | Nuki: Authenticator: Send authentication data to Nuki
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthorizationId
 I | Nuki: Authenticator: Nuki authorization ID message received ""
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthorizationIdConfirm
 I | Nuki: Authenticator: Create data for authentication ID confirm
 I | Nuki: Authenticator: Calculate shared key
 I | Nuki: Authenticator: Calculate authenticator data
 I | Nuki: Authenticator: Send authentication ID confirm to Nuki
 I | Nuki: NukiAuthenticator::AuthenticationStateStatus
 I | Nuki: Nuki authentication process finished successfully!
 I | Nuki: Authenticator: Settings saved to "/etc/nymea/plugin-nuki.conf"
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthenticated
 I | Nuki: Device "54:D2:72:A2:A9:C9" authenticated.
 I | Nuki: Authentication process finished successfully.
 I | Nuki: Deleting the temporary pairing device
 I | Nuki: Setup thing "Nuki" ParamList (count:3)
     0: Param(Id: "{2477abba-874b-4c48-b543-7b911ff215b3}", Value:QVariant(QString, "Nuki_0EA2A9C9")) 
     1: Param(Id: "{30976794-6066-4f72-8135-6d50499247a5}", Value:QVariant(QString, "54:D2:72:A2:A9:C9")) 
     2: Param(Id: "{ea51d911-f94a-4d2d-97fd-9f1d4c6519bf}", Value:QVariant(QString, "0EA2A9C9")) 
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Discovered
 I | Nuki: GattService(Primary, Generic Attribute, {00001801-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "GATT Service Changed" "{00002a05-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Device Information, {0000180a-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "Hardware Revision String" "{00002a27-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Serial Number String" "{00002a25-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Firmware Revision String" "{00002a26-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee200-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee201-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee202-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee203-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee100-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee101-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: Init BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) 
 I | Nuki: Authenticator: Settings loaded from "/etc/nymea/plugin-nuki.conf"
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthenticated
 I | Nuki: Device "54:D2:72:A2:A9:C9" authenticated.
 I | Nuki: Read thing information characteristic finished "Serial Number String" 0EA2A9C9
 I | Nuki: Read thing information characteristic finished "Hardware Revision String" 5.1
 I | Nuki: Read thing information characteristic finished "Firmware Revision String" 1.7.3
 I | Nuki: Bluetooth device "Nuki_0EA2A9C9" is now available
 I | Nuki: Executing Nuki::NukiActionRefresh
 I | Nuki: NukiController::NukiControllerStateReadingLockStates
 I | Nuki: Controller: Reading lock state
 I | Nuki: Authenticator: Encrypt data
 I | Nuki: Controller: Sending read lock states request
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandNukiStates
 I | Nuki: Nuki states refreshed.
 I | Nuki: NukiController::NukiControllerStateIdle
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Disconnecting
 I | Nuki: Bluetooth device "Nuki_0EA2A9C9" is now unavailable
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Disconnected
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Connecting
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Connected
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Discovering
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Disconnected
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Connecting
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Connected
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Discovering
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Discovered
 I | Nuki: GattService(Primary, Generic Attribute, {00001801-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "GATT Service Changed" "{00002a05-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Device Information, {0000180a-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "Hardware Revision String" "{00002a27-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Serial Number String" "{00002a25-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Firmware Revision String" "{00002a26-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee200-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee201-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee202-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee203-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee100-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee101-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: Init BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) 
 I | Nuki: Authenticator: Settings loaded from "/etc/nymea/plugin-nuki.conf"
 I | Nuki: NukiAuthenticator::AuthenticationStateAuthenticated
 I | Nuki: Device "54:D2:72:A2:A9:C9" authenticated.
 I | Nuki: Read thing information characteristic finished "Serial Number String" 0EA2A9C9
 I | Nuki: Read thing information characteristic finished "Hardware Revision String" 5.1
 I | Nuki: Read thing information characteristic finished "Firmware Revision String" 1.7.3
 I | Nuki: Bluetooth device "Nuki_0EA2A9C9" is now available
 I | Nuki: Executing Nuki::NukiActionRefresh
 I | Nuki: NukiController::NukiControllerStateReadingLockStates
 I | Nuki: Controller: Reading lock state
 I | Nuki: Authenticator: Encrypt data
 I | Nuki: Controller: Sending read lock states request
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandNukiStates
 I | Nuki: Nuki states refreshed.
 I | Nuki: NukiController::NukiControllerStateIdle
 I | Nuki: Executing Nuki::NukiActionUnlatch
 I | Nuki: NukiController::NukiControllerStateUnlatchActionRequestChallange
 I | Nuki: Controller: Request challenge
 I | Nuki: Authenticator: Encrypt data
 I | Nuki: Controller: Sending challange request
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandChallenge
 I | Nuki: NukiController::NukiControllerStateUnlatchActionExecute
 I | Nuki: Controller: Send lock request NukiUtils::LockActionUnlatch
 I | Nuki: Authenticator: Encrypt data
 I | Nuki: Controller: Sending lock request
 I | Nuki: NukiController::NukiControllerStateUnlatchActionAccepted
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandStatus
 I | Nuki: Controller: NukiUtils::StatusCodeAccepted
 I | Nuki: Controller: NukiUtils::StatusCodeAccepted
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandNukiStates
 I | Nuki: Nuki states refreshed.
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandNukiStates
 I | Nuki: Nuki states refreshed.
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandNukiStates
 I | Nuki: Nuki states refreshed.
 I | Nuki: Authenticator: Decrypt data
 I | Nuki: Controller: Processing notification NukiUtils::CommandStatus
 I | Nuki: Controller: NukiUtils::StatusCodeCompeted
 I | Nuki: NukiController::NukiControllerStateIdle
 I | Nuki: Controller: NukiUtils::StatusCodeCompeted
 I | Nuki: BluetoothDevice(Nuki_0EA2A9C9, 54:D2:72:A2:A9:C9) state changed --> BluetoothDevice::Disconnected

Thanks for your reactivity!

I tried again, directly after rebooting. Didn’t work. I confirm I’ve got the SmartLock 2 with firmware 2.9.10 (last one).

Here are the logs :

1st try

 I | Nuki: Pairing confirmed, assuming the pairing mode is active. Start authentication process
 I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Disconnected
 I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Connecting
 I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Connected
 I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Discovering
 I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Discovered
 I | Nuki: GattService(Primary, Unknown Service, {000000a2-0000-1000-8000-0026bb765291}) 
 I | Nuki:      "Unknown Characteristic" "{e604e95d-a759-4817-87d3-aa005083a0d1}"
 I | Nuki:      "Unknown Characteristic" "{00000037-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{000000a5-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki: GattService(Primary, Unknown Service, {0000003e-0000-1000-8000-0026bb765291}) 
 I | Nuki:      "Unknown Characteristic" "{e604e95d-a759-4817-87d3-aa005083a0d1}"
 I | Nuki:      "Unknown Characteristic" "{00000014-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000020-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000021-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000023-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000030-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000052-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000053-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{000000a6-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki: GattService(Primary, Unknown Service, {00000055-0000-1000-8000-0026bb765291}) 
 I | Nuki:      "Unknown Characteristic" "{e604e95d-a759-4817-87d3-aa005083a0d1}"
 I | Nuki:      "Unknown Characteristic" "{0000004c-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{0000004e-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{0000004f-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000050-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki: GattService(Primary, Unknown Service, {00000045-0000-1000-8000-0026bb765291}) 
 I | Nuki:      "Unknown Characteristic" "{e604e95d-a759-4817-87d3-aa005083a0d1}"
 I | Nuki:      "Unknown Characteristic" "{000000a5-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{0000001d-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{0000001e-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000023-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki: GattService(Primary, Unknown Service, {00000044-0000-1000-8000-0026bb765291}) 
 I | Nuki:      "Unknown Characteristic" "{e604e95d-a759-4817-87d3-aa005083a0d1}"
 I | Nuki:      "Unknown Characteristic" "{00000019-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000037-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee100-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee101-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {a92ee200-5501-11e4-916c-0800200c9a66}) 
 I | Nuki:      "Unknown Characteristic" "{a92ee201-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee202-5501-11e4-916c-0800200c9a66}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Unknown Characteristic" "{a92ee203-5501-11e4-916c-0800200c9a66}"
 I | Nuki: GattService(Primary, Device Information, {0000180a-0000-1000-8000-00805f9b34fb}) 
 I | Nuki:      "Serial Number String" "{00002a25-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Hardware Revision String" "{00002a27-0000-1000-8000-00805f9b34fb}"
 I | Nuki:      "Firmware Revision String" "{00002a26-0000-1000-8000-00805f9b34fb}"
 I | Nuki: GattService(Primary, Unknown Service, {00000096-0000-1000-8000-0026bb765291}) 
 I | Nuki:      "Unknown Characteristic" "{e604e95d-a759-4817-87d3-aa005083a0d1}"
 I | Nuki:      "Unknown Characteristic" "{00000068-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{0000008f-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki:      "Unknown Characteristic" "{00000079-0000-1000-8000-0026bb765291}"
 I | Nuki:          "Client Characteristic Configuration" "{00002902-0000-1000-8000-00805f9b34fb}"
 I | Nuki:          "Unknown Descriptor" "{dc46f0fe-81d2-4616-b5d9-6abdd796939a}"
 I | Nuki: Init BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) 
 I | Nuki: Authenticator: Settings loaded from "/etc/nymea/plugin-nuki.conf"
 I | Nuki: Read thing information characteristic finished "Serial Number String" 1CB02005
 I | Nuki: Read thing information characteristic finished "Hardware Revision String" 12.2
 I | Nuki: Read thing information characteristic finished "Firmware Revision String" 1.5.4
 I | Nuki: Bluetooth device "Nuki_1CB02005" is now available
 I | Nuki: Executing Nuki::NukiActionAuthenticate
 I | Nuki: NukiAuthenticator::AuthenticationStateRequestPublicKey
 I | Nuki: Authenticator: Request public key fom Nuki
 W | JsonRpc: RPC call timed out: "Devices" : "ConfirmPairing"
 I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Disconnected
 I | Nuki: Deleting the temporary pairing device
 I | Nuki: Bluetooth device "Nuki_1CB02005" is now unavailable
 W | Nuki: Cancel authentication process because of disconnection.
 W | ThingManager: ConfirmPairing failed for "Nuki" QUuid("{4a1cc5d9-9b44-4632-8db0-66d64efd4767}")

2nd try :
I | Nuki: Start bluetooth discovery…
I | Nuki: Bluetooth discovery for nuki devices finished
W | Nuki: Could not read serial number from bluetooth thing name “Nuki_Opener_1D97FE32”
I | Nuki: Pairing confirmed, assuming the pairing mode is active. Start authentication process
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Disconnected
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Connecting
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Connected
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Discovering
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Discovered
I | Nuki: GattService(Primary, Unknown Service, {000000a2-0000-1000-8000-0026bb765291})
I | Nuki: “Unknown Characteristic” “{e604e95d-a759-4817-87d3-aa005083a0d1}”
I | Nuki: “Unknown Characteristic” “{00000037-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{000000a5-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: GattService(Primary, Unknown Service, {0000003e-0000-1000-8000-0026bb765291})
I | Nuki: “Unknown Characteristic” “{e604e95d-a759-4817-87d3-aa005083a0d1}”
I | Nuki: “Unknown Characteristic” “{00000014-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000020-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000021-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000023-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000030-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000052-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000053-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{000000a6-0000-1000-8000-0026bb765291}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: GattService(Primary, Unknown Service, {00000055-0000-1000-8000-0026bb765291})
I | Nuki: “Unknown Characteristic” “{e604e95d-a759-4817-87d3-aa005083a0d1}”
I | Nuki: “Unknown Characteristic” “{0000004c-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{0000004e-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{0000004f-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000050-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: GattService(Primary, Unknown Service, {00000045-0000-1000-8000-0026bb765291})
I | Nuki: “Unknown Characteristic” “{e604e95d-a759-4817-87d3-aa005083a0d1}”
I | Nuki: “Unknown Characteristic” “{000000a5-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{0000001d-0000-1000-8000-0026bb765291}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{0000001e-0000-1000-8000-0026bb765291}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000023-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: GattService(Primary, Unknown Service, {00000044-0000-1000-8000-0026bb765291})
I | Nuki: “Unknown Characteristic” “{e604e95d-a759-4817-87d3-aa005083a0d1}”
I | Nuki: “Unknown Characteristic” “{00000019-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000037-0000-1000-8000-0026bb765291}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: GattService(Primary, Unknown Service, {a92ee100-5501-11e4-916c-0800200c9a66})
I | Nuki: “Unknown Characteristic” “{a92ee101-5501-11e4-916c-0800200c9a66}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: GattService(Primary, Unknown Service, {a92ee200-5501-11e4-916c-0800200c9a66})
I | Nuki: “Unknown Characteristic” “{a92ee201-5501-11e4-916c-0800200c9a66}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Characteristic” “{a92ee202-5501-11e4-916c-0800200c9a66}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Characteristic” “{a92ee203-5501-11e4-916c-0800200c9a66}”
I | Nuki: GattService(Primary, Device Information, {0000180a-0000-1000-8000-00805f9b34fb})
I | Nuki: “Serial Number String” “{00002a25-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Hardware Revision String” “{00002a27-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Firmware Revision String” “{00002a26-0000-1000-8000-00805f9b34fb}”
I | Nuki: GattService(Primary, Unknown Service, {00000096-0000-1000-8000-0026bb765291})
I | Nuki: “Unknown Characteristic” “{e604e95d-a759-4817-87d3-aa005083a0d1}”
I | Nuki: “Unknown Characteristic” “{00000068-0000-1000-8000-0026bb765291}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{0000008f-0000-1000-8000-0026bb765291}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: “Unknown Characteristic” “{00000079-0000-1000-8000-0026bb765291}”
I | Nuki: “Client Characteristic Configuration” “{00002902-0000-1000-8000-00805f9b34fb}”
I | Nuki: “Unknown Descriptor” “{dc46f0fe-81d2-4616-b5d9-6abdd796939a}”
I | Nuki: Init BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05)
I | Nuki: Authenticator: Settings loaded from “/etc/nymea/plugin-nuki.conf”
I | Nuki: Read thing information characteristic finished “Serial Number String” 1CB02005
I | Nuki: Read thing information characteristic finished “Hardware Revision String” 12.2
I | Nuki: Read thing information characteristic finished “Firmware Revision String” 1.5.4
I | Nuki: Bluetooth device “Nuki_1CB02005” is now available
I | Nuki: Executing Nuki::NukiActionAuthenticate
I | Nuki: NukiAuthenticator::AuthenticationStateRequestPublicKey
I | Nuki: Authenticator: Request public key fom Nuki
W | JsonRpc: RPC call timed out: “Devices” : “ConfirmPairing”
I | Nuki: BluetoothDevice(Nuki_1CB02005, 54:D2:72:B0:20:05) state changed --> BluetoothDevice::Disconnected
I | Nuki: Deleting the temporary pairing device
I | Nuki: Bluetooth device “Nuki_1CB02005” is now unavailable
W | Nuki: Cancel authentication process because of disconnection.
W | ThingManager: ConfirmPairing failed for “Nuki” QUuid("{4a1cc5d9-9b44-4632-8db0-66d64efd4767}").

I suppose that has to do with the lock version 2. I know that some people trying to implement a python service to unlock via bluetooth had to modify their procedure…

Any chance to have the new locks implemented? Thanks! Laurent

Hi,

Here is where I found the indication that the authentication process changes between SmartLock version 1 and 2. Maybe a hint can be found there…

Have a nice evening! Laurent

Hi Laurent,
thanks for your detailed report, this is great help!

Obviously work needs to be done on the Nuki Plugin.
Please be patient with us since our dev team maintains open source plugins in their “free time” - so it could take a bit until they upgrade the plugin.
Integrating things using ZigBee is way less complicated, but Nuki chose not to integrate ZigBee in their 2.0 Lock.

We don’t try to copy ugly hacks, but make a proper integration. :slight_smile:

Thanks a lot. Good news that you’ll maintain it! I’ll wait…

If I can be any help with testing, let me know…

Have a nice week! Laurent

1 Like

Hi,
Just to remind that I’m ready to test a reworked plugin, if you had time to update it…
Have a nice day! Laurent

Hi @heriss,

I’ve just had another look at our code and the branch you linked. Unfortunately I cannot understand what exactly that python code changes that it makes it work. I do not own a Nuki device so I can’t test this myself… Perhaps @simon.stuerz could give it a look? Doesn’t seem like a huge change would be needed…

I’m gonna have a look at this, found some changelogs and the new api:


Need to study it what the exact difference is, since nuki closes the connection after the very first request, the public key. Maybe there is still the test bt server available, since I have only V1 for testing.
Will write it here once I have something to test.

Ok, I think I might have found the issue here. According to nuki, the api for pairing and doing basic operations on the lock remained the same, the only difference, and also the explanation for the disconnect is the fact, that bluez only enables the notifications (send data without ack from the client) and not the indications (send data with ACK expecting form the client).
Without indications enabled, the lock closes the connection immediatly.

I actually just use the “startNotify” from bluez api, which should according to the docs enable both, indications and notifications, depending on the access properties of the characteristic.
Writing the low level method so I have control over notifications/indications enable/disable…

Hi,
Have you got news about this integration? A way I can help?
Thanks and have a nice day!

Hey @heriss,
sorry for the huge delay in this topic.
I’m still fighting with a low level bluetooth issue here. According to the specs, I should be able to write the descriptor which enables indications instead and not only notifications, but bluez terminates this always with an error, since there is a special method for it.
I have only the “startNotify()” method, which, according to the docs, should enable both: indications and notifications, if the characteristics supports that. Unfortunately, that seem not to be the case, and Nuki v2 requires to enable indications, which get acknowledged every time it sends data by the client.

I still try to find a solution for this, since it applies to other plugins to, and we need the control over indications vs notifications.

Hey @heriss ,
I finally managed to update the nuki and test the change from notifications to indication. This change had a big influence on the data parsing, and should now be fixed.
The fix is in the current experimental repository, you can switch with the app in the system update settings section to experiemental for testing and do an update.

Please let me know if it works now for you, so we can move it towards release.

Thanks for being so patient!

Hi,

Thanks for all the work done! It’s perfect! It works perfectly on a PI zero!

Allow me one remark : you declare the pi as a bridge. That’s fine and has to be the default behaviour, but that should also be an option : the Nuki lock only allows to be paired with one bridge at the same time, so pairing with Nymea breaks the link with the official bridge if it is set up.

If declaring Nymea as a fob, it won’t break the link with the official bridge. You can only use “press button” as payload, but within the official app, you can affect an action or another to 1, 2 or 3 presses…

Do you think this could be implemented?

Many thanks again! Laurent

Hi,
Some follow up. I now use Nymea with the Nuki plugin to control my Nuki Lock for a few days, and it works fine. Thank you for that!
I noticed one thing : the battery level is indicated as critical, although it isn’t in the official application. It could be that I’m using rechargeable batteries (in fact : the Nuki battery pack). But no influence on the actual use of the lock.
Thanks again for the great work!
Laurent

Could you please try to create this file on your machine:
/etc/systemd/system/bluetooth.service.d/01-disable-unwanted-plugins.conf
with the content

[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=battery,sap

and then reboot? I believe it could make it work…