Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:node-red

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
howto:node-red [2017/04/10 19:27] – vorausetzung PS aktiv jauhowto:node-red [2018/12/04 16:28] – API: GET data erstellt jau
Zeile 1: Zeile 1:
 ====== Node-RED ====== ====== Node-RED ======
-//Beschreibung//\\ +[[https://nodered.org/|Node-RED]] ist ein Programmiertool dessen Editor per Browser aufgerufen werden kann. Er bietet eine einfache Möglichkeit über Knotenpunkte (nodes) Datenflüsse (flows) zu erstellen.\\ 
-[[https://nodered.org/]]+Seine schlanke Runtime-Umgebung, basierend auf [[https://de.wikipedia.org/wiki/Node.js|Node.js]], läuft auch auf kleiner Hardware (Rpi) wunderbar.
  
 ===== Installation ===== ===== Installation =====
-Node-RED ist auf dem VZ-Raspberry-Image nicht vorinstalliert. Die folgende Beschreibung orientiert sich an der [[https://nodered.org/docs/hardware/raspberrypi|englischen Originalanleitung]].+Node-RED ist auf dem VZ-RaspberryPi-Image nicht vorinstalliert. Die folgende Beschreibung orientiert sich an der [[https://nodered.org/docs/hardware/raspberrypi|englischen Originalanleitung]].
  
 <code> <code>
-sudo apt-get install build-essential python-rpi.gpio+sudo apt-get install build-essential python-rpi.gpio sense-hat
 bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered) bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
 </code> </code>
  
 +==== Hintergrunddienst ====
 Um Node-RED als Hintergrunddienst einzurichten folgende Befehle nacheinander ausführen: Um Node-RED als Hintergrunddienst einzurichten folgende Befehle nacheinander ausführen:
 <code> <code>
Zeile 24: Zeile 25:
 Um den Dienst beim Boot automatisch zu starten: Um den Dienst beim Boot automatisch zu starten:
 <code>sudo systemctl enable nodered.service</code> <code>sudo systemctl enable nodered.service</code>
 +
 +==== Volkszaehler nodes ====
 +Es gibt ein paar vorgefertigte nodes für komplexere Abfragen. Zu finden bei [[http://github.com/andig/node-red-contrib-volkszaehler|github]]. Um sie in Node-RED einzubinden sind folgende Befehle an der Konsole einzugeben:
 +<code>
 +cd ~
 +git clone git://github.com/andig/node-red-contrib-volkszaehler
 +cd ~/.node-red
 +npm ~/install node-red-contrib-volkszaehler/
 +node-red-stop
 +node-red-start
 +</code>
  
 ===== Editor ===== ===== Editor =====
Zeile 29: Zeile 41:
 <code>http://IP_des_Rpi:1880/</code> <code>http://IP_des_Rpi:1880/</code>
  
-//paar Worte zum Import//+Einen Flow importiert man indem man den gewünschten Code in der Zwischenablage kopiert. Dann im Editor oben rechts das Menu (3 Querbalken) öffnen, Import, Clipboard. Den Code ins Fenster einfügen und darunter auswählen ob man die nodes im aktuell offenen oder in einen neuen flow einfügen möchte. Mit Import abschließen.\\ 
 +Um die Änderung zu übernehmen die, nun rote, Schaltfläche Deploy betätigen.
  
 ---- ----
 ===== Anbindung ===== ===== Anbindung =====
 Es gibt diverse Möglichkeiten ein- und ausgehende Daten zwischen Volkszähler und Node-RED auszutauschen. Es gibt diverse Möglichkeiten ein- und ausgehende Daten zwischen Volkszähler und Node-RED auszutauschen.
 +  * [[howto:node-red#push-server_empfangen|vzlogger -> Push-Server -> NodeRED]]
 +  * [[howto:node-red#push-server_senden|NodeRED -> Push-Server]]
 +  * [[howto:node-red#vzlogger_empfangen|vzlogger -> NodeRED]]
 +  * [[howto:node-red#apipost_data|NodeRED -> Middleware]]
 +  * [[howto:node-red#apiget_data|Middleware -> NodeRED]]
  
-==== Push-Server ====+==== Push-Server einrichten ====
 Für Echtzeitdaten eignet sich zum Beispiel der [[software/middleware/push-server|Push-Server]] als Datenquelle. Zählerstände und Impulseingänge werden in Leistung umgerechnet. Es werden nur Kanäle ausgeliefert die in der Middleware angelegt sind. Parallelbetrieb mit Push fürs Frontend ist möglich. Für Echtzeitdaten eignet sich zum Beispiel der [[software/middleware/push-server|Push-Server]] als Datenquelle. Zählerstände und Impulseingänge werden in Leistung umgerechnet. Es werden nur Kanäle ausgeliefert die in der Middleware angelegt sind. Parallelbetrieb mit Push fürs Frontend ist möglich.
  
Zeile 45: Zeile 63:
 Danach den Push-Server neu starten: Danach den Push-Server neu starten:
 <code>sudo systemctl stop push-server <code>sudo systemctl stop push-server
-sudo systemctl start push-Server</code> +sudo systemctl start push-server</code>
-In Node-RED wird ein websocket-Eingang angelegt.+
  
-// code für Import //+==== Push-Server empfangen ==== 
 +Zum Empfang der Daten wird der PS [[howto/node-red#push-server_einrichten|wie oben beschrieben]] eingerichtet und in Node-RED ein websocket-Eingang angelegt. 
 +{{ :howto:node-red_pushserver.jpg?500|}}
  
-==== vzlogger ==== +<code | flow> 
-Die Echtzeitdaten des [[software/controller/vzlogger|vzloggers]] können auch direkt an Node-RED übergeben werden. Es werden für alle //channel// (auch //api: "none"//) die Rohdaten (Zählerstände, Impulse) ausgegeben.\\ +
-//parllelbetrieb PS?//+    { 
 +        "id": "31759474.59a6dc", 
 +        "type": "tab", 
 +        "label": "VZ Push-Server" 
 +    }, 
 +    { 
 +        "id": "43923f89.899bf", 
 +        "type": "websocket in", 
 +        "z": "31759474.59a6dc", 
 +        "name": "", 
 +        "server": "", 
 +        "client": "aa8ae771.f85958", 
 +        "x": 170, 
 +        "y": 68, 
 +        "wires":
 +            [ 
 +                "cf50a51e.ba8148" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "cf50a51e.ba8148", 
 +        "type": "debug", 
 +        "z": "31759474.59a6dc", 
 +        "name": "", 
 +        "active": true, 
 +        "console": "false", 
 +        "complete": "false", 
 +        "x": 448.88888888888886, 
 +        "y": 66.66666666666667, 
 +        "wires": [] 
 +    }, 
 +    { 
 +        "id": "aa8ae771.f85958", 
 +        "type": "websocket-client", 
 +        "z": "", 
 +        "path": "ws://127.0.0.1:8082/socket", 
 +        "wholemsg": "false" 
 +    } 
 +
 +</code> 
 + 
 +==== Push-Server senden ==== 
 +Man kann auch Messwerte / Daten von Node-RED an den Push-Server übermitteln, dazu muss im flow eine json message aufgebaut und versendet werden. [[howto/node-red#push-server_einrichten|Den PS wie oben beschrieben einrichten.]] 
 +<code | json message>{"data":[{"uuid":"2e56fe60-e265-11e6-8bbc-a77e71764858","tuples":[[1493509724073, 5]]}]}</code> 
 +Port und URL entsprechen der Standard-Konfiguration. 
 +<code>http://raspberrypi:5582</code> 
 +{{ :howto:vz_push_data_api.png?500|}} 
 + 
 +<code | flow> 
 +
 +    { 
 +        "id": "a52bdd79.748458", 
 +        "type": "tab", 
 +        "label": "VZ PUSH API" 
 +    }, 
 +    { 
 +        "id": "a2f3574c.06053", 
 +        "type": "inject", 
 +        "z": "a52bdd79.748458", 
 +        "name": "inject payload", 
 +        "topic": "", 
 +        "payload": "5", 
 +        "payloadType": "str", 
 +        "repeat": "", 
 +        "crontab": "", 
 +        "once": false, 
 +        "x": 130, 
 +        "y": 60, 
 +        "wires":
 +            [ 
 +                "45bf027.c2e227c" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "dc5ea65a.931598", 
 +        "type": "http request", 
 +        "z": "a52bdd79.748458", 
 +        "name": "volkszaehler push", 
 +        "method": "POST", 
 +        "ret": "obj", 
 +        "url": "http://raspberrypi:5582", 
 +        "tls": "", 
 +        "x": 250, 
 +        "y": 180, 
 +        "wires":
 +            [ 
 +                "22152e74.71cf62" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "22152e74.71cf62", 
 +        "type": "debug", 
 +        "z": "a52bdd79.748458", 
 +        "name": "", 
 +        "active": true, 
 +        "console": "false", 
 +        "complete": "true", 
 +        "x": 410, 
 +        "y": 180, 
 +        "wires": [] 
 +    }, 
 +    { 
 +        "id": "f576d4aa.c8506", 
 +        "type": "json", 
 +        "z": "a52bdd79.748458", 
 +        "name": "", 
 +        "x": 310, 
 +        "y": 120, 
 +        "wires":
 +            [ 
 +                "dc5ea65a.931598" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "45bf027.c2e227c", 
 +        "type": "change", 
 +        "z": "a52bdd79.748458", 
 +        "name": "set uuid / timestamp", 
 +        "rules":
 +            { 
 +                "t": "set", 
 +                "p": "uuid", 
 +                "pt": "msg", 
 +                "to": "2e56fe60-e265-11e6-8bbc-a77e71764858", 
 +                "tot": "str" 
 +            }, 
 +            { 
 +                "t": "set", 
 +                "p": "timestamp", 
 +                "pt": "msg", 
 +                "to": "", 
 +                "tot": "date" 
 +            } 
 +        ], 
 +        "action": "", 
 +        "property": "", 
 +        "from": "", 
 +        "to": "", 
 +        "reg": false, 
 +        "x": 340, 
 +        "y": 60, 
 +        "wires":
 +            [ 
 +                "27e38142.be7c6e" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "27e38142.be7c6e", 
 +        "type": "template", 
 +        "z": "a52bdd79.748458", 
 +        "name": "push data", 
 +        "field": "payload", 
 +        "fieldType": "msg", 
 +        "format": "json", 
 +        "syntax": "mustache", 
 +        "template": "{\"data\":[{\"uuid\":\"{{uuid}}\",\"tuples\":[[{{timestamp}}, {{payload}}]]}]}", 
 +        "x": 180, 
 +        "y": 120, 
 +        "wires":
 +            [ 
 +                "f576d4aa.c8506" 
 +            ] 
 +        ] 
 +    } 
 +
 +</code> 
 + 
 +==== vzlogger empfangen ==== 
 +{{ :howto:node-red_vzlogger.jpg?500|}} 
 +Die Echtzeitdaten des [[software/controller/vzlogger|vzloggers]] können auch direkt an Node-RED übergeben werden. Es werden für alle //channel// (auch //"api": "null"//) die Rohdaten (Zählerstände, Impulse) ausgegeben.\\
  
 Dazu die vzlogger.conf erweitern: Dazu die vzlogger.conf erweitern:
Zeile 108: Zeile 301:
 </code> </code>
  
-==== VZ-API ====+==== API: POST data ==== 
 +Um Messwerte / Daten von Node-RED an die Middleware zu übermitteln muss die URL entprechend (siehe [[/development/api/reference]]) aufgebaut werden. 
 +<code>http://raspberrypi/middleware.php/data/{{uuid}}.json?ts={{timestamp}}&value={{payload}}</code> 
 +{{ :howto:vz_post_data_api.png?500|}} 
 +<code | flow> 
 +
 +    { 
 +        "id": "21388036.bc1008", 
 +        "type": "tab", 
 +        "label": "VZ POST DATA API" 
 +    }, 
 +    { 
 +        "id": "79f9406a.27692", 
 +        "type": "http request", 
 +        "z": "21388036.bc1008", 
 +        "name": "volkszaehler post", 
 +        "method": "POST", 
 +        "ret": "obj", 
 +        "url": "", 
 +        "tls": "", 
 +        "x": 290, 
 +        "y": 180, 
 +        "wires":
 +            [ 
 +                "e53a25c.9e06ed8" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "d2b54935.931dc8", 
 +        "type": "template", 
 +        "z": "21388036.bc1008", 
 +        "name": "post data url", 
 +        "field": "url", 
 +        "fieldType": "msg", 
 +        "format": "handlebars", 
 +        "syntax": "mustache", 
 +        "template": "http://raspberrypi/middleware.php/data/{{uuid}}.json?ts={{timestamp}}&value={{payload}}", 
 +        "x": 190, 
 +        "y": 120, 
 +        "wires":
 +            [ 
 +                "1b77eb63.f8877d" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "849e6d1b.13cc6", 
 +        "type": "json", 
 +        "z": "21388036.bc1008", 
 +        "name": "", 
 +        "x": 530, 
 +        "y": 120, 
 +        "wires":
 +            [ 
 +                "79f9406a.27692" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "e53a25c.9e06ed8", 
 +        "type": "debug", 
 +        "z": "21388036.bc1008", 
 +        "name": "post response", 
 +        "active": false, 
 +        "console": "false", 
 +        "complete": "true", 
 +        "x": 480, 
 +        "y": 180, 
 +        "wires": [] 
 +    }, 
 +    { 
 +        "id": "1b77eb63.f8877d", 
 +        "type": "change", 
 +        "z": "21388036.bc1008", 
 +        "name": "", 
 +        "rules":
 +            { 
 +                "t": "delete", 
 +                "p": "payload", 
 +                "pt": "msg" 
 +            } 
 +        ], 
 +        "action": "", 
 +        "property": "", 
 +        "from": "", 
 +        "to": "", 
 +        "reg": false, 
 +        "x": 370, 
 +        "y": 120, 
 +        "wires":
 +            [ 
 +                "849e6d1b.13cc6" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "1bb3941d.e36834", 
 +        "type": "inject", 
 +        "z": "21388036.bc1008", 
 +        "name": "inject payload", 
 +        "topic": "", 
 +        "payload": "6", 
 +        "payloadType": "str", 
 +        "repeat": "", 
 +        "crontab": "", 
 +        "once": false, 
 +        "x": 130, 
 +        "y": 60, 
 +        "wires":
 +            [ 
 +                "9546ba4c.706278" 
 +            ] 
 +        ] 
 +    }, 
 +    { 
 +        "id": "9546ba4c.706278", 
 +        "type": "change", 
 +        "z": "21388036.bc1008", 
 +        "name": "set uuid / timestamp", 
 +        "rules":
 +            { 
 +                "t": "set", 
 +                "p": "uuid", 
 +                "pt": "msg", 
 +                "to": "2e56fe60-e265-11e6-8bbc-a77e71764858", 
 +                "tot": "str" 
 +            }, 
 +            { 
 +                "t": "set", 
 +                "p": "timestamp", 
 +                "pt": "msg", 
 +                "to": "", 
 +                "tot": "date" 
 +            } 
 +        ], 
 +        "action": "", 
 +        "property": "", 
 +        "from": "", 
 +        "to": "", 
 +        "reg": false, 
 +        "x": 340, 
 +        "y": 60, 
 +        "wires":
 +            [ 
 +                "d2b54935.931dc8" 
 +            ] 
 +        ] 
 +    } 
 +
 +</code>
  
-----+==== API: GET data ==== 
 +Um Parameter / Daten aus Node-RED von der Middleware zu erhalten können wir auf die [[/howto/node-red#volkszaehler_nodes|fertigen VZ-nodes]] zurück greifen.
  
 +{{ :howto:node-red_get_api.jpg?500|}}
 +<code | flow>
 +[
 +    {
 +        "id": "de7c28c5.414368",
 +        "type": "uri",
 +        "z": "815188ba.c35718",
 +        "name": "",
 +        "middleware": "792445ef.949aec",
 +        "context": "data",
 +        "format": "json",
 +        "x": 158,
 +        "y": 171,
 +        "wires": [
 +            [
 +                "4af40d51.a7c234"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "8911848d.d34a38",
 +        "type": "inject",
 +        "z": "815188ba.c35718",
 +        "name": "",
 +        "topic": "",
 +        "payload": "true",
 +        "payloadType": "bool",
 +        "repeat": "",
 +        "crontab": "",
 +        "once": false,
 +        "onceDelay": 0.1,
 +        "x": 104,
 +        "y": 78,
 +        "wires": [
 +            [
 +                "e6c60ef.b5cfdf"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "e6c60ef.b5cfdf",
 +        "type": "template",
 +        "z": "815188ba.c35718",
 +        "name": "UUID",
 +        "field": "uuid",
 +        "fieldType": "msg",
 +        "format": "handlebars",
 +        "syntax": "plain",
 +        "template": "c673b290-fdac-11e0-a470-1d9351203a00",
 +        "output": "str",
 +        "x": 247,
 +        "y": 79,
 +        "wires": [
 +            [
 +                "de7c28c5.414368"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "4af40d51.a7c234",
 +        "type": "http request",
 +        "z": "815188ba.c35718",
 +        "name": "",
 +        "method": "GET",
 +        "ret": "txt",
 +        "url": "",
 +        "x": 340,
 +        "y": 172,
 +        "wires": [
 +            [
 +                "69c762a4.50c69c"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "69c762a4.50c69c",
 +        "type": "debug",
 +        "z": "815188ba.c35718",
 +        "name": "",
 +        "active": true,
 +        "tosidebar": true,
 +        "console": false,
 +        "tostatus": false,
 +        "complete": "false",
 +        "x": 305,
 +        "y": 255,
 +        "wires": []
 +    },
 +    {
 +        "id": "792445ef.949aec",
 +        "type": "middleware",
 +        "z": "",
 +        "middleware": "https://demo.volkszaehler.org/middleware.php"
 +    }
 +]
 +</code>
 +
 +----
 ===== Beispielanwendungen ===== ===== Beispielanwendungen =====
 +
 +==== Heizungssystem über eBus auslesen ====
 +EBus ist ein serieller Bus der beispielsweise von Vaillant verwendet wird. Er kann mit passender Hardware gelesen werden um z.B. Temperaturwerte einer Therme zu loggen.
 +  * Hardware als [[https://wiki.fhem.de/wiki/EBUS|Bausatz]] oder [[https://www.eservice-online.de/shop/ebus/135/1-wire-hub-platine|Fertiglösung]]
 +  * [[https://github.com/john30/ebusd|eBUS daemon]] zum Auswerten des Protokolls.
 +  * [[https://github.com/john30/ebusd/issues/58|Konfiguration und Beispiel]] für Node-RED.
 +  * Das Zusatpaket [[https://flows.nodered.org/node/node-red-contrib-ui|node-red-contrib-ui]] ist erforderlich.
 +
 +==== Temperatur / Lufteuchtigkeit mit ESP8266 per MQTT ====
 +Verschiedene Temperatur / Luftfeuchte Sensoren können am ESP8266 angeschlossen werden. Die Messwerte werden per MQTT verteilt.
 +Node-RED empfängt die Messwerte und sendet diese an den Volkszaehler.
 +  * [[https://github.com/nuccleon/homie-dht|ESP8266 Sensor Node]] (Arduno Sketch)
 +  * [[https://gist.github.com/nuccleon/108d9656ee4375fc95cfc0e9cd1eab0b|Node-RED Beispiel]]
  
 ==== InfluxDB per MQTT ==== ==== InfluxDB per MQTT ====
Zeile 118: Zeile 573:
 [[http://flows.nodered.org/flow/dc9754a796fac49c918ab5a94f0af58a|Node-RED Library: Push Volkszaehler Readings to Influxdb via MQTT]] [[http://flows.nodered.org/flow/dc9754a796fac49c918ab5a94f0af58a|Node-RED Library: Push Volkszaehler Readings to Influxdb via MQTT]]
  
 +==== Stromzähler per Modbus auslesen ====
 +Beispiel für [[/hardware/channels/meters/power/eastron_sdm630_modbus|Eastron SDM630]]:\\
 +[[https://flows.nodered.org/flow/eb051b360f09c315ac961f85b94a0c05|Node-RED Library: SDM630 Modbus Gateway - Starter Kit]]
howto/node-red.txt · Zuletzt geändert: 2023/07/07 21:11 von jau