Flow

Node-RED Z-Wave Dashboard Flow

Das Entwicklungswerkzeug Node-RED in Zusammenspiel mit der Erweiterung node-red-contrib-openzwave für OpenZWave (entsprechende Hardware wie u.a. ein Z-Wave-Stick vorausgesetzt) bieten alles, um die Kommunikation mit Z-Wave-Geräten per Node-RED Ablaufmodellierungen vorzunehmen.

Die Verwendung ist dennoch nicht einfach. Für die Administration des Z-Wave Netzwerkes und Verwendung der Geräte muss man sich mit OpenZWave , der NodeJS-Implementierung und der Node-RED Erweiterung beschäftigen, ggf. Flows für die Administration des Netzwerkes erstellen und zur Einbindung in eigene Flows Mappings vornehmen und Werte zwischenspeichern.

Ziel dieses Flows ist es mit Hilfe des Dashboards die Administration und die Einbindung der Geräte in eigene Flows zu vereinfachen.

Funktionsumfang

  • Dashboard-Bereich zur Administration des Z-Wave Netzwerkes:
    – Knoten
    – Netzwerk heilen
    – Parameter
    – Assoziationen
  • Einfache Einbindung der Geräte in die eigenen Flows bzw. an die eigenen Dashboard-Komponenten:
    – Trigger
    – Kommandos
    – Statusabfrage
  • Steuerung über selbst definierte Geräte-IDs/Namen und Namen von Eigenschaften

Installation

  • Voraussetzungen:
    OpenZWave (getestet master vom 30.03.2020)
    Node-RED (getestet master vom 30.03.2020)
    Node-RED Erweiterung node-red-contrib-openzwave
    (getestet v1.6.2)
    Node-RED Erweiterung node-red-dashboard
    (getestet v2.19.4)
  • Flow herunterladen und in Node-RED importieren
  • Z-Wave Controller in allen zwave in und zwave out nodes konfigurieren (Standard: /dev/ttyACM0)
  • Ggf. Speicherpfad für die Geräte in den nodes Read und Save anpassen (Standard: /data/zwavedevices)

Download “Node-RED Z-Wave Dashboard Flow” node-red-z-wave-dashboard-flow_v0.3.2.txt – Downloaded 71 times – 49 KB

Erste Schritte – ein Beispiel

Als erstes fügen wir einen neuen Z-Wave Knoten hinzu – zum Beispiel einen Fibaro Wall Plug – also eine schaltbare Steckdose. Dazu wählen wir im Dashboard unter Wartung/Administration Z-Wave + KNOTEN. Es erscheint ein Hinweis, dass der Controller wartet. Nun haben wir 30 Sekunden Zeit, um die Inklusion des Gerätes vorzunehmen, wie das geht steht in der Anleitung des Z-Wave Gerätes – oft ist drei Mal der erste Schalter oder wie beim Wall Plug drei Mal ein kleiner Button zu drücken. Bei Erfolg erscheint eine Info mit Hinweis, welche Knoten-ID vergeben wurde.

Knoten hinzufügen – Controller wartet auf Inklusion

Der Wall Plug steuert nur ein Gerät – in diesem Beispiel die Leselampe. Dieses Gerät legen wir nun an, indem wir + GERÄT auswählen. Solange node-red läuft, wird die zuletzt hinzugefügte Knoten-ID automatisch übernommen. Die Instanz wird mit 1 vorbelegt und bei weiteren zu steuernden Geräten hochgezählt. Aus der Anleitung des Z-Wave Gerätes geht hervor, welche ID zu verwenden ist. Die Geräte-ID dient zur Steuerung in den eigenen Flows und kann selber vergeben werden – im Beispiel wählen wir den sprechenden Namen Leselampe, als Typ wählen wir Schalter.
Die Auswahlliste wird aktualisiert, wenn man den Aktualisierungsbutton betätigt.

Gerät “Leselampe” hinzufügen

Die Leselampe ist nun mit den Buttons TEST AN und TEST AUS schaltbar (unterstützt werden Schalter und Dimmer).

Doch wie binden wir dieses Gerät nun in einen eigenen Flow ein?

