Tuto Nuki & Lifedomus
#1
Bonjour,

Je me permets de reprendre le tuto original de Jonathan HSD pour l'intégration des serrures Nuki à la Lifedomus.
Son tuto fonctionnait parfaitement bien si vous aviez  UNE Nuki connectée à un bridge.
Mon besoin était de contrôler PLUSIEURS serrures avec UN bridge.
Son travail m'a énormément aidé à généraliser ce besoin, et je vous partage le fruit de mes recherches.

J'ai pris une approche un peu différente qui correspond à ce que j'ai fait pour Surveillance Station : je "comprenais" ce que j'y avais fait, mais je n'arrive pas à comprendre toutes les astuces de Jonathan (nous n'avons évidemment pas le même niveau de compétences).

Cette serrure et tous les accessoires nécessaires peuvent être trouvés ici :
http://homesweetshop.eu/produit/pack-ser...ombo-nuki/
Il s'agit du bundle Serrure Nuki et son bridge afin de pouvoir le piloter à distance et d'avoir accès à son API : https://nuki.io/fr/api/ (Bridge http-API)

Le but étant de récupérer son état d'ouverture/fermeture et l'état des piles + envoyer les différentes commandes disponibles ouverture, déverrouillage et verrouillage.

1. Activation API

Pour commencer, nous allons avoir besoin d’activer le mode Développeur via l’app sur Mobile.

Cette manipulation peut être effectuée à l’installation du système :
- Vous tomberez sur une page de recherche des réseaux WIFI et sur la partie basse, cocher la case API HTTP.
OU
Si vous avez déjà installé votre Nuki, procéder comme suit :
- aller dans section gérer la Bridge
- mettre la Bridge en mode maintenance
- Une fois arrivé dans la section de gestion de la Bridge, presser sur l'icône de Bridge puis activer le HTTP API. 

Vous obtiendrez l’adresse IP du bridge, le port (par défaut le 8080) et surtout le token (jeton) à noter précieusement pour la suite de ce tuto.
Une fois ces éléments enregistrés terminer l’installation de la Nuki.
Pour la suite, on notera les éléments suivant :

IP du bridge = IP_NUKI
Port du bridge (par défaut le 8080) = PORT_NUKI
Token = TOKEN_NUKI

Il reste encore à récupérer les IDs des NUKIs, pour cela ouvrir une page d’un navigateur internet.
Puis entrez l’url suivante : http://IP_NUKI:PORT_NUKI/list?token=TOKEN_NUKI

Vous devriez recevoir en retour l’état de vos Nukis avec leur nukiID qu’on notera par la suite ID_NUKIx
(où x prend les valeurs de 0 à nbr de Nuki connectés au Bridge - 1)

Voici un exemple de retour de cette URL/API :

Code :
    [
     {
       "nukiId": 123456789,
       "name": "Entrée",
       "lastKnownState": {
         "state": 1,
         "stateName": "locked",
         "batteryCritical": false,
         "timestamp": "2019-01-12T13:04:25+00:00"
       }
     },
     {
       "nukiId": 123456780,
       "name": "Cuisine",
       "firmwareVersion": "1.7.3",
       "lastKnownState": {
         "state": 1,
         "stateName": "locked",
         "batteryCritical": false,
         "timestamp": "2019-01-12T14:47:54+00:00"
       }
     }
    ]

2. Rappel sur les actions et les états disponibles.

Pour l’état de la Nuki, nous obtenons une valeur numérique :
0 : non calibré (à faire à l’installation pour que la Nuki sache se positionner)
1 : verrouillé
2 : déverrouillage en cours
3 : déverrouillé
4 : verrouillage en cours
5 : porte ouverte
6 : lock’n’go (verrouillage temporisé)
7 : porte en cours d’ouverture
(bien comprendre la différence entre déverrouillé et ouverture)

Pour les actions possibles :
1 : déverrouillage
2 : verrouillage
3 : ouverture porte
4 : lock’n’go (verrouillage temporisé)
5 : lock’n’go précédé d’une ouverture de porte

3. Création du connecteur Universel http

Lancer votre Config Studio puis dans les connecteurs du pack Connectivité Avancée, ajouter un connecteur Universel HTTP.

Entrez les paramètres suivant :

Label : Nuki API
IP ou nom de domaine : IP_NUKI:PORT_NUKI
Token URL : TOKEN_NUKI
Persistance… : Vrai

Y insérer le code JavaScript suivant :
Code :
    obj = JSON.parse(trame)
    ldprint (obj)
    try {
        for (i=0; i < 500; i++) {
            ldprint ("Nuki" + i + "_Name = " + obj[i].name)
            eval ("Nuki" + i + "_Name = obj[" + i + "].name")
    
            ldprint ("Nuki" + i + "_Id = " + obj[i].nukiId)
            ldprint ("typeof Nuki" + i + "_Id = " + typeof obj[i].nukiId)
            eval ("Nuki" + i + "_Id = obj[" + i + "].nukiId")
            
            ldprint ("Nuki" + i + "_State = " + obj[i].lastKnownState.state)
            ldprint ("typeof Nuki" + i + "_State = " + typeof obj[i].lastKnownState.state)
            eval ("Nuki" + i + "_State = obj[" + i + "].lastKnownState.state")        
    
            ldprint ("Nuki" + i + "_BatteryCritical = " + obj[i].lastKnownState.batteryCritical)
            ldprint ("typeof Nuki" + i + "_BatteryCritical = " + typeof obj[i].lastKnownState.batteryCritical)
            eval ("Nuki" + i + "_BatteryCritical = obj[" + i + "].lastKnownState.batteryCritical")        
    
            ldprint ("Nuki" + i + "_Timestamp = " + obj[i].lastKnownState.timestamp)
            eval ("Nuki" + i + "_Timestamp = obj[" + i + "].lastKnownState.timestamp")        
        }
    }
    catch (err) {
        ldprint ("error at i = " + i)
    }
Lire la suite dans le pdf joint, car soucis avec le forum ...


Pièces jointes
.pdf   Tuto - Nuki & Lifedomus.pdf (Taille : 336.1 Ko / Téléchargements : 10)
Likes Received: 159 in 112 posts
Likes Given: 146
Répondre
#2
Merci pour le partage !

J'en avais commandé une chez Orange mais elle est repartie à l'envoyeur pour non WAF compliance :(
Répondre




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)