Beispiele: openWB Integration an Node-Red

Gero
Beiträge: 361
Registriert: Sa Feb 20, 2021 9:55 am

Re: Beispiele: openWB Integration an Node-Red

Beitrag von Gero »

hominidae hat geschrieben: Mo Nov 22, 2021 10:01 pm ...in Node-Red ist eigentlich das Konzept, dass es sich bei den Messages in erster Linie *nicht* um Daten handelt, sondern um Events.
Auch von mir vielen Dank für den Wink. Ich bin ja auch nur blutiger Anfänger in NodeRed und mir ist auch bewusst, dass meine Lösung eher ein Workaround ist, der der NodeRed-Philosopie entgegen steht. Ich habe eine Lösung gesucht, dass man beim Betätigen eines Sliders eine payload-lose Message an die anderen triggert. Oder eine Summierungsnode sich die alten durchgekommenen Messages merkt. Da bin ich aber nicht fündig geworden. Den DSM schaue ich mir auch mal an.
aiole
Beiträge: 3643
Registriert: Mo Okt 08, 2018 4:51 pm

Re: Beispiele: openWB Integration an Node-Red

Beitrag von aiole »

Das zugehörige Wiki ist nicht schlecht.
https://github.com/cflurin/node-red-contrib-dsm/wiki
Moderator - openWB-Forum (ehrenamtlich)
Gero
Beiträge: 361
Registriert: Sa Feb 20, 2021 9:55 am

Re: Beispiele: openWB Integration an Node-Red

Beitrag von Gero »

So hier ein mehr node-reddiger Lösungsvorschlag:
summe.jpg

Code: Alles auswählen

