Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
howto:node-red [2017/05/13 14:05] – typo jau | howto:node-red [2023/07/07 21:11] (aktuell) – [Volkszaehler nodes] Installation nicht aus dem git jau |
---|
<code> | <code> |
sudo apt-get install build-essential python-rpi.gpio sense-hat | 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/linux-installers/master/deb/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> |
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 [[https://flows.nodered.org/node/node-red-contrib-volkszaehler|Node-Red in der Library]] und [[http://github.com/andig/node-red-contrib-volkszaehler|github]]. Um sie in Node-RED einzubinden sind nacheinander folgende Befehle an der Konsole einzugeben: |
| <code> |
| npm install node-red-contrib-volkszaehler |
| node-red-stop |
| node-red-start |
| </code> |
| |
===== Editor ===== | ===== Editor ===== |
===== 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. |
| |
Der Push-Server muss, wie in der [[software/middleware/push-server#konfiguration|Anleitung]] beschrieben in Betrieb genommen werden. Die zusätzliche websocket-Ausgabe aktiviert man indem die vorhandene Zeile in der volkszaehler.conf.php geändert wird: | Seit Version 2.0 ist der Push-Server ab Haus aktiviert. In älteren Versionen muss er, wie in der [[software/middleware/push-server#konfiguration|Anleitung]] beschrieben, in Betrieb genommen werden. Die zusätzliche websocket-Ausgabe aktiviert man indem die vorhandene Zeile in der volkszaehler.conf.php geändert wird: |
<code>sudo nano /var/www/volkszaehler.org/etc/volkszaehler.conf.php</code> | <code>sudo nano /var/www/volkszaehler.org/etc/volkszaehler.conf.php</code> |
<code | volkszaehler.conf.php> | <code | volkszaehler.conf.php> |
</code> | </code> |
Danach den Push-Server neu starten: | Danach den Push-Server neu starten: |
<code>sudo systemctl stop push-server | <code>sudo systemctl restart push-server</code> |
sudo systemctl start push-server</code> | |
| Und die Konfiguration des [[https://wiki.volkszaehler.org/software/middleware/push-server#vzlogger|vzlogger]] prüfen, ggf. nachbessern. |
| |
=== empfangen === | ==== Push-Server empfangen ==== |
Zum Empfang der Daten wird in Node-RED ein websocket-Eingang angelegt. | 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?400|}} | {{ :howto:node-red_pushserver.jpg?500|}} |
| |
<code | flow> | <code | flow> |
</code> | </code> |
| |
=== senden === | ==== 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. | 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> | <code | json message>{"data":[{"uuid":"2e56fe60-e265-11e6-8bbc-a77e71764858","tuples":[[1493509724073, 5]]}]}</code> |
Port und URL entsprechen der Standard-Konfiguration. | Port und URL entsprechen der Standard-Konfiguration. |
</code> | </code> |
| |
==== vzlogger ==== | ==== vzlogger empfangen ==== |
{{ :howto:node-red_vzlogger.jpg?400|}} | {{ :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: "none"//) die Rohdaten (Zählerstände, Impulse) ausgegeben.\\ | 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.\\ |
//parllelbetrieb PS?// | |
| |
Dazu die vzlogger.conf erweitern: | Dazu die vzlogger.conf erweitern: |
<code>sudo nano /ect/vzlogger.conf</code> | <code>sudo nano /etc/vzlogger.conf</code> |
<code | vzlogger.conf> | <code | vzlogger.conf> |
"push": [ | "push": [ |
</code> | </code> |
| |
==== VZ-API ==== | ==== API: POST data ==== |
| |
=== POST data === | |
Um Messwerte / Daten von Node-RED an die Middleware zu übermitteln muss die URL entprechend (siehe [[/development/api/reference]]) aufgebaut werden. | 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> | <code>http://raspberrypi/middleware.php/data/{{uuid}}.json?ts={{timestamp}}&value={{payload}}</code> |
</code> | </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 ===== |
| |
| ==== TP-Link HS110 ==== |
| Die [[https://www.tp-link.com/de/home-networking/smart-plug/hs110/|HS110 von TP-Link]] ist eine Funksteckdose mit WLAN, Schaltaktor und Leistungsmessung. Man kann sie wowohl steuern als auch auslesen.\\ |
| Zur Konfiguration ist leider die Kasa-App nötig, man kommt aber auch [[https://www.tp-link.com/de/support/faq/2437/|ohne die Cloud]] zurecht.\\ |
| [[https://www.photovoltaikforum.com/thread/173831-shelly-plus-1pm-mit-volkszähler-verbinden/?postID=2618376#post2618376]] |
| |
==== Heizungssystem über eBus auslesen ==== | ==== 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. | 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]] | * 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 deamon]] zum Auswerten des Protokolls. | * [[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. | * [[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. | * Das Zusatpaket [[https://flows.nodered.org/node/node-red-contrib-ui|node-red-contrib-ui]] ist erforderlich. |
Daten vom [[software/middleware/push-Server|Push-Server]] im [[https://de.wikipedia.org/wiki/MQTT|MQTT-Protokoll]] an [[https://en.wikipedia.org/wiki/InfluxDB|InfluxDB]] weiterleiten:\\ | Daten vom [[software/middleware/push-Server|Push-Server]] im [[https://de.wikipedia.org/wiki/MQTT|MQTT-Protokoll]] an [[https://en.wikipedia.org/wiki/InfluxDB|InfluxDB]] weiterleiten:\\ |
[[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 ==== |
| 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]] |
| |
| ==== Messwerte von Schaltaktor per MQTT ==== |
| Messwerte von Modulwechselrichtern an [[https://shelly.cloud/shelly-25-wifi-smart-relay-roller-shutter-home-automation/|Shelly 2.5]] Funkaktoren erfasst und per [[https://de.wikipedia.org/wiki/MQTT|MQTT]] an Volkszähler weitergereicht:\\ |
| [[https://www.photovoltaikforum.com/thread/142674-shelly-mqtt-integrieren/]] |