Meiner Meinung nach ist einer der Hauptnachteile von Homebridge die mangelnde Fähigkeit, erweiterte Skripte zu erstellen. Die gesamte Automatisierung ist dem Home Center zugeordnet, bei dem es sich um ein iPad (zum Aufladen angeschlossen), Apple TV oder einen HomePod handeln kann. Nicht jeder hat diese Geräte, außerdem hat HomeKit eine sehr schlechte Automatisierung. Diese Situation kann mit
Node-Red korrigiert werden. Der Artikel richtet sich an Benutzer, auf
denen Homebridge bereits
installiert und konfiguriert ist .

Kurz gesagt: Node-RED ist ein Tool zum Verbinden von Hardware, APIs und Onlinediensten, indem Verbindungen zwischen verschiedenen Knoten (Blöcken) hergestellt werden.
Definition auf der offiziellen Website:Node-RED ist ein Programmiertool zum Verkabeln von Hardwaregeräten, APIs und Onlinediensten auf neue und interessante Weise.
Es bietet einen browserbasierten Editor, mit dem Flows mithilfe der Vielzahl von Knoten in der Palette, die mit einem einzigen Klick zur Laufzeit bereitgestellt werden können, einfach miteinander verbunden werden können.
Auf Raspbian ist Folgendes installiert:
sudo apt-get install nodered sudo systemctl enable nodered.service sudo service nodered start
Standardmäßig wird Node-Red auf Port 1880 ausgeführt.
Es gibt eine riesige
Bibliothek von Modulen mit Sätzen von Blöcken verschiedener Funktionen. Nicht verschont und Homebridge. Installieren Sie die
Node-Red-Contrib-Homebridge-Automatisierung :
cd ~/.node-red npm install node-red-contrib-homebridge-automation sudo service nodered restart
Versuchen wir, die Glühbirne einzuschalten. Ziehen Sie dazu das
hb-Steuerelement , den
Funktionsblock (dieser Block sendet einen Befehl zum Einschalten) und
injizieren Sie (im Rahmen dieses Artikels muss das Skript nur manuell aktiviert werden). Zum ersten Mal müssen Sie für
hb-Blöcke eine
PIN angeben und die Liste der Geräte aktualisieren. Dann können Sie die erforderlichen Blöcke hinzufügen:

Wenn Sie nun auf die Schaltfläche im
Injektionsblock klicken, sollte das
Licht aufleuchten. Neben
hb-contoll gibt es auch
hb-event-, hb-status- und hb-resume- Blöcke. Eine detaillierte Beschreibung der Blöcke finden Sie im offiziellen
Repository .
Funktionsblockcode var ret_msg={}; ret_msg.payload = {}; ret_msg.payload.On = true; return ret_msg;
Der
Funktionsblock dient zum Bearbeiten von Daten mithilfe von JavaScript-Funktionen. Der Block akzeptiert die Variable
msg zusammen mit dem
Payload- Parameter. Standardmäßig arbeiten die meisten Blöcke in Node-Red mit dem
Payload- Parameter.
Es lohnt sich, über den
Debug- Block zu sprechen. Mit ihm können Sie die Ausgabe der Blöcke sehen, damit Sie verstehen, was der Fehler ist, wenn Ihre Idee nicht funktioniert.
Lassen Sie uns nun etwas Interessantes tun, zum Beispiel den Lichtwechselzustand nach dem Drehen des
MagicCube um 90 Grad. In einem früheren
Artikel habe ich gezeigt, wie man mit Homebridge ZigBee-Geräte für Freunde findet. MagicCube wird wie andere ZigBee-Geräte nach dem Pairing im MQTT-Broker angezeigt.
Node-Red unterstützt das sofort einsatzbereite MQTT-Protokoll. Fügen Sie den MQTT-Block hinzu, geben Sie die Serveradresse und den Themenwürfel an.

Ein Würfel kann folgende Zustände übertragen:
schütteln, aufwachen, fallen, tippen, schieben, flip180, flip90, links drehen und rechts drehenFügen Sie einen
Schaltblock hinzu , um einen Status von einem anderen zu trennen. Definieren Sie
Flip90- ,
Shake- und
Tap- Bedingungen im
Schalter . Verbinden Sie den oberen Ausgang mit dem
hb-Status , um den aktuellen Status der Lampe zu erhalten. Der
hb- Statusblock wird durch Invertieren des Zustands
mit dem
Invert On Value- Block verbunden, und sein Ausgang wird mit dem
hb-Controller verbunden. Wenn der Würfel gedreht wird, ändert die Glühbirne den Ein / Aus-Zustand. Es sollte ungefähr so aussehen:

Bei Wertcode umkehren var ret_msg=msg; ret_msg.payload.On = !msg.payload.On; return ret_msg;
Flow kann von hier importiert werden:
Flow [ { "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" } ]
Somit ist es möglich, komplexe Automatisierungsschemata aus Blöcken zu „formen“. In der
Bibliothek finden Sie Module mit Blockgruppen für völlig unterschiedliche Aufgaben, z. B. zum Aufzeichnen von Videoüberwachungskameras oder zum Arbeiten mit Dateien von Kameras.
PS Gedanken laut:Ich bin von dem Gedanken verfolgt, dass viele, egal wie sich Technologien entwickeln, immer noch sehr weit von der banalen Automatisierung von Arbeits- und Lebensprozessen durch Programmierung entfernt sind. Ich hoffe wirklich, dass mit dem Aufkommen von Tools wie
Node-Red oder
Blockly die Eintrittsschwelle stark sinken wird. Nachdem die Leute gelernt haben, wie man ein System aus Cubes im selben Node-Red erstellt, werden sie wahrscheinlich zum
Funktionsblock gelangen und JS mit Interesse lernen, und dann wird alles von selbst passieren.