ESP32 WROOM + Grow R503 fingerprint sensor integration with Home Assistant and Nuki 3 Pro for secure door unlocking with color feedback.
Short: Short touch = ring the doorbell. Hold longer = scan for fingerprint → Home Assistant decides and unlocks the Nuki 3 Pro.
This project is a local-first, auditable, hacker-friendly way to add fingerprint entry to a Nuki smartlock using:
- ESP32 WROOM running ESPHome,
- Grow R503 fingerprint sensor (RGB/aura ring variant recommended),
- Home Assistant to hold lock credentials and run the unlock policy.
Why this design?
- Keep credentials & policies in one trusted place (Home Assistant).
- Keep the edge device (ESP) simple: sense + feedback only.
- UX: short press = bell (no unlock), long press = explicit unlock intent (safer, deliberate).
esphome/fpr_nuki.yaml— ESPHome firmware ready to flash (edit the placeholders).home_assistant/automations.yaml— example automations to unlock and ring.docs/wiring.svg— place your wiring diagram here..gitignore,CONTRIBUTING.md,LICENSE(MIT).
-
Clone repo and open
esphome/fpr_nuki.yaml. Replace:YOUR_WIFI_SSID,YOUR_WIFI_PASS- optional:
api_key,ota_password uart.rx_pin/uart.tx_pinif neededsensing_pin,button_pintag_map(finger id → username)
-
Flash the ESP via USB:
esphome run esphome/fpr_nuki.yaml
-
Check logs in the ESPHome dashboard. Expect
fingerprint_growto initialize. -
Add the device to Home Assistant via ESPHome integration.
-
Import / copy
home_assistant/automations.yamlinto HA and replacelock.front_door_nuki3prowith your Nuki lock entity. -
Test:
- Short press → check HA Developer Tools → Events for
doorbell_pressed. - Long press → a scan window opens (10s). If finger matches, HA receives
fpr_unlock_requestevent and unlocks (if automation allows).
- Short press → check HA Developer Tools → Events for
- R503 VCC → 3.3V (ESP32 3V3)
- R503 GND → GND (common)
- R503 TXD → ESP32 RX (uart rx_pin)
- R503 RXD → ESP32 TX (uart tx_pin)
- R503 3.3VT → 3.3V or
sensor_power_pin(if present) - Optional: R503 WAKEUP →
sensing_pin(GPIO)
If the R503 aura LED is flaky on your module, wire an external NeoPixel ring (see comments in YAML).
- Keep Nuki credentials/tokens in Home Assistant only.
- Fingerprint templates remain on the sensor — do not publish them.
- Add conditions in HA automations (time, presence) for added security if desired.
fingerprint_growmarked FAILED → check UART pins & 3.3V/3.3VT wiring.- LED not responding → try the loading animation switch in ESPHome UI, or add an external NeoPixel fallback.
- If an ESPHome upgrade causes instability, test on the bench and pin a working ESPHome version.
ESPHome docs (fingerprint_grow), FingerprintDoorbell community projects, SmartHomeYourself R503 guides, Home Assistant Nuki integration docs.