L’intégration Nuki pour home assistant est un peu limitée pour le moment. Voici comment j’ai simplement intégré un nuki lock dans mon système en utilisant l’API json locale.
Pré requis
- Définissez une adresse IP fixe sur votre bridge nuki (ma préférence est via une entrée statique dans mon serveur DHCP). Chez moi, ce sera 192.168.0.50.
- Avoir ouvert l’accès local sur votre nuki bridge et définit un mot de passe que vous connaissez. (appelé « montoken » sur la suite de l’article)
Configuration des secrets
On commence par se créer 2 secrets : un pour récupérer des informations, l’autre pour effectuer des actions.
nuki_lock_api_action: 'http://192.168.0.50:8080/lockAction?nukiId=monid&action={{ action }}&token=montoken'
nuki_lock_api_info: 'http://192.168.0.50:8080/list?token=montoken'
Notez qu’il y a un nukiId à renseigner. Vous pourrez le retrouver en invokant
http://192.168.0.50:8080/list?token=montoken
et vous obtiendrez quelque chose qui ressemble à cela : ( l’id est 123456789 ici et la date est volontairement incohérente)
[{"deviceType": 0, "nukiId": 123456789, "name": "Porte", "firmwareVersion": "1.13.1", "lastKnownState": {"mode": 2, "state": 1, "stateName": "locked", "batteryCritical": false, "batteryCharging": false, "batteryChargeState": 34, "timestamp": "2050-11-32T04:01:24+00:00"}}]
Configuration
Commande rest
On commande par créer une commande REST
rest_command:
nuki_command:
url: !secret nuki_lock_api_action
timeout: 20
Notez le timeout à 20.
Le Nuki Bridge est mono threadé, ce qui signifie qu’il ne sait faire qu’une seule chose à la fois. Donc s’il est en train de vous répondre s’il est verrouillé ou pas, il ne peut pas immédiatement fermer le verrou et vice-versa.
Puis on crée une commande pour récupérer les informations régulièrement :
rest:
- resource: !secret nuki_lock_api_info
scan_interval: 30
sensor:
- name: nuki_info_raw
json_attributes_path: "$[0].lastKnownState"
value_template: "OK"
json_attributes:
- state
- stateName
- batteryCritical
- batteryChargeState
Mise en forme
On met en forme les informations récupérer en brut précédemment.
template:
- binary_sensor:
- name: nuki_porte_etat
state: "{{ is_state_attr('sensor.nuki_info_raw','state', 3) }}"
device_class: lock
- name: nuki_porte_battery_critical
state: "{{ is_state_attr('sensor.nuki_info_raw', 'batteryCritical', true) }}"
device_class: battery
- sensor:
- name: nuki_porte_battery
state: "{{ state_attr('sensor.nuki_info_raw','batteryChargeState') }}"
device_class: battery
Ce qui donne :

Et on peut également utiliser le templace « lock » prévu à cet effet.
lock:
- platform: template
name: Verrou Porte entree
# value_template: true
value_template: "{{ is_state('binary_sensor.nuki_porte_etat', 'true') }}"
lock:
service: rest_command.nuki_command
data:
action: 2
unlock:
service: rest_command.nuki_command
data:
action: 3
Ce qui donne :


et on a l’historique bien sûr 🙂
Voici le détail des codes « action » :
Code | Action | Signification |
1 | unlock | Ouvre le verrou |
2 | lock | Ferme le verrou |
3 | unlatch | Ouvre le verrou et la gache |
4 | lock’n’go | Déverrouille et verrouille à nouveau après un délai configuré |
5 | lock’n’go with unlatch | Idem que #4 mais avec la gache |