Using Nuki Lock 3.0 Fully Local without Bridge

If you have Nuki v3 and are using ESPHome:

Although the nuki-bridge in ESPHome allows to use a keypad, I don’t think it’s possible to configure these kind of rules directly. This seems to be possible using an automation. I don’t have a keypad so this is purely theoretical:

If you are using v4, ignore the above paragraph.

  1. Create an automation with different triggers, one time triggee, and one that gets the keypad input
  2. Add conditions based on time if needed
  3. Create a Choose action that will run when both of your triggers are triggered. Then call lock.unlatch service to open the door.

Not sure how the keypad will report to nuki-bridge the state, I suggest you to read the docs.

I tried the exact integration with Nuki Smart Lock 3.0. The lock is discovered and can be used normally but unfortunately with hue delays. Sometimes it instantly responds but usally it takes more then 20 seconds. I have connected Nuki with to a bluetooth proxy network. Switchbot devices work flawlessly but Nuki has delay problems.

It doesn’t have delay problems, it can be configured. Since the lock uses polling to communicate with the lock to save battery, it does in intervals of x seconds

EDIT: changed integration by lock

Wait a minute. So if I write an automation to pull the info like in 1second will it help ?

It can be configured in the lock itself through the Nuki app. Just browse all the settings, it has some interesting configs.

AFAIR it’s the lock that does the polling for events, so automations won’t help.

Hey! I was thinking about buying the Nuki 4.0. Is this tutorial valid for it as well?

Thanks!

Anyone able to help as I am a little confused.

Flashed the ESP32 with the software, got my lock connected to it all OK (Nuki 3.0) I have MQTT installed and the broker logs can see the “nuke hub” as I called it.

I installed the HACS for “Nuki Lock” and when I go to get this installed it asks me for my bridge IP which I have provided (that of the ESP32) however it also asks me for WebAPI or BridgeAPI… This is where I am stuck.

Nuki don’t allow me to add my device to WebAPI as I don’t have a bridge, and I have scrolled through the webpage on my ESP32 for an sort of API key in there but nothing?

I was under the impression this would allow me to add my lock to HA WITHOUT a bridge? Have I totally miss-read it or is there a way to get an API token?

Thanks

If you are using NukiHub with an ESP32, which works through MQTT, you don’t need any extra integration. You can go to the MQTT integration to find there your lock (if everything is properly configured)

Yeah doesn’t seem to work, I see the bridge but not the lock in my MQTT, if I then try add device, use Nuki Lock one it asks for Web Api or Bridge API

Ok it seemed to take a bit of time but the lock now shows in MQTT!!! Yay!

1 Like

I’m trying to setup this Addon but keep on getting the same error:

-----------------------------------------------------------
 Add-on: Nuki Bridge
 Virtual Nuki Bridge to use instead of the physical device
-----------------------------------------------------------
 Add-on version: 0.0.23
 You are running the latest version of this add-on.
 System: Home Assistant OS 15.2  (amd64 / qemux86-64)
 Home Assistant Core: 2025.5.3
 Home Assistant Supervisor: 2025.05.3
-----------------------------------------------------------
 Please, share the above information when looking for help
 or support in, e.g., GitHub, forums or the Discord chat.
-----------------------------------------------------------
[cont-init.d] 00-banner.sh: exited 0.
[cont-init.d] 01-log-level.sh: executing... 
[cont-init.d] 01-log-level.sh: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
2025-05-27 17:32:08.192|I|config.py:144|Access Token: XXX
2025-05-27 17:32:08.192|I|config.py:145|app_id: 3583654526
2025-05-27 17:32:08.192|I|config.py:150|Generating new keys
2025-05-27 17:32:08.193|I|config.py:154|bridge_public_key: YYY
2025-05-27 17:32:08.193|I|config.py:155|bridge_private_key: ZZZ
Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/opt/./__main__.py", line 66, in <module>
    nuki_manager, data = init_config(config_file, addon_config_file)
  File "/opt/./config.py", line 98, in init_config
    if len(nuki_devices) > 1:
TypeError: object of type 'NoneType' has no len()
[cmd] python3 exited 1
[cont-finish.d] executing container finish scripts...
[cont-finish.d] 99-message.sh: executing... 
-----------------------------------------------------------
                Oops! Something went wrong.
 We are so sorry, but something went terribly wrong when
 starting or running this add-on.
 
 Be sure to check the log above, line by line, for hints.
-----------------------------------------------------------
[cont-finish.d] 99-message.sh: exited 0.
[cont-finish.d] done.
[s6-finish] waiting for services.
[s6-finish] sending all processes the TERM signal.
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] 00-banner.sh: executing...

Do you have any idea what I’m doing wrong?

I would say the add-on doesn’t work anymore. You should use the Nuki Hub ESP32 alternative: