Automatisation Homebridge avec Node-Red

À mon avis, l'un des principaux inconvénients du homebridge est le manque de capacité à créer des scripts avancés. Toute l'automatisation est attribuée au Home Center, qui peut être un iPad (connecté à la charge), une Apple TV ou un HomePod. Tout le monde n'a pas ces appareils, en outre, HomeKit a une très mauvaise automatisation. Cette situation peut être corrigée à l' aide de Node-Red . L'article est destiné aux utilisateurs qui ont déjà installé et configuré un pont domestique.



En bref: Node-RED est un outil pour connecter du matériel, des API et des services en ligne en créant des liens entre différents nœuds (blocs).

Définition sur le site officiel:
Node-RED est un outil de programmation pour connecter des périphériques matériels, des API et des services en ligne de manière nouvelle et intéressante.
Il fournit un éditeur basé sur un navigateur qui facilite le câblage des flux à l'aide de la large gamme de nœuds de la palette qui peut être déployée sur son runtime en un seul clic.


Sur Raspbian, cela est installé:

sudo apt-get install nodered sudo systemctl enable nodered.service sudo service nodered start 

Par défaut, Node-Red s'exécute sur le port 1880.

Il existe une énorme bibliothèque de modules avec des ensembles de blocs de diverses fonctionnalités. Pas épargné et homebridge. Installez node-red-contrib-homebridge-automation :

 cd ~/.node-red npm install node-red-contrib-homebridge-automation sudo service nodered restart 

Essayons d'allumer l'ampoule. Pour ce faire, faites glisser le hb-control , bloc fonctionnel (ce bloc enverra une commande à activer) et injectez (dans le cadre de cet article, il suffit d'activer manuellement le script). Pour la première fois, pour les blocs hb, vous devez spécifier un code PIN et mettre à jour la liste des appareils. Ensuite, vous pouvez ajouter les blocs nécessaires:



Maintenant, en cliquant sur le bouton dans le bloc d' injection , la lumière devrait s'allumer. En plus de hb-contoll, il existe également des blocs hb-event, hb-status et hb-resume . Une description détaillée des blocs peut être trouvée dans le dépôt officiel.

Code du bloc fonctionnel
 var ret_msg={}; ret_msg.payload = {}; ret_msg.payload.On = true; return ret_msg; 


Le bloc fonction est conçu pour manipuler des données à l'aide de fonctionnalités JavaScript. Le bloc accepte la variable msg avec le paramètre de charge utile , par défaut, la plupart des blocs de Node-Red fonctionnent avec le paramètre de charge utile .

Il vaut la peine de parler du bloc de débogage , avec lui, vous pouvez voir la sortie des blocs, afin de comprendre quelle est l'erreur si votre idée ne fonctionne pas.

Faisons maintenant quelque chose d'intéressant, par exemple, changeons la lumière après avoir tourné le MagicCube de 90 degrés. Dans un article précédent, j'ai montré comment se faire des amis en zigbee avec un homebridge. MagicCube, comme les autres appareils zigbee, apparaîtra dans le courtier MQTT après le couplage.

Node-Red prend en charge le protocole MQTT prêt à l'emploi. Ajoutez le bloc MQTT, spécifiez l'adresse du serveur et le cube de rubrique.



Un cube peut transmettre les états suivants:
secouer, réveiller, tomber, taper, glisser, flip180, flip90, Faire pivoter à gauche et faire pivoter à droite

Ajoutez un bloc de commutation pour séparer un état d'un autre. Définissez les conditions flip90 , shake et tap dans le commutateur . Connectez la sortie supérieure à hb-status pour obtenir l'état actuel de l'ampoule. Le bloc hb-status est connecté au bloc Invert On Value en inversant l'état, et sa sortie est connectée au hb-control et lorsque le cube est tourné, l'ampoule changera l'état on / off. Cela devrait ressembler à ceci:



Inverser le code de valeur
 var ret_msg=msg; ret_msg.payload.On = !msg.payload.On; return ret_msg; 


Le flux peut être importé d'ici:

Débit
 [ { "id": "f0f31eb6.22f16", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "e0f72465.9e4fb8", "type": "mqtt in", "z": "f0f31eb6.22f16", "name": "", "topic": "zigbee2mqtt/0x00158d00010f0528", "qos": "2", "datatype": "auto", "broker": "8ec472b.e73e29", "x": 160, "y": 80, "wires": [ [ "43f74679.730588" ] ] }, { "id": "8539109.d872ff", "type": "debug", "z": "f0f31eb6.22f16", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 670, "y": 60, "wires": [] }, { "id": "c5db7c5b.399f4", "type": "hb-status", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 340, "y": 180, "wires": [ [ "9ef696d9.51a378" ] ] }, { "id": "43f74679.730588", "type": "switch", "z": "f0f31eb6.22f16", "name": "CubeActions", "property": "payload", "propertyType": "msg", "rules": [ { "t": "cont", "v": "flip90", "vt": "str" }, { "t": "cont", "v": "tap", "vt": "str" }, { "t": "cont", "v": "shake", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 3, "x": 150, "y": 240, "wires": [ [ "c5db7c5b.399f4" ], [], [] ] }, { "id": "f476dcba.a6511", "type": "hb-control", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 700, "y": 180, "wires": [] }, { "id": "9ef696d9.51a378", "type": "function", "z": "f0f31eb6.22f16", "name": "Invert On Value", "func": "var ret_msg=msg;\nret_msg.payload.On = !msg.payload.On;\nreturn ret_msg;", "outputs": 1, "noerr": 0, "x": 520, "y": 180, "wires": [ [ "f476dcba.a6511" ] ] }, { "id": "8ec472b.e73e29", "type": "mqtt-broker", "z": "", "name": "mosquitto", "broker": "127.0.0.1", "port": "1883", "clientid": "", "usetls": false, "compatmode": true, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closePayload": "", "willTopic": "", "willQos": "0", "willPayload": "" }, { "id": "7948a496.505c2c", "type": "hb-conf", "z": "", "username": "111-11-111" } ] 


Ainsi, il est possible de «sculpter» des schémas d'automatisation complexes à partir de blocs. Dans la bibliothèque, vous pouvez trouver des modules avec des ensembles de blocs pour des tâches complètement différentes, par exemple, pour enregistrer des caméras de surveillance vidéo ou travailler avec des fichiers à partir de caméras.

Pensées PS à haute voix:
Je suis hanté par l’idée que, quelle que soit la façon dont la technologie évolue, beaucoup sont encore très loin de l’automatisation banale des processus de travail et de vie par la programmation. J'espère vraiment qu'avec l'avènement d'outils tels que Node-Red ou Blockly , le seuil d'entrée diminuera considérablement. Ayant appris à construire un système à partir de cubes dans le même Node-Red, les gens arriveront probablement au bloc fonctionnel et apprendront JS avec intérêt, puis tout se passera de lui-même.

Source: https://habr.com/ru/post/fr462775/


All Articles