Luxtronik WP Steuerung auslesen (Alpha Innotec, Novelan, evtl. auch Buderus)
Einklappen
X
-
Hallo,
habe node-red am laufen und "node-red-contrib-loxone" installiert.
Luxtronik2 mit v2.81
Hätte jemand eine kurze Hilfestellung/Anleitung wie ich jetzt in der node-red Weboberfläche die Kommunikation mit der Luxtronik 2 konfiguriere, damit ich Werte abfragen kann?
Vielen DankKommentar
-
Auf Wunsch poste ich hier mal meinen Node-Red Flow mit dem ich die Daten meiner Luxtronik2 auslese:
Code:[{"id":"402fd073.84b1b","type":"inject","z":"d4ca838b.957a9","name":"every 10s","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":false,"x":130,"y":120,"wires":[["5cd745c.6511abc"]]},{"id":"5cd745c.6511abc","type":"Luxtronik2","z":"d4ca838b.957a9","host":"192.168.88.11","port":8214,"password":"999999","x":320,"y":120,"wires":[["26407efe.5644e2","c223d04b.67801","698bfab9.9675e4","d1ae6276.be43f","c7d064b4.2aca78","cc087b94.aaea28"]]},{"id":"26407efe.5644e2","type":"function","z":"d4ca838b.957a9","name":"proccess temperature data","func":"var data = msg.payload;\nvar result = {};\n\nfunction sanitize(s) {\n s = s.replace(\" \", \"-\");\n s = s.replace(\",\", \".\");\n return s;\n}\n\nfor(var t in data[\"Informationen\"][\"Temperaturen\"]){\n result[sanitize(t)] = parseFloat(data[\"Informationen\"][\"Temperaturen\"][t]);\n}\n\nmsg.payload = result;\nreturn msg;","outputs":1,"noerr":0,"x":620,"y":120,"wires":[["df3757b3.e885d8"]]},{"id":"c223d04b.67801","type":"debug","z":"d4ca838b.957a9","name":"","active":false,"console":"false","complete":"false","x":570,"y":60,"wires":[]},{"id":"df3757b3.e885d8","type":"influxdb out","z":"d4ca838b.957a9","influxdb":"6850184.a7a0fe8","name":"","measurement":"temperatures","x":980,"y":120,"wires":[]},{"id":"698bfab9.9675e4","type":"function","z":"d4ca838b.957a9","name":"proccess input data","func":"var data = msg.payload;\nvar result = {};\n\nfunction sanitize(s) {\n s = s.replace(\" \", \"-\");\n s = s.replace(\",\", \".\");\n return s;\n}\n\nfunction parse(v) {\n if(v === \"Ein\") {\n return 1;\n } else if(v === \"Aus\") {\n return 0;\n } else {\n return parseFloat(v);\n }\n}\n\nfor(var t in data[\"Informationen\"][\"Eingänge\"]){\n if(t != \"Durchfluss\") {\n result[sanitize(t)] = parse(data[\"Informationen\"][\"Eingänge\"][t]);\n }\n}\n\nmsg.payload = result;\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":180,"wires":[["87f3665c.01c478"]]},{"id":"87f3665c.01c478","type":"influxdb out","z":"d4ca838b.957a9","influxdb":"6850184.a7a0fe8","name":"","measurement":"inputs","precision":"","retentionPolicy":"","x":960,"y":180,"wires":[]},{"id":"d1ae6276.be43f","type":"function","z":"d4ca838b.957a9","name":"proccess output data","func":"var data = msg.payload;\nvar result = {};\n\nfunction sanitize(s) {\n s = s.replace(\" \", \"-\");\n s = s.replace(\",\", \".\");\n return s;\n}\n\nfunction parse(v) {\n if(v === \"Ein\") {\n return 1;\n } else if(v === \"Aus\") {\n return 0;\n } else {\n return parseFloat(v);\n }\n}\n\nfor(var t in data[\"Informationen\"][\"Ausgänge\"]){\n if(!t.startsWith(\"seit\")) {\n result[sanitize(t)] = parse(data[\"Informationen\"][\"Ausgänge\"][t]);\n }\n}\n\nmsg.payload = result;\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":240,"wires":[["b45745a3.c3f958"]]},{"id":"b45745a3.c3f958","type":"influxdb out","z":"d4ca838b.957a9","influxdb":"6850184.a7a0fe8","name":"","measurement":"outputs","precision":"","retentionPolicy":"","x":960,"y":240,"wires":[]},{"id":"c7d064b4.2aca78","type":"function","z":"d4ca838b.957a9","name":"proccess output data","func":"var data = msg.payload;\nvar result = {};\n\nfunction sanitize(s) {\n s = s.replace(\" \", \"-\");\n s = s.replace(\",\", \".\");\n return s;\n}\n\nfunction parse(v) {\n return parseFloat(v);\n}\n\nfor(var t in data[\"Informationen\"][\"Betriebsstunden\"]){\n if(!t.startsWith(\"Laufzeit\")) {\n result[sanitize(t)] = parse(data[\"Informationen\"][\"Betriebsstunden\"][t]);\n }\n}\n\nmsg.payload = result;\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":300,"wires":[["94e825ea.3ea0f8"]]},{"id":"94e825ea.3ea0f8","type":"influxdb out","z":"d4ca838b.957a9","influxdb":"6850184.a7a0fe8","name":"","measurement":"operating-hours","precision":"","retentionPolicy":"","x":990,"y":300,"wires":[]},{"id":"cc087b94.aaea28","type":"function","z":"d4ca838b.957a9","name":"proccess output data","func":"var data = msg.payload;\nvar result = {}\n\nfunction sanitize(s) {\n s = s.replace(\" \", \"-\");\n s = s.replace(\",\", \".\");\n return s;\n}\n\nfunction parse(v) {\n return parseFloat(v);\n}\n\nfor(var t in data[\"Informationen\"][\"Wärmemenge \"]){\n result[sanitize(t)] = parse(data[\"Informationen\"][\"Wärmemenge \"][t]);\n}\n\nmsg.payload = result;\nreturn msg;","outputs":1,"noerr":0,"x":600,"y":360,"wires":[["704c0b77.c0f574"]]},{"id":"704c0b77.c0f574","type":"influxdb out","z":"d4ca838b.957a9","influxdb":"6850184.a7a0fe8","name":"","measurement":"heat-quantity","precision":"","retentionPolicy":"","x":980,"y":360,"wires":[]},{"id":"6850184.a7a0fe8","type":"influxdb","z":"","hostname":"127.0.0.1","port":"8086","protocol":"http","database":"heatpump","name":"","usetls":false,"tls":""}]
Ausserdem verwendet der Flow den influxdb node um die gelesenen Daten in eine Influxdb zu schreiben, visualisieren tu ich das ganze dann mit Grafana.
Zuletzt geändert von Bouni; 28.06.2017, 07:50.Kommentar
-
Auf einen weiteren Wunsch hin, beschreibe ich hier mal mein Setup udn wie ich vorgegangen bin.
Ich habe im Keller in meinem Netzwerkschrank einen kleinen Server mit Arch Linux als OS auf dem ich Node Red, InfluxDB und Grafana installiert habe.
Code:yaourt -S nodejs npm install -g node-red yaourt -S influxdb yaourt -S grafana
Da node-red nicht per default einen service mitbringt muss man ein systemd unit file anlegen (gesetzt dem Fall man verwendet systemd, aber auch wenn nicht muss man das selbe für sein OS tun, nur eben an die dortigen Gegebenheiten angepasst).
Ich habe einen neuen Benutzer und das unit file angelegt:
Code:sudo useradd -d node-red sudo touch /etc/systemd/system/node-red.service
Code:[Unit] Description=Node-RED is a tool for wiring together hardware devices, APIs and online services in new and interesting ways. After=syslog.target network.target Documentation=http://nodered.org/ [Service] ExecStart=-/usr/bin/node-red WorkingDirectory=/home/node-red User=node-red Group=node-red Nice=10 Restart=on-failure KillSignal=SIGINT [Install] WantedBy=multi-user.target
Code:sudo systemctl daemon-reload sudo systemctl enable node-red.service sudo systemctl start node-red.service
Nun müssen auch noch influxdb und grafana gestartet werden:
Code:sudo systemctl enable influxdb.service sudo systemctl start influxdb.service sudo systemctl enable grafana.service sudo systemctl start grafana.service
Code:sudo npm install -g node-red-contrib-luxtronik2-ws
Code:systemctl restart node-red.service
Als letzten Schritt den oben geposteten Flow importieren: Menü -> Import -> Clipboard
Im Flow müssen natürlich noch die IP/Passwort der Luxtronik als auch die IP/Passwort der InfluxDB angepasst werden, aber das sollte selbsterklärend sein.Kommentar
-
Über Import -> Clipboard konnte ich den Flow hinzufügen.
Wie speichere ich das ganze? Nach einem Neustart bzw. Stop/start von node-red sind die flows weg.
Wo befindet sich das "root" Verzeichnis der node-red installation? also da wo ich mit npm dein Luxtronik contrib installieren muss?Kommentar
-
Normalerweise muss man nichts speichern, die Flows liegen im home Verzeichnuis des Benutzers mt dem Node Red gestartet wurde.
Bei Mir z.B. unter /home/node-red/.node-red/flows_<hostname>.json
- existiert das home Verzeichnis überhaupt?
- was ergibt ein "journalctrl -u node-red.service"?
- was ein "ls -la /home/<username>/.node-red"
Du kannst den installationsbefehl in jedem beliebigen Verzeichnis ausführen, npm macht dann das richtige (npm install -g nope-red-contrib-luxtronik2-ws)Kommentar
-
Bouni
- home Verzeichnis existiert.
-journalctl -u node-red.service
[info] Settings file : /home/node-red/.node-red/sett
[info] User directory : /home/node-red/.node-red
[info] Flows file : /home/node-red/.node-red/flow
#cd /home/node-red/.node-red/
#ls -la
drwxr-xr-x 5 node-red node-red 4096 Jun 28 11:48 ../
-rw-r--r-- 1 node-red node-red 16119 Jun 28 11:49 .config.json
-rw-r--r-- 1 node-red node-red 44 Jun 28 11:52 flows_ovibox-server_cred.json
-rw-r--r-- 1 node-red node-red 676 Jun 28 11:53 flows_ovibox-server.json
-rw-r--r-- 1 node-red node-red 448 Jun 28 11:52 .flows_ovibox-server.json.backup
drwxr-xr-x 3 node-red node-red 4096 Jun 28 10:50 lib/
drwxr-xr-x 5 node-red node-red 4096 Jun 28 11:49 node_modules/
-rw-r--r-- 1 node-red node-red 9165 Jun 28 10:50 settings.js
nach einer sauberen Neuinstalltion von Node-red scheint das speichern zu gehen.
Allerdings existiert das Verzeichnis /flow nicht.
Kommentar
-
-
Bouni
Ist das gleiche Webinterface, habe einen Bekannten bereits gefragt mit 3.81.
Dein Flow in Verbindung mit Grafana läuft! Super Danke!
Jetzt wollte ich Daten in dem node-red Dashboard anzeigen lassen. Z.B. WW Ist Temperatur mit dem den "gauge node" aus dem node-red Dashboard.
Wie bekomme ich die Werte aus deinen Abfragen extrahiert?
Oder z.B. einzelne Werte an einen Loxone Miniserver senden.
Siehe exemplarisch den Screenshot!1 BildKommentar
-
Hi Gast
generell kann der "Gauge Node" nur mit Zahlenwerten umgehen.
Wenn also aus den verwendeten Funktionen mehr rausfällt als eine Zahl (z.B.: ein komplexeres Objekt) musst Du vorher mit dem "Change Node" umwandeln.
Im Zweifelsfall musst Du Dir über den Debug Node mal die Ausgabe anzeigen lassen und dann ein wenig nach Deinen Vorstellungen basteln.
Nach meiner Erfahrung benötige ich den Change-Node in fast jedem Flow, weil immer irgendwas irgendwohin umgewandelt werden muss.
Viel ErfolgLoxone-Installation mit mehreren Extensions, Dimmer-Extension, DMX, 1-Wire (alles aktuell noch im Auslieferungszustand);
FritzBox, Netgear Plus Switch mit mehreren VLANs, Intel NUC mit VMWare ESXi 6.5 (pfSense, Loxberry, Kleinkram)Kommentar
-
Riesenschnabel
Bouni
Das Change-node und debug-node habe ich zwar gefunden.... Allerdings ist mir nicht klar wie ich diese Anwende um einzelne Daten aus den Datensätzen zu extrahieren. (zB eine bestimmte Temperatur.Kommentar
-
Gast Der debug node tut wie der Name schon andeutet alles was aus einem Baustein rausfällt im Debug Fenster auf der rechten Seite anzeigen.
Du muss mit entweder einem Change oder einem Formel Baustein den einzelnen Wert aus dem Objekt herauspopeln, das setzt minimale JS Kentnisse Voraus.Kommentar
-
Hi Gast
ein wenig mit der Programmierung und der Anwendung der einzelnen Nodes wirst Du Dich definitiv selber beschäftigen müssen.
Andernfalls wirst Du es sicherlich auch sehr schwer mit irgendwelcher Fehleranalyse und -behebung haben.
Zum Change-Node gibt es in dieser Anleitung eine ganz passable Beschreibung. Und sonst hilft Tante Google meist ganz gut weiter.
Viel ErfolgLoxone-Installation mit mehreren Extensions, Dimmer-Extension, DMX, 1-Wire (alles aktuell noch im Auslieferungszustand);
FritzBox, Netgear Plus Switch mit mehreren VLANs, Intel NUC mit VMWare ESXi 6.5 (pfSense, Loxberry, Kleinkram)Kommentar
Kommentar