[{"id":"6eac542e.5dabf4","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"e56b20c5.ce2a78","type":"ui_slider","z":"6eac542e.5dabf4","name":"S1","label":"S1","tooltip":"","group":"1de0097c.41aea7","order":3,"width":"4","height":"1","passthru":true,"outs":"all","topic":"SI1","topicType":"str","min":0,"max":"20","step":1,"className":"","x":270,"y":100,"wires":[["e2dd636a.e87488"]]},{"id":"39d9e634.6f9e2a","type":"ui_slider","z":"6eac542e.5dabf4","name":"S2","label":"S2","tooltip":"","group":"1de0097c.41aea7","order":5,"width":"4","height":"1","passthru":true,"outs":"all","topic":"SI2","topicType":"str","min":0,"max":"20","step":1,"className":"","x":270,"y":180,"wires":[["ffb1249.b156ad8"]]},{"id":"ffb1249.b156ad8","type":"ui_numeric","z":"6eac542e.5dabf4","name":"I2","label":"","tooltip":"","group":"1de0097c.41aea7","order":6,"width":"2","height":"1","wrap":false,"passthru":true,"topic":"SI2","topicType":"str","format":"{{value}}","min":0,"max":"20","step":1,"className":"","x":410,"y":180,"wires":[["39d9e634.6f9e2a","9c07867f.be1bb"]]},{"id":"e2dd636a.e87488","type":"ui_numeric","z":"6eac542e.5dabf4","name":"I1","label":"","tooltip":"","group":"1de0097c.41aea7","order":4,"width":"2","height":"1","wrap":false,"passthru":true,"topic":"SI1","topicType":"str","format":"{{value}}","min":0,"max":"20","step":1,"className":"","x":410,"y":100,"wires":[["e56b20c5.ce2a78","9c07867f.be1bb"]]},{"id":"22f39c88.e11c04","type":"ui_slider","z":"6eac542e.5dabf4","name":"","label":"S3","tooltip":"","group":"1de0097c.41aea7","order":7,"width":"4","height":"1","passthru":true,"outs":"all","topic":"SI3","topicType":"str","min":0,"max":"20","step":1,"className":"","x":270,"y":260,"wires":[["a5d3a640.8a69b8"]]},{"id":"9c07867f.be1bb","type":"combine-statistic","z":"6eac542e.5dabf4","name":"","topic":"HV","operator":"sum","falsy":"include","defer":250,"timeout":"0","distinction":"topic","x":620,"y":180,"wires":[["3fbf70b5.4a3ec"]]},{"id":"3fbf70b5.4a3ec","type":"ui_gauge","z":"6eac542e.5dabf4","name":"","group":"1de0097c.41aea7","order":9,"width":0,"height":0,"gtype":"gage","title":"summe","label":"Watt","format":"{{value}}","min":0,"max":"13800","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":780,"y":180,"wires":[]},{"id":"3485204b.a1ab68","type":"inject","z":"6eac542e.5dabf4","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"0","payloadType":"num","x":90,"y":180,"wires":[["e56b20c5.ce2a78","39d9e634.6f9e2a","22f39c88.e11c04"]]},{"id":"a5d3a640.8a69b8","type":"ui_numeric","z":"6eac542e.5dabf4","name":"I3","label":"","tooltip":"","group":"1de0097c.41aea7","order":8,"width":"2","height":"1","wrap":false,"passthru":true,"topic":"SI3","topicType":"str","format":"{{value}}","min":0,"max":"20","step":1,"className":"","x":410,"y":260,"wires":[["22f39c88.e11c04","9c07867f.be1bb"]]},{"id":"1de0097c.41aea7","type":"ui_group","name":"Simulation","tab":"744b5117.d18b28","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"744b5117.d18b28","type":"ui_tab","name":"Haussimulation","icon":"dashboard","disabled":false,"hidden":false}]
Nun habe ich verstanden, wie die statistic-node aus node-red-contrib-combine funktioniert. Sie summiert alle Werte unterschiedlicher Topics. D.h. Sie merkt sich den Wert jedes Topics und gibt dann die Summe aller Topics aus. Dementsprechend muss jede Slider/Numeric-Gruppe ein eigenes Topic bekommen, dann klappt's auch mit der Summierung.
aiole
Beiträge: 3643
Registriert: Mo Okt 08, 2018 4:51 pm

Re: Beispiele: openWB Integration an Node-Red

Beitrag von aiole »

und ich dachte schon, ich muss jetzt auf Python umschwenken ;). Na mal sehen, ob wir den Sim zum Laufen bekommen. Danach geb' ich einen aus.

Den statistic-node bekomme ich bei mir immer noch als unknown. Auch die Schleifen flattern heftigst.
Kannst Du mal den Inhalt des function-node posten?
Moderator - openWB-Forum (ehrenamtlich)
Gero
Beiträge: 361
Registriert: Sa Feb 20, 2021 9:55 am

Re: Beispiele: openWB Integration an Node-Red

Beitrag von Gero »

Du musst das noch das node-red-contrib-combine installieren. Da ist die statistic-node drin. Das mit dem Flattern habe ich bei mir nicht. Das kommt dann vielleicht von den unterschiedlichen Versionen?

Ich hab' mal weitergebaut: Ich kann nun die PV-Leistung verdrehen und den Hausverbrauch einstellen. Raus kommt wenig überraschend die Leistung am EVU-Punkt. Und ganz unten schon mal die Geamt-Ladeleistung der openWB.
dash.jpg
Hier ist der Flow dazu:
flow.jpg

Code: Alles auswählen

[{"id":"cf354afd.9bc818","type":"tab","label":"Haussimulation","disabled":false,"info":""},{"id":"5719608c.cb6d5","type":"ui_slider","z":"cf354afd.9bc818","name":"","label":"HV1","tooltip":"","group":"e4b1e54c.678138","order":2,"width":"4","height":"1","passthru":true,"outs":"all","topic":"HV1","topicType":"str","min":0,"max":"20","step":1,"className":"","x":270,"y":100,"wires":[["bbecace6.cf6118"]]},{"id":"4c4decd7.181c64","type":"ui_slider","z":"cf354afd.9bc818","name":"","label":"HV2","tooltip":"","group":"e4b1e54c.678138","order":4,"width":"4","height":"1","passthru":true,"outs":"all","topic":"HV2","topicType":"str","min":0,"max":"20","step":1,"className":"","x":270,"y":180,"wires":[["73c7b491.eca484"]]},{"id":"73c7b491.eca484","type":"ui_numeric","z":"cf354afd.9bc818","name":"n2","label":"","tooltip":"","group":"e4b1e54c.678138","order":5,"width":"2","height":"1","wrap":false,"passthru":true,"topic":"HV2","topicType":"str","format":"{{value}}","min":0,"max":"20","step":1,"className":"","x":410,"y":180,"wires":[["4c4decd7.181c64","61f39718.4707a"]]},{"id":"bbecace6.cf6118","type":"ui_numeric","z":"cf354afd.9bc818","name":"n1","label":"","tooltip":"","group":"e4b1e54c.678138","order":3,"width":"2","height":"1","wrap":false,"passthru":true,"topic":"HV1","topicType":"str","format":"{{value}}","min":0,"max":"20","step":1,"className":"","x":410,"y":100,"wires":[["5719608c.cb6d5","61f39718.4707a"]]},{"id":"73d4ae7a.9e5378","type":"ui_gauge","z":"cf354afd.9bc818","name":"","group":"e4b1e54c.678138","order":1,"width":0,"height":0,"gtype":"gage","title":"Hausverbrauch","label":"Watt","format":"{{value}}","min":0,"max":"13800","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":1080,"y":180,"wires":[]},{"id":"33e16f4f.c097e8","type":"ui_slider","z":"cf354afd.9bc818","name":"","label":"HV3","tooltip":"","group":"e4b1e54c.678138","order":6,"width":"4","height":"1","passthru":true,"outs":"all","topic":"HV3","topicType":"str","min":0,"max":"20","step":1,"className":"","x":270,"y":260,"wires":[["c46e3ffe.11dc18"]]},{"id":"c46e3ffe.11dc18","type":"ui_numeric","z":"cf354afd.9bc818","name":"n3","label":"","tooltip":"","group":"e4b1e54c.678138","order":7,"width":"2","height":"1","wrap":false,"passthru":true,"topic":"HV3","topicType":"str","format":"{{value}}","min":0,"max":"20","step":1,"className":"","x":410,"y":260,"wires":[["33e16f4f.c097e8","61f39718.4707a"]]},{"id":"3b68517d.870aae","type":"inject","z":"cf354afd.9bc818","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"HV","payload":"0","payloadType":"num","x":90,"y":180,"wires":[["5719608c.cb6d5","4c4decd7.181c64","33e16f4f.c097e8","5fca2631.32d338"]]},{"id":"967fc91e.c1e34","type":"ui_slider","z":"cf354afd.9bc818","name":"","label":"PV","tooltip":"","group":"1de0097c.41aea7","order":2,"width":"4","height":"1","passthru":true,"outs":"all","topic":"PV","topicType":"str","min":0,"max":"13000","step":"100","className":"","x":270,"y":500,"wires":[["7ed00085.af4438"]]},{"id":"7ed00085.af4438","type":"ui_numeric","z":"cf354afd.9bc818","name":"PVn","label":"","tooltip":"","group":"1de0097c.41aea7","order":3,"width":"3","height":"1","wrap":false,"passthru":true,"topic":"PV","topicType":"str","format":"{{value}}","min":0,"max":"13000","step":"100","className":"","x":410,"y":500,"wires":[["967fc91e.c1e34","5fca2631.32d338","49e4bb93.e612c4"]]},{"id":"49e4bb93.e612c4","type":"ui_gauge","z":"cf354afd.9bc818","name":"","group":"1de0097c.41aea7","order":1,"width":0,"height":0,"gtype":"gage","title":"PV-Leistung","label":"Watt","format":"{{value}}","min":0,"max":"13000","colors":["#e6e600","#e6e600","#e6e600"],"seg1":"","seg2":"","className":"","x":1070,"y":500,"wires":[]},{"id":"a28ea702.28953","type":"ui_gauge","z":"cf354afd.9bc818","name":"","group":"5dcc2e5f.f76a9","order":8,"width":0,"height":0,"gtype":"gage","title":"Überschuss/Bezug","label":"Watt","format":"{{value}}","min":"-13800","max":"13800","colors":["#00f900","#00f900","#ff2600"],"seg1":"100","seg2":"100","className":"","x":1090,"y":300,"wires":[]},{"id":"61f39718.4707a","type":"combine-statistic","z":"cf354afd.9bc818","name":"","topic":"HV","operator":"sum","falsy":"include","defer":250,"timeout":0,"distinction":"topic","x":660,"y":180,"wires":[["1ac0d787.7324c8"]]},{"id":"5fca2631.32d338","type":"combine-delta","z":"cf354afd.9bc818","topic":"","topicA":"HV","topicB":"PV","name":"PV - HV","x":640,"y":320,"wires":[["a28ea702.28953"]]},{"id":"1ac0d787.7324c8","type":"function","z":"cf354afd.9bc818","name":"A * 230 > W","func":"msg.payload = msg.payload * 230;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":180,"wires":[["73d4ae7a.9e5378","5fca2631.32d338"]]},{"id":"e1fc2a5a.4cf05","type":"inject","z":"cf354afd.9bc818","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"PV","payload":"7200","payloadType":"num","x":100,"y":500,"wires":[["967fc91e.c1e34","5fca2631.32d338"]]},{"id":"ed5b83b7.d1883","type":"mqtt in","z":"cf354afd.9bc818","name":"Hausverbrauch","topic":"openWB/global/WAllChargePoints","qos":"2","datatype":"auto","broker":"978968c8.7b5238","x":120,"y":640,"wires":[["77fdf7a5.1417b"]]},{"id":"77fdf7a5.1417b","type":"ui_gauge","z":"cf354afd.9bc818","name":"","group":"9545499f.a61ca8","order":0,"width":0,"height":0,"gtype":"gage","title":"openWB","label":"watt","format":"{{value}}","min":0,"max":"11000","colors":["#00b500","#00b500","#00b500"],"seg1":"","seg2":"","className":"","x":430,"y":640,"wires":[]},{"id":"e4b1e54c.678138","type":"ui_group","name":"Hausverbrauch","tab":"744b5117.d18b28","order":2,"disp":false,"width":"7","collapse":false,"className":""},{"id":"1de0097c.41aea7","type":"ui_group","name":"PV Produkion","tab":"744b5117.d18b28","order":1,"disp":false,"width":"7","collapse":false,"className":""},{"id":"5dcc2e5f.f76a9","type":"ui_group","name":"Überschuss","tab":"744b5117.d18b28","order":3,"disp":false,"width":"7","collapse":false,"className":""},{"id":"978968c8.7b5238","type":"mqtt-broker","name":"OpenWB","broker":"192.168.8.11","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"30","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","willTopic":"","willQos":"0","willRetain":"false","willPayload":""},{"id":"9545499f.a61ca8","type":"ui_group","name":"Wallbox","tab":"744b5117.d18b28","order":4,"disp":false,"width":"7","collapse":false,"className":""},{"id":"744b5117.d18b28","type":"ui_tab","name":"Haussimulation","icon":"dashboard","disabled":false,"hidden":false}]
Auf die Spannung und die Frequenz habe ich erst mal verzichtet, Als Demonstrator reicht das ja vielleicht auch nur mit den Leistungen.

Du müsstest also nur noch die einzelnen Werte in die richtigen MQTT-Topics der openWB schreiben.
aiole
Beiträge: 3643
Registriert: Mo Okt 08, 2018 4:51 pm

Re: Beispiele: openWB Integration an Node-Red

Beitrag von aiole »

mächtig gewaltig!
Danke

Der combine-node ist sehr hilfreich. Bis auf die Schleifen läuft alles sauber. Ich habe sie erst einmal entfernt. Ich tippe auch auf die unterschiedlichen node-Versionen.

Eine oWB-MQTT-Auslesung der oWB nach Deinem Bsp. viewtopic.php?p=49177#p49177 habe ich gut hinbekommen. So langsam kommt Licht ins Dunkel, wobei ich noch ein paar Fragen habe:

1. Muss man jeden Wert einzeln mit einem extra MQTT-out-node an oWB senden oder kann man z.B. alle Werte-Ausgaben über einen node laufen lassen?
2. Im Gegensatz zum lesenden chargepoint-Bsp. muss ich MQTT-out für SET nutzen; cool = > Nach EVU-Umstellung auf MQTT in oWB kommen dort die Werte.
3. Gibt es noch eine Option die verschiedenen Dashboard-Fenstergruppen nach Wunsch anzuordnen? Innerhalb der Fenster habe ich gefunden, aber nicht untereinander. Aktuell liegen die bei mir alle untereinander.

Das war ein Mega-Schritt (für mich). Hier mal visulle Ergebnisse:
20211123_flow_aiole.jpg
20211123_Dashboard_Simulation.jpg
20211123_oWB_MQTT.jpg
Moderator - openWB-Forum (ehrenamtlich)
Gero
Beiträge: 361
Registriert: Sa Feb 20, 2021 9:55 am

Re: Beispiele: openWB Integration an Node-Red

Beitrag von Gero »

aiole hat geschrieben: Mi Nov 24, 2021 12:27 am 1. Muss man jeden Wert einzeln mit einem extra MQTT-out-node an oWB senden oder kann man z.B. alle Werte-Ausgaben über einen node laufen lassen?
Da man in der Node ja nur ein Topic angeben kann, würde ich erst mal sagen ja. Kannst ja mal suchen, ob es sowas wie einen Multi-MQTT node gibt, dem man ein Array als Payload gibt. Oder dass das MQTT-Topic aus dem NodeRED-Topic genommen wird. Ich vermute aber eher mal nicht.
aiole hat geschrieben: Mi Nov 24, 2021 12:27 am 2. Im Gegensatz zum lesenden chargepoint-Bsp. muss ich MQTT-out für SET nutzen; cool = > Nach EVU-Umstellung auf MQTT in oWB kommen dort die Werte.
Genau so war es ja gedacht. Man dreht an PV und HV rum und schaut was die openWB daraus macht. Wäre ja auch zum Debugging hilfreich. Ich denke da an den noch offenen PR mit der Ladeleistung und den 1p3-Umschalten. viewtopic.php?f=9&t=4063
aiole hat geschrieben: Mi Nov 24, 2021 12:27 am 3. Gibt es noch eine Option die verschiedenen Dashboard-Fenstergruppen nach Wunsch anzuordnen? Innerhalb der Fenster habe ich gefunden, aber nicht untereinander. Aktuell liegen die bei mir alle untereinander.
Klick mal dieses Menü hier und wähle Dashboard - das hier sind bei mir drei Screens, zwischen denen ich auf dem Handy hin- und herwischen kann.
das.jpg
Wegen des Flatterns hätte ich noch einen Tip: Probier' mal im Slider diese Option auszuschalten - wir brauchen den ja nur zu schieben und nicht nochmal den Wert:
pass.jpg
hominidae
Beiträge: 722
Registriert: Di Sep 03, 2019 4:13 pm

Re: Beispiele: openWB Integration an Node-Red

Beitrag von hominidae »

Gero hat geschrieben: Mi Nov 24, 2021 9:02 am
aiole hat geschrieben: Mi Nov 24, 2021 12:27 am 1. Muss man jeden Wert einzeln mit einem extra MQTT-out-node an oWB senden oder kann man z.B. alle Werte-Ausgaben über einen node laufen lassen?
Da man in der Node ja nur ein Topic angeben kann, würde ich erst mal sagen ja. Kannst ja mal suchen, ob es sowas wie einen Multi-MQTT node gibt, dem man ein Array als Payload gibt.
Nein, das geht alles generischer.

Du kannst mit einem MQTT Node *alle* Topics oder Teile des Baumes subscriben.
Bild

Das fragt alles unterhalb openWB/ ab ... quasi *.*
Dann kannst Du die eingehenden Messages in einem Switch-Node weiter verteilen.

Bild
...so:
Bild

BTW: Der "rbe"-Node nach dem MQTT Eingang sorgt dafür, das ein Topic nur weitergereicht wird, wenn sich der Wert des Topics gegenüber dem letzten Mal geändert hat. Das verhindert, dass NR geflutet wird, sollte die openWB mal spinnen ;-)
Oder dass das MQTT-Topic aus dem NodeRED-Topic genommen wird. Ich vermute aber eher mal nicht.
Genau das geht aber...für ausgehende publish ("senden") Messages kannst Du das Topic in der Konfig leerlassen und es einfach in der Message setzen

Bild

...zB mit einem Change Node:
Bild
hhoefling
Beiträge: 171
Registriert: So Jul 25, 2021 2:32 pm

Re: Beispiele: openWB Integration an Node-Red

Beitrag von hhoefling »

Hm...
Bei mir hat die Start-Node openWB/# über 600 Elemente.
Die alle zu "subscripten" ist vieleicht doch ein bischen viel wenn man nur 20-30 wirklich haben will.
gruss
Heinz

6Kwp PV+Akku von RCT Power
Skoda Citigo e-iV, openWB series2 standart+
mit Kernel 4.19.66 und openWB 1.9.250 (Okt.2021)
hominidae
Beiträge: 722
Registriert: Di Sep 03, 2019 4:13 pm

Re: Beispiele: openWB Integration an Node-Red

Beitrag von hominidae »

Bedenke, das ist keine aktive Abfrage, sondern eine Subscribtion.
Der MQTT Node bekommt nur dann etwas, wenn sich etwas (durch ein publish der openWB) im Broker ändert.
Da alle Topics in der openWB das retain Flag gesetzt haben, bekommt er tatsächlich beim *ersten* Start *alle* Topics genau einmal.

Aber Du packst eben nur die Topics in den switch-Node, welche du im Flow brauchst.
Alle anderen werden dann zwar auch mal im Strom dabei sein, aber werden sofort ausgefiltert.
Du kannst auch ein Switch-Element "anderfalls" ans Ende bauen..dort landet dann alles, was Du nicht explizit vorher gelistet im Switch hast.

Das ist wesentlich Ressourcenschonender und pflegeleichter als lauter einzelne Nodes über viele Flows verteilt.
Antworten