Darstellung
Node-RED
Flows mit dem Node-RED-Plugin node-red-contrib-nomos
Auf jedem Controller ist Node-RED mit dem Plugin node-red-contrib-nomos vorinstalliert. Das Plugin bringt Nodes für Komponenten, Szenen, Automationen und für jeden Aufruf der API mit. Wie Sie Node-RED auf dem Controller öffnen und wer sich anmelden darf, beschreibt Node-RED im Integratoren-Handbuch.
Versionen
- Seit Version 3.1.0 läuft auf dem Controller Node-RED 5.0.7. Welche Version des Plugins installiert ist, zeigt Node-RED unter „Palette verwalten“.
- Ab Plugin-Version 1.5.3 braucht das Plugin einen Controller ab Version 2.8.2.
- Die aktuelle Version des Plugins steht auf npm.
Verbindung zum Controller
Alle Nodes laufen über einen Konfigurations-Node vom Typ nomos-hub. Auf dem Controller ist er bereits angelegt und zeigt auf den Controller selbst (127.0.0.1, Port 80).
Sie können das Plugin auch in einem eigenen Node-RED installieren, etwa auf einem Server neben dem Controller:
bash
cd ~/.node-red
npm install node-red-contrib-nomosIm nomos-hub tragen Sie dann Adresse und Port des Controllers sowie Benutzername und Kennwort eines nomos Kontos ein. Das Plugin verbindet sich per Socket.io über HTTP, nicht über HTTPS; betreiben Sie es deshalb nur im eigenen Netz. Die Flows arbeiten mit den Rechten dieses Kontos. Legen Sie dafür einen eigenen Benutzer mit so wenig Rechten wie möglich an, siehe Empfehlung.
Nodes
Komponenten: Für häufige Properties gibt es eigene Nodes wie state, level, position oder setpoint; der Node component erreicht jede Property jeder Komponente. Ein Komponenten-Node hat einen Eingang und drei Ausgänge:
Inhalt von msg.payload | |
|---|---|
| Eingang | Wert, der gesetzt wird, zum Beispiel true |
| Ausgang 1 | true, wenn das Setzen fehlgeschlagen ist, sonst false |
| Ausgang 2 | jede Änderung als Objekt mit cid, property, value und content |
| Ausgang 3 | nur der neue Wert |
Weitere Objekte: Die Nodes scene, event, timer und notificationprofile lösen Szenen, Automationen, Timer und Benachrichtigungsprofile aus oder reagieren darauf.
API: Für jeden Aufruf der API gibt es einen eigenen Node, erzeugt aus derselben Beschreibung wie die API-Referenz. Die Parameter kommen als Objekt in msg.payload. Ausgang 1 liefert die Antwort, Ausgang 2 einen Fehler mit errorCode und errorText.
Gesperrte Funktionen
Ein Flow läuft unbeaufsichtigt und oft mit weitreichenden Rechten. Deshalb fehlen manche Aufrufe bewusst als Node:
- Anmeldung und das eigene Konto, etwa
auth,logoutodersetOwnUserPassword - Tokens und Zugangsdaten, etwa die MCP-Tokens oder Schlüssel und Zugänge von Integrationen
- Benutzer und Rechte anlegen, ändern oder löschen
- Fernzugriff, VPN, Cloud und Portweiterleitungen
- der Zustand des Systems: Neustart, Software-Update, Zurücksetzen, Netzwerk, Wiederherstellen einer Sicherung
- das Koppeln anderer Controller und Zugriffe auf sie
- die Inbetriebnahme von KNX-Geräten und die Einrichtung von Gateways, die einmalige Zugänge verbrauchen
- Fortschrittsmeldungen, die nur der Konfigurationsoberfläche dienen
Brauchen Sie einen dieser Aufrufe, verwenden Sie die Socket.io- oder HTTP-API mit einem passenden Konto.
Beispiel-Flow
Der Flow schaltet ein Gerät per Knopfdruck ein und aus und zeigt jeden neuen Zustand im Debug-Fenster. Ein zweiter Zweig fragt die Version des Controllers ab.
json
[
{"id":"a1","type":"inject","name":"On","props":[{"p":"payload"}],"payload":"true","payloadType":"bool","wires":[["a3"]]},
{"id":"a2","type":"inject","name":"Off","props":[{"p":"payload"}],"payload":"false","payloadType":"bool","wires":[["a3"]]},
{"id":"a3","type":"nomos-state","config":"","cid":"","name":"","topic":"","filter":false,"wires":[["a4"],[],["a5"]]},
{"id":"a4","type":"debug","name":"Control error","active":true,"complete":"payload","wires":[]},
{"id":"a5","type":"debug","name":"State","active":true,"complete":"payload","wires":[]},
{"id":"b1","type":"inject","name":"","props":[{"p":"payload"}],"payload":"","payloadType":"date","wires":[["b2"]]},
{"id":"b2","type":"nomosapi-getversion","config":"","name":"","topic":"","filter":false,"wires":[["b3"],["b3"]]},
{"id":"b3","type":"debug","name":"getVersion","active":true,"complete":"payload","wires":[]}
]Importieren Sie den Flow über „Import“ im Menü. Wählen Sie danach im State-Node und im getVersion-Node den Controller und im State-Node die Komponente aus und klicken Sie auf „Übernahme (deploy)“.
Ein Klick auf „On“ und danach auf „Off“ zeigt im Debug-Fenster:
Control error: false
State: true
Control error: false
State: falseEin Klick auf den dritten Inject-Node liefert die Version:
getVersion: { api: "0.3.41", ncd: "1.15", engine: "1.2.2" }