Hallo Gemeinde.
FĂŒr manch einen PV Freak ist es vielleicht ganz Interessant eine Nulleinspeisung einzusetzen (warum auch immer, das lassen wir mal offen đ ). Ich fĂŒr meinen Teil wollte diese mit Node-RED Umsetzen, da es eh lĂ€uft, und ich keine Lust auf Tausend Programme habe.
Voraussetzungen:
- Node-RED
- Ihr Lest euren ZĂ€hler aus, sodass ihr die Live Werte vom Verbrauch habt.
- Euer Wechselrichter kann Limitiert werden, und dies auch von "Ausserhalb". Beispielsweise per MQTT.
Ich fĂŒr meinen Teil habe einen Hoymiles HM-600 Wechselrichter, und Ăberwache den Mit der Software OpenDTU, sodass ich diesen per MQTT ansagen kann, wieviel Leistung gerade durchgehen darf.
Alles in allem ist die Umsetzung Super Easy.

so sieht der Flow bei mir aus. Alle 10 Sekunden lÀuft die Funktion, und Schaut, ob "Leistung alle Phasen" Positiv oder Negativ ist. (Mein StromzÀhler gibt diese Werte so aus, Kein EinspeisezÀhler!)
Wenn Positiv, dann lÀuft der Wechselrichter mit voller Power (in meinem Fall 600W).
Wenn die Leistung Negativ ist, wird mittels der Funktion so lange heruntergeregelt, bis Quasi "Leistung alle Phasen" auf 0 ist.
NatĂŒrlich funktioniert dies nur in der Theorie, da der normale Stromverbrauch, genauso wie die Erzeugte Energie Schwankt. Somit ist immer ein Minimaler bezug, bzw eine Minimale Einspeisung vorhanden.
Beim Testen vorhin (es gab endlich mal etwas Sonne...) Schwankten die Werte bei mir zwischen +10 Watt und -10 Watt Verbrauch. FĂŒr mich Absolut ausreichend.
Wenn das ganze jemand nutzen möchte, hier der Code der funktion.
// MAX generation of the inverter Watts
var maxPower = 600;
// Get current power limit or default
var power = context.get('power') || maxPower;
power += msg.payload;
// clamp power between 0 and max
if (power > maxPower) power = maxPower;
if (power < 0) power = 1;
// store current powerlimit and update message
context.set('power', power);
msg.payload = power;
return msg;
Falls jemand den kompletten Flow von mir nutzen möchte:
[{"id":"da8ec46371f0db9b","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"ef6c3ce925d406a5","type":"mqtt out","z":"da8ec46371f0db9b","name":"WR MQTT","topic":"solar/114182973131/cmd/limit_nonpersistent_absolute","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"87b2d138566ff5cc","x":910,"y":160,"wires":[]},{"id":"dd099805a5d7f908","type":"inject","z":"da8ec46371f0db9b","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":[["2d07ac7c28d9b2a5"]]},{"id":"bc06481a7c421b2c","type":"function","z":"da8ec46371f0db9b","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":[["ef6c3ce925d406a5"]]},{"id":"2d07ac7c28d9b2a5","type":"api-current-state","z":"da8ec46371f0db9b","name":"Leistung alle Phasen","server":"864f5cad6b0c1ce0","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.stromzahler_sm_leistung_alle_phasen_w","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":[["bc06481a7c421b2c"]]},{"id":"87b2d138566ff5cc","type":"mqtt-broker","name":"","broker":"192.168.178.60","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}]
NatĂŒrlich mĂŒsst ihr dann den Flow soweit anpassen, dass er eure Daten auslieĂt, sprich:
- Leistung alle Phasen: Euren Sensor einsetzen
- WR MQTT: Euren WR ansprechen
Wie immer, bei Fragen gerne Fragen.
Falls das ganze jemand Umbaut, um bsp. mehrere WR gleichzeitig nutzen zu können o.Ă. wĂŒrde ich mich freuen, wenn dies dann auch fĂŒr die Allgemeinheit veröffentlicht wird :)
So sah das ganze vorhin Live aus. In GrĂŒn dargestellt mein Verbrauch, in Gelb meine Erzeugung und die Rote Linie ist das Limit des Wechselrichters.