Als Trigger für Änderungen legen wir einen link in node an und verknüpfen diesen mit ZWave Changed. Dieser Trigger löst nun immer aus, wenn sich eine Eigenschaft eines Gerätes ändert, wie zum Beispiel der Status der Leselampe. Mit einem anschließenden switch node filtern wir das benötigte Topic – in diesem Fall interessiert und das Topic ZWave/Leselampe/Status. Nun schließen wir einen Dashboard switch node an, um den Status der Leselampe zu visualisieren.

Damit die Lampe beim Betätigen des Schalters auch schaltet, müssen wir ein entsprechendes Kommando mit dem Topic ZWave/Leselampe/Command und dem Payload true/false senden. Im Falle des Dashboard switch node können wir direkt im node das genannte Topic hinterlegen, der Payload ist automatisch true oder false. Es ist aber darauf zu achten, dass Pass through msg if payload matches new state deaktiviert ist und der Switch den input Status anzeigt.
Jetzt hängen wir an den switch node einfach ein link out node und verknüpfen es mit ZWave Command.

Nun zeigt der Button im Dashboard den Status der Leselampe an und wir können die Leselampe schalten.

Flow zur Anbindung eines Dashboard switch node
Switch node zur Filterung des Topics
Dashboard switch node Leselampe
[{"id":"1c038048.f5063","type":"ui_switch","z":"99ce1840.969668","name":"Leselampe","label":"Leselampe","tooltip":"","group":"f0c80162.ac94c","order":1,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"ZWave/Leselampe/Command","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","x":550,"y":200,"wires":[["cce90af8.e2dda8"]]},{"id":"acbd319b.6a939","type":"link in","z":"99ce1840.969668","name":"Leselampe","links":["8d9ed491.1791d8"],"x":275,"y":200,"wires":[["bd6d3fba.b4fc4"]]},{"id":"cce90af8.e2dda8","type":"link out","z":"99ce1840.969668","name":"Leselampe","links":["f30501d8.408aa"],"x":675,"y":200,"wires":[]},{"id":"bd6d3fba.b4fc4","type":"switch","z":"99ce1840.969668","name":"Topic","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"ZWave/Leselampe/Status","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":200,"wires":[["1c038048.f5063"]]},{"id":"f0c80162.ac94c","type":"ui_group","z":"","name":"Beispiele Z-Wave","tab":"82340d9c.c5d61","disp":true,"width":"6","collapse":true},{"id":"82340d9c.c5d61","type":"ui_tab","z":"","name":"Wartung","icon":"build","order":7,"disabled":false,"hidden":false}]

Wenn wir den Status der Lampe in einem Flow benötigen, können wir die globale Variable ZWave/Leselampe/Status abfragen.

Globale Variablen Leselampe

Hier noch ein Beispiel zu einem Dimmer Badezimmer, der per Dashboard bedienbar ist.

Flow zur Anbindung eines Dashboard slider node
[{"id":"c5182828.4fe588","type":"link in","z":"99ce1840.969668","name":"Badezimmer","links":["8d9ed491.1791d8"],"x":275,"y":260,"wires":[["956f4406.9d0b68"]]},{"id":"ee1684dc.3a5098","type":"link out","z":"99ce1840.969668","name":"Badezimmer","links":["f30501d8.408aa"],"x":675,"y":260,"wires":[]},{"id":"7860b6a7.63bf18","type":"ui_slider","z":"99ce1840.969668","name":"Badezimmer","label":"Badezimmer","tooltip":"","group":"f0c80162.ac94c","order":1,"width":0,"height":0,"passthru":false,"outs":"end","topic":"ZWave/Badezimmer/Command","min":0,"max":"100","step":"1","x":550,"y":260,"wires":[["ee1684dc.3a5098"]]},{"id":"956f4406.9d0b68","type":"switch","z":"99ce1840.969668","name":"Topic","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"ZWave/Badezimmer/Status","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":390,"y":260,"wires":[["7860b6a7.63bf18"]]},{"id":"f0c80162.ac94c","type":"ui_group","z":"","name":"Beispiele Z-Wave","tab":"82340d9c.c5d61","order":3,"disp":true,"width":"6","collapse":true},{"id":"82340d9c.c5d61","type":"ui_tab","z":"","name":"Wartung","icon":"build","order":7,"disabled":false,"hidden":false}]

Administration

Der Dashboard-Bereich zur Administration des Z-Wave Netzwerkes unterstützt mehrere Funktionen. Eine Kurzbeschreibung der jeweiligen Funktion erhält man, wenn man mit dem Mauszeiger über die Funktion fährt. Zu beachten sind grundsätzlich die Infofenster im Dashboard. Bei batteriebetriebenen Z-Wave Geräten ist zu beachten, dass diese erst antworten, wenn sich aufgeweckt werden (siehe entsprechende Anleitung des Gerätes).

  • + KNOTEN Fügt einen Knoten bzw. ein neues Z-Wave Gerät zum Z-Wave Netzwerk hinzu. Anschließend ist innerhalb von 30 Sekunden die Inklusion des neuen Gerätes durchzuführen. Dabei sollte sich das Gerät in der Nähe des Controllers / USB-Sticks befinden. In der Regel ist die Inklusion mit einem schnellen dreimaligen Auslösen des ersten Schalters oder eines hierfür vorgesehenden Knopfes durchzuführen. Näheres findet man in der Anleitung des Z-Wave Gerätes.
    (Z-Wave Funktion: addNode)
  • – KNOTEN Entfernt einen Knoten / ein Z-WAVE Gerät aus den Z-Wave Netzwerk. Der Vorgang ist analog + KNOTEN durchzuführen. Nach Möglichkeit sollte ein Gerät nicht einfach durch einseitiges Entfernen (Controller oder Z-Wave Gerät) durchgeführt werden.
    (Z-Wave Funktion: removeNode)
  • BEFEHL ABBRECHEN Beendet sämtliche auf dem Controller laufenden Befehle – bricht zum Beispiel den In-/Exklusionsmodus ab.
    (Z-Wave Funktion: cancelControllerCommand)
  • NETZWERK HEILEN Repariert das Z-Wave Netzwerk, wenn es nicht rund läuft. Sämtliche Z-Wave Geräte werden aufgefordert, die Nachbargeräte zu erkunden. Dieser Prozess sollte abgewartet werden und kann einige Zeit dauern.
    (Z-Wave Funktion: healNetwork)
  • INTERVALL? Liefert das Poll-Intervall für das Z-Wave Netzwerk zurück. Falls ein Z-Wave Gerät den Status nicht automatisch zurückliefert, können Statuslieferungen (Poll) je Instanz aktiviert werden. Die Poll-Anfragen finden im festgelegten Intervall statt.
    (Z-Wave Funktion: getPollInterval)
    Mit NEW lässt sich das Interfall neu festlegen.
    (Z-Wave Funktion: setPollInterval)
  • Gerät Über die Auswahlliste Gerät lassen sich die angelegten Geräte auswählen. Je Knoten und je Instanz, die gesteuert werden soll (ein Z-Wave Gerät kann mehrere Instanzen haben / mehrere Geräte steuern), sollte ein Gerät existieren. Welche Instanz verwendet werden muss, geht aus der Anleitung des Z-Wave Gerätes hervor. Die folgenden Funktionen beziehen sich jeweils auf den hier ausgewählten Knoten oder die Instanz.
    Über den Button Aktualisieren lässt sich die Liste aktualisieren, zum Beispiel wenn die Geräte-ID geändert wurde.
    + GERÄT fügt ein neues Gerät hinzu. Dieses ist anschließend zu konfigurieren. Vorbelegt ist die Knoten-ID des zuletzt hinzugefügten Knotens oder -1, falls nicht verfügbar.
    – GERÄT entfernt das ausgewählte Gerät, es folgt ein Bestätigungsfenster.
  • Knoten-ID, Instanz, Geräte-ID und Geräte-Typ Mit Hilfe dieser Felder lässt sich das ausgewählte Gerät konfigurieren. Jede Änderung wird automatisch gespeichert. Anschließend kann die Auswahlliste mit dem entsprechenden Button aktualisiert werden.
    Die Geräte-ID kann wie gewünscht (mit unsprechendem oder sprechendem Namen) vergeben werden. Sie wird für die Einbindung in die eigenen Flows verwendet.
    Eine Übersicht über die Geräte-Typen folgt im nächsten Abschnitt.
  • TEST AN / TEST AUS Dienen der Testschaltung der ausgewählten Instanz bzw. eines Schalters oder Dimmers.
    (Z-Wave Funktion: setValue)
  • Parameter? Liefert per Infofenster den Wert des angeforderten Parameters des Knotens. Die Parameter steuern das Verhalten des Z-Wave Gerätes (Tast-Schalter, Wechselschalter, Beleuchtung usw.) und gehen aus der jeweiligen Anleitung hervor.
    (Z-Wave Funktion: requestConfigParam)
    Mit NEW lässt sich der Wert eines Parameters ändern.
    (Z-Wave Funktion: setConfigParam)
  • ASSOZIATIONEN? Zwischen Z-Wave Geräten / Knoten können direkte Verbindungen ohne Zutun des Controllers erstellt. werden. Hierzu kann die Knoten-ID einer Gruppe eines anderen Knoten hinzugefügt werden. Die Gruppen gehen aus der Anleitung des jeweiligen Z-Wave Gerätes hervor. Gruppe 1 beinhaltet in der Regel nur einen Element nämlich den Controller mit der ID 1. Mit dieser Funktion lassen sich die hinterlegten Knoten der jeweiligen Gruppe abfragen.
    (Z-Wave Funktion: getAssociations)
    Mit + und lassen sich Knoten-IDs aus angegebenen Gruppen entfernen.
    (Z-Wave Funktionen: addAssociation / removeAssociation)
  • FEHLERHAFT? Es wird geprüft, ob der Controller bei dem Knoten einen Fehler vermutet.
    (Z-Wave Funktionen: hasNodeFailed)
    Mit lässt sich der Z-Wave Knoten hart entfernen. Dies sollte nur im Falle eines Fehlers passieren. Es erscheint eine Abfrage, ob dieser Vorgang wirklich durchgeführt werden soll.
    (Z-Wave Funktionen: removeFailedNode)
  • STATUSLIEFERUNGEN? Liefert zurück, ob regelmäßige Statuslieferungen (Poll) bei der Instanz aktiviert sind. In der Regel brauchen diese nicht aktiviert werden, da die Geräte automatisch informieren. Das Intervall kann für das Netzwerk mit der o.g. Funktion festgelegt werden.
    (Z-Wave Funktionen: isPolled)
    Mit + und können die Statuslieferungen aktiviert oder deaktiviert werden.
    (Z-Wave Funktionen: enablePoll / disablePoll)
  • STATUS Abruf der dynamischen Informationen des entsprechenden Knotens.
    (Z-Wave Funktionen: requestNodeState)
  • NEUANLAGE Aktualisierung des Knotens – der Knoten wird entfernt und wieder neu hinzugefügt, die Befehlsklassen und Funktionen des Knotens werden für OpenZWave neu abgerufen. In der Regel ist die Ausführung der Funktionen nicht notwendig. Auf jeden Fall sollte darauf gewartet werden, bis die entsprechende Funktion durchgelaufen ist.
    (Z-Wave Funktionen: refreshNodeInfo)

Link: OpenZWave Library: Funktionen mit Dokumentation und Parametern
Link: Node OpenZWave Shared: Unterstützte Funktionen

Gerätetypen

Geräte werden immer einem bestimmten Typ zugeordnet. Ein Typ zeichnet aus, ob die Eigenschaften als globale Variable gespeichert werden, welche Kommandos in welche sprechenden Namen gemappt (nicht jede Eigenschaft muss unterstützt werden) und wie ggf. Kommandos gesendet werden.

Typ

Speicherg.
(Globale
Variable)
Eigenschaften
(CmdClass-CmdIdx)
Kommandos
(CmdClass-
CmdIdx)
Werte*
(Payload)
Schalter
(Switch)
JaStatus (37-0)
Watt (49-4)
Kwh (50-0)
Cmd (37-0)

true/false
text
text
Dimmer
(Dimmer)
JaStatus (38-0)
Watt (49-4)
Kwh (50-0)
Cmd (38-0)

0-100
text
text
Melder
(Detector)
NeinBewegung (113-7)
Temperatur (49-1)
Licht (49-3)
Batterie (128-0)
text**
text
text
number
Fern-
bedieng.
(Remote)
NeinTaste1 (91-1)
Taste2 (91-2)
Taste3 (91-3)
Taste4 (91-4)
Taste5 (91-5)
Taste6 (91-6)
Batterie (128-0)
text***
text***
text***
text***
text***
text***
number
Kontakt
Schalter
(Sensor
Switch)
JaStatus (48-0)true/false
Kontakt
Melder
(Sensor
Detector)
NeinStatus (48-0)true/false

* msg.currState, kann je nach Gerät auch anders belegt sein
** Fibaro Motion Sensor: “Motion Detected at Unknown Location”, “Clear”, “Tampering – Cover Removed”
*** Fibaro KeyFob: “Pressed 1 Time”, “Key Held down”, “Key Released”, “Inactive”

Link: OpenZWave Command Classes

Falls die Z-Wave Geräte andere Eigenschaften setzen und weitere Eigenschaften benötigt werden, sind die Typen oder Eigenschaften entsprechend zu ergänzen.

Einbindung in eigene Flows

Relevant für die Einbindung von Geräten in die eigenen Flows sind das Topic (mgs.topic) und Payload (msg.payload).

Am Topic ist ersichtlich, bei welchem Gerät und welcher Eigenschaft sich der Wert geändert hat.

ZWave/Geräte-ID/Eigenschaft

Mit dem entsprechenden Topic kann ein Status geändert werden (Schalter/Dimmer):

ZWave/Geräte-ID/Command

In Payload steht der entsprechende Wert (ursprünglich msg.currValue).

msg beinhaltet weitere Informationen, die für die Steuerung interessant sein können. msg.label beinhaltet in der Regel die Einheit, msg.changed, ob sich der Wert geändert hat. Hier ein Beispiel:

{
     "topic": "ZWave/Leselampe/Watt",
     "payload": "8.2",
     "_msgid": "eeac8c8d.67cb1",
     "nodeid": 52,
     "cmdclass": 49,
     "cmdidx": 4,
     "instance": 1,
     "units": "Watt",
     "label": "Power",
     "changed": true,
     "type": "Switch",
     "devicename": "Leselampe",
     "property": "Watt",
     "_event": "node:8d9ed491.1791d8"
 }

Wie aus dem oben aufgeführten Beispiel hervorgeht, können mit Hilfe der Nodes link in und link out, die entsprechend mit den ZWave Admin Links verknüpft werden, die Flows an die Geräte angebunden werden.
Nach einem link in Node ist es sinnvoll, das benötigte Topic mit einem switch node herauszufiltern.
Ist das Payload ein Text, ist in der Regel ein zweites switch node als Payload-Filter sinnvoll – insbesondere, weil neben den Wertänderungen (value changed) auch beim Start die Werte zur Initialisierung der Oberfläche (value added) gesendet werden. So könnte zum Beispiel ohne Payload Filterung beim Start eine Funktion ausgelöst werden, die eigentlich bei einem Tastendruck ausgelöst werden soll, oder ein zweites Mal ausgelöst wird, wenn die Taste losgelassen wird.

Beispiel Fibaro Fernbedienung – zwei Filter (switch node):
msg.topic == “ZWave/Fernbedienung/Taste1”
msg.payload == “Pressed 1 Time”

[{"id":"96a7819.891368","type":"link in","z":"c549ab9c.91a218","name":"Fernbedienung","links":["8d9ed491.1791d8"],"x":175,"y":2380,"wires":[["c9332916.2c7998"]]},{"id":"c9332916.2c7998","type":"switch","z":"c549ab9c.91a218","name":"Topic","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"ZWave/Fernbedienung/Taste1","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":290,"y":2380,"wires":[["289f5ebf.7a8782"]]},{"id":"289f5ebf.7a8782","type":"switch","z":"c549ab9c.91a218","name":"Filter","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Pressed 1 Time","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":430,"y":2380,"wires":[[]]}]

Benötigt man innerhalb eines Flow den Status eines Gerätes, so kann die entsprechende globale Variable abgefragt werden:

ZWave/Geräte-ID/Eigenschaft

Aus der oben aufgeführten Tabelle zu den Gerätetypen geht hervor, welche Eigenschaften von einem Z-Wave Gerät maximal berücksichtigt werden / verwendet werden können und welche Werte in globalen Variablen gespeichert werden.

One thought on “Node-RED Z-Wave Dashboard Flow”

  1. Hallo,

    eine sehr gute Einführung in Node Red und Z Wave. Ich habe gerade begonnen mit FHEM und Z Wave und habe da so meine Probleme.
    Ist es möglich die komplette Steuerung des Z Wave Netzes mit Node Red durchzuführen. Ziel ist eine “Alarmanlage” mit Fibaro Bewegungsmelder sowie Sensativ Tür und Fenster Strips zu bauen.

Leave a Reply

Your email address will not be published.