Nuki sur HomeAssistant

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 » :

CodeActionSignification
1unlock Ouvre le verrou
2lockFerme le verrou
3unlatchOuvre le verrou et la gache
4lock’n’go Déverrouille et verrouille à nouveau après un délai configuré
5lock’n’go with unlatchIdem que #4 mais avec la gache

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.