À 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 à droiteAjoutez 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.