Nulleinspeisung PV mit Node-Red

[{“id”:“88fc663738670272”,“type”:“tab”,“label”:“Flow 1”,“disabled”:false,“info”:“”,“env”:},{“id”:“4fd17232e059b145”,“type”:“mqtt out”,“z”:“88fc663738670272”,“name”:“WR MQTT”,“topic”:“solar/cmd/114182973131/limit_nonpersistent_absolute”,“qos”:“”,“retain”:“”,“respTopic”:“”,“contentType”:“”,“userProps”:“”,“correl”:“”,“expiry”:“”,“broker”:“87b2d138566ff5cc”,“x”:910,“y”:160,“wires”:},{“id”:“f8e091bc3348f053”,“type”:“inject”,“z”:“88fc663738670272”,“name”:“alle 10 sekunden”,“props”:[{“p”:“payload”},{“p”:“topic”,“vt”:“str”}],“repeat”:“10”,“crontab”:“”,“once”:false,“onceDelay”:0.1,“topic”:“”,“payload”:“”,“payloadType”:“date”,“x”:130,“y”:160,“wires”:[[“932ffdc94a41b240”]]},{“id”:“0de3bc037ff0737f”,“type”:“function”,“z”:“88fc663738670272”,“name”:“Berechnung für WR Limit”,“func”:“// MAX generation of the inverter Watts\nvar maxPower = 600;\n\n// Get current power limit or default\nvar power = context.get(‘power’) || maxPower;\npower += msg.payload;\n\n// clamp power between 0 and max\nif (power > maxPower) power = maxPower;\nif (power < 0) power = 1;\n\n\n// store current powerlimit and update message\ncontext.set(‘power’, power);\nmsg.payload = power;\n\nreturn msg;”,“outputs”:1,“noerr”:0,“initialize”:“”,“finalize”:“”,“libs”:,“x”:650,“y”:160,“wires”:[[“4fd17232e059b145”]]},{“id”:“932ffdc94a41b240”,“type”:“api-current-state”,“z”:“88fc663738670272”,“name”:“Leistung alle Phasen”,“server”:“864f5cad6b0c1ce0”,“version”:3,“outputs”:1,“halt_if”:“”,“halt_if_type”:“str”,“halt_if_compare”:“is”,“entity_id”:“sensor.shellypro3em_0cb815fd3820_total_active_power”,“state_type”:“num”,“blockInputOverrides”:false,“outputProperties”:[{“property”:“payload”,“propertyType”:“msg”,“value”:“”,“valueType”:“entityState”},{“property”:“data”,“propertyType”:“msg”,“value”:“”,“valueType”:“entity”}],“for”:“0”,“forType”:“num”,“forUnits”:“minutes”,“override_topic”:false,“state_location”:“payload”,“override_payload”:“msg”,“entity_location”:“data”,“override_data”:“msg”,“x”:380,“y”:160,“wires”:[[“0de3bc037ff0737f”]]},{“id”:“87b2d138566ff5cc”,“type”:“mqtt-broker”,“name”:“DTU”,“broker”:“mqtt://192.168.178.74”,“port”:“1883”,“clientid”:“”,“autoConnect”:true,“usetls”:false,“protocolVersion”:“4”,“keepalive”:“60”,“cleansession”:true,“birthTopic”:“”,“birthQos”:“0”,“birthPayload”:“”,“birthMsg”:{},“closeTopic”:“”,“closeQos”:“0”,“closePayload”:“”,“closeMsg”:{},“willTopic”:“”,“willQos”:“0”,“willPayload”:“”,“willMsg”:{},“userProps”:“”,“sessionExpiry”:“”},{“id”:“864f5cad6b0c1ce0”,“type”:“server”,“name”:“Home Assistant”,“version”:5,“addon”:true,“rejectUnauthorizedCerts”:true,“ha_boolean”:“y|yes|true|on|home|open”,“connectionDelay”:true,“cacheJson”:true,“heartbeat”:false,“heartbeatInterval”:“5”,“areaSelector”:“friendlyName”,“deviceSelector”:“friendlyName”,“entitySelector”:“friendlyName”,“statusSeparator”:": ",“statusYear”:“hidden”,“statusMonth”:“short”,“statusDay”:“numeric”,“statusHourCycle”:“default”,“statusTimeFormat”:“h:m”,“enableGlobalContextStore”:false}]

ich bekomme beim einfühen deines ‘Flows’ fehlermeldung in nodered. Ist der Flow Text komplett?

Kannst du in open dtu ein limit an wechselricjter senden?

Moin Cookie und Willkommen an Board,
vielleicht erst mal zur Erklärung:
die function node regelt den WR auf max.Power (in deinem Fall auf 600W) wenn sie positive Werte erhält. Erst wenn der Eingangswert ins negative geht regelt sie um diesen Betrag runter. Solange du also Leistung aus dem Netz ziehst (die Werte also positiv sind) wird immer 600W an den WR gesendet.
Setz hinter der function node mal eine Debug node um zu sehen ob die Berechnung funktioniert.

Grüße
LL

Ich habe das so kopiert.

Ich versuche das mit dem debug node, Kann es aber erst heute Abend machen.

Danke trotzdem für eure Hilfe

Moin Cookie,
ich habe in deinem Flow gerade folgende Zeile gelesen:
solar/cmd/114182973131/limit_nonpersistent_absolute
Der korrekte Aufbau der Befehlszeile für die OpenDTU lautet:
[topic]/[serial]/cmd/limit_nonpersistent_absolute
also das cmd hinter der serial, bei dir müsste es dann so aussehen:
solar/114182973131/cmd/limit_nonpersistent_absolute

Grüße
LL

DANKE :slight_smile: @LuckyLuke . Durch den Debug sah ich das er nicht richtig geregelt hat. nach langer Suche fand ich ein " + " was nicht dorthin gehörte. Dann ein tiefes Durchatmen. Node hat sich nicht mehr verrechnet. Die DTU hat aber immer noch nicht reagiert.

Auch hier waren 2 Fehler. Zum einen war das " cmd " an der falschen Stelle und zum 2ten hat die Seriennummer nicht gepasst :sweat_smile:.

Jetzt läuft es ,so wie es soll.
Danke für die Hilfe !!

Hallo zusammen,
ich bekomme leider meinen WR nicht geregelt. Selbst wo heute teilweise mehr eingespeist wurde als verbraucht wurde, hat er nicht geregelt. Ich habe mir den Flow von oben kopiert und auf meine Daten angepasst. Über den OpenDTU kann ich das Limit ohne Probleme setzen. Unter Entitäten werden mir alle Werte der WR angezeigt. Woran könnte das Problem liegen?
Momentan sieht es folgendermaßen aus:


Die Ip ist die von HA bzw. darauf läuft auch der Mosquito Broker. Die Anmeldedaten sind die von HA, da ich keinen weiteren Benutzer angelegt habe. Das Topic habe ich aus der Weboberfläche meiner OpenDTU genommen:

Wäre es irgendwie möglich erstmal einen Flow zu erstellen, bei dem ich ein festes Limit setzen kann? Quasi als Test ob der WR überhaupt reagiert?

Vielleicht die OpenDTU Software aktuallisieren, bei mir sieht das anders aus, bin gerade beim Aufbau meiner Anlage, Ziel ist auch die 0 Einspeisung mit HA hinzubekommen.

Ok, probiere ich heute Abend mal aus. Nochwas ist mir grade aufgefallen: Momentan wird mehr produziert als verbraucht und es findet keine Drosselung statt. Über den Debugnode bei Rednode sehe ich, dass jetzt aus der Berechnungsfunktion der Wert “1” raus kommt. Ist das so richtig? Warum soll der Wert 1 an den WR gesendet werden? Heißt das, der WR wird auf 1 W gedrosselt?

Ich habs ausprobiert und die Firmware geupdated. Weiterhin habe ich die Autodiscovery Funktion raus genommen. Jetzt läuft es. Danke für den Hinweis.

Moin, ich bin sehr neu in dem Thema und freue mich sehr über diese Anleitung nur leider bekomme ich keine Verbindung zum Mqtt Server(Core-Mosquitto) hin.

Könnt ihr mir dabei helfen?

Ich habe den Kompletten Flow von usekevin kopiert und für mich angepasst aber es funktioniert leider nicht.

Danke schonmal.

Kannst du das Problem eingrenzen? Ist in deinem Flow der MQTT Node mit “verbunden” gekennzeichnet?

Ne dort steht die ganze Zeit “Verbindung wird hergestellt”.

Ich habe bereits die Ip von Mqtt Server (also homeassistant) überprüft, aber leider passiert dort nichts.

Hier nochmal die Einstellungen vom letzten Node:

Danke schonmal für die Hilfe.

Lg
Samuel

Ja habe ich alles.

Ich habe es jetzt auch selber herausgefunden.
Die Login Daten fehlten für den Mosquitto Broker.

Danke für eure schnelle Hilfe.

Nachtrag:

Ich brauche leider nochmal Hilfe.

Bei mir funktioniert das script nicht so wie es soll. Der WR gibt die Wattzahl aus die ich unter maxPower angegeben hatte, und zwar egal wieviel gerade in dem Moment verbraucht wird beim Zähler.

der Zähler wird korrekt ausgelesen und ich kann den Wert auch bei NodeRed unter ‘‘Leistung aller Phasen’’ einsehen.

Könnt ihr mir damit helfen?

LG
Samuel

:crayon:by HarryP: Zusammenführung Doppelpost

1 „Gefällt mir“

Ich denke, dein Script funktioniert gerade genauso wie vom Ersteller gedacht. Solange du keinen Überschuss produzierst, läuft dein WR ohne Limitierung. Und das sind halt deine 600 Watt. Erst wenn du Überschuss hast, fängt er an zu regeln. Bei dem Wetter momentan und abhängig von der Größe deiner Anlage, kannst du das gerade schlecht überprüfen…

Hier mal für alle die nicht OpenDTU sondern Ahoy nutzen…

Das ist Das Topic an das ihr schicken müsst. Wobei “FassadenSolar” von euch zu ersetzen ist. Das Topic habt ihr in Ahoj unter Settings/MQTT vergeben.

Die 0 am Ende ist die ID des Inverters an den der Befehl durchgereicht werden soll. Habt ihr einen weiteren den ihr stattdessen nutzen wollt dann dort zb eine 1 eintragen.

FassadenSolar/ctrl/limit/0

Der Payload kann auf zwei verschiedene Arten formatiert werden

Der Inverter wird mit absoluten Werten reguliert wenn ein “W” hinter der Zahl ist

msg.payload = "600W";
return msg;

In diesem Beispiel wird der Inverter einfach um 50% gedrosselt

msg.payload = "50";

return msg;

Dabei spielt die Version von AhojDTU keine Rolle. Habe verschiedene getestet. Alle Versionen erlauben dieses Topic und die Werte

Hast du mir bitte den kompletten Code vom Flow?
Verwende auch Tibber :slight_smile:

Erst mal vielen Dank an alle die hier ihren Code zur Verfügung gestellt haben.
Ich befasse mich erst ganz neu mit dem Thema Nodered.
Ein Frage habe ich nun zu dem Flow - wie kann ich eine Verknüpfung einbauen damit die “Rechnerei” erst losgeht wenn der WR reachable ist? Also wenn sol/114181017762/status/reachable=1
Ich wollte eine Datei anhängen, leider ist mir das als “neuer Benutzer” aber nicht gestattet :frowning:

Hallo zusammen,
vielen Dank für das tolle Script :slight_smile:

Ich nutze es mit einem HMS-1800-4T und OpenDTU
Allerdings hängt sich der WR dann irgendwann mal auf…
D.h. er sendet keine Daten mehr an OpenDTU
Deaktiviere ich den Flow funktioniert es wieder.
Gibt es eine Möglichkeit das geprüft wird ob sich der Wert “limit_nonpersistent_absolute” geändert hat und ihn dann erst sendet?
Sonst wird alle 10 sek. der Befehl zum WR gesendet.
Und ich vermute mal das er sich deshalb aufhängt.