Hey @noize,
also ja bin mit dem Setup zufrieden. Auch wenn jetzt gerade die Sonne eine rare Ware ist.
Also ich habe eine Home Assistant Installation. Hier habe ich Red Node installiert.
Über die Tibber API habe ich den Sensordaten, über die Growatt API habe ich die Daten der Batterie und über ApSystems API habe ich den Wechselrichter drinnen.
Hier ist der ganze Flow.
[{"id":"82c8f4f6d6c3e41e","type":"tab","label":"Nulleinspeisung über EZ1-M","disabled":false,"info":"","env":[]},{"id":"50c7c19403d3fb15","type":"api-current-state","z":"82c8f4f6d6c3e41e","name":"Tibber Stromverbrauch","server":"97162e72.b6a46","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","entity_id":"sensor.tibber_pulse_energy","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"tibber_energy","valueType":"str"}],"for":"","forType":"num","x":310,"y":100,"wires":[["b75ae23d311485b3"]]},{"id":"bc76d6b42fad45bf","type":"api-current-state","z":"82c8f4f6d6c3e41e","name":"Tibber Stromerzeugung","server":"97162e72.b6a46","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","entity_id":"sensor.tibber_pulse_production","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"tibber_production","valueType":"str"}],"for":"","forType":"num","x":310,"y":160,"wires":[["b75ae23d311485b3"]]},{"id":"e9ae83fcac900a15","type":"api-current-state","z":"82c8f4f6d6c3e41e","name":"EZ1-M Maximale Leistung","server":"97162e72.b6a46","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","entity_id":"number.solar_max_power","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"solar_max_power","valueType":"str"}],"for":"","forType":"num","x":320,"y":220,"wires":[["b75ae23d311485b3"]]},{"id":"b75ae23d311485b3","type":"join","z":"82c8f4f6d6c3e41e","name":"Zusammenfassen der Payloads","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","useparts":true,"accumulate":false,"timeout":"","count":"3","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":590,"y":160,"wires":[["a71da7b5131747eb"]]},{"id":"a71da7b5131747eb","type":"function","z":"82c8f4f6d6c3e41e","name":"Berechne neue EZ1-M Leistung","func":"function calculateNewSolarPower(msg) {\n const energy = parseFloat(msg.payload.tibber_energy) || 0;\n const production = parseFloat(msg.payload.tibber_production) || 0;\n let currentPower = parseFloat(msg.payload.solar_max_power) || 0;\n\n let newPower;\n let reason;\n\n if (energy > 0 && energy < 20 && production < 15) {\n newPower = currentPower;\n reason = \"Keine Anpassung nötig\";\n } else if (energy > 50) {\n newPower = currentPower + energy;\n reason = \"Direkte Anpassung bei hohem Verbrauch\";\n } else if (currentPower <= 200 && energy >= 25) {\n newPower = currentPower + 5;\n reason = \"Kleine Anpassung (+5W)\";\n } else if (currentPower > 200 && energy >= 25) {\n newPower = currentPower + energy;\n reason = \"Direkte Anpassung bei Leistung > 200W\";\n } else if (production >= 15) {\n const reduction = Math.min(production, currentPower - 100);\n newPower = currentPower - reduction;\n reason = \"Überproduktion\";\n } else {\n newPower = currentPower;\n reason = \"Keine Anpassung nötig\";\n }\n\n newPower = Math.round(newPower / 5) * 5;\n newPower = Math.max(50, Math.min(700, newPower));\n\n return {\n payload: newPower,\n entity_id: 'number.solar_max_power',\n debugInfo: {\n energy,\n production,\n currentPower,\n newPower,\n reason,\n adjustment: newPower - currentPower\n }\n };\n}\n\nreturn calculateNewSolarPower(msg);","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":280,"wires":[["feb536f57104415f","dfac0a66810fe764","b475031ddab95796"]]},{"id":"feb536f57104415f","type":"api-call-service","z":"82c8f4f6d6c3e41e","name":"Setze EZ1-M Leistung","server":"97162e72.b6a46","version":7,"debugenabled":false,"action":"number.set_value","data":"{\"entity_id\":\"{{entity_id}}\",\"value\":\"{{payload}}\"}","dataType":"json","x":900,"y":160,"wires":[["8db61550908ce56c"]]},{"id":"dfac0a66810fe764","type":"debug","z":"82c8f4f6d6c3e41e","name":"Debug Calculation","active":false,"x":890,"y":280,"wires":[]},{"id":"8db61550908ce56c","type":"debug","z":"82c8f4f6d6c3e41e","name":"Debug Response","active":false,"x":890,"y":100,"wires":[]},{"id":"b475031ddab95796","type":"debug","z":"82c8f4f6d6c3e41e","name":"Debug Details","active":false,"x":880,"y":220,"wires":[]},{"id":"a099a2c8924e62ef","type":"inject","z":"82c8f4f6d6c3e41e","name":"6Hz","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"6","x":90,"y":160,"wires":[["50c7c19403d3fb15","bc76d6b42fad45bf","e9ae83fcac900a15"]]},{"id":"97162e72.b6a46","type":"server","name":"Home Assistant","addon":true}]
Dieser Flow regelt die Einspeisung von Solarstrom in dein System und passt die maximale Leistung dynamisch an, abhängig von deinem Stromverbrauch, der Stromerzeugung und weiteren Faktoren. Lass uns den Flow Schritt für Schritt durchgehen:
1. Periodisches Auslösen des Flows
- Node:
Inject Node (6Hz)
- Dieser Node sendet alle 6 Sekunden ein Signal, um den Flow zu starten.
- Dadurch wird regelmäßig überprüft, ob eine Anpassung der Einspeiseleistung nötig ist.
2. Abrufen von Sensorwerten
Der Flow fragt drei Sensoren ab:
3. Zusammenführen der Daten
- Node:
Join Node (Zusammenfassen der Payloads)
- Hier werden die drei abgerufenen Daten (Stromverbrauch, Stromerzeugung und maximale Leistung) in einer einzigen Nachricht (
msg.payload
) zusammengeführt.
- Der Flow wartet, bis alle drei Sensorwerte abgerufen sind, bevor er fortfährt.
4. Berechnung der neuen maximalen Leistung
- Node:
Function Node (Berechne neue EZ1-M Leistung)
- In diesem Node wird eine Funktion verwendet, um die neue maximale Leistung für den Einspeiseregler zu berechnen. Die Berechnung basiert auf verschiedenen Bedingungen:
- Keine Anpassung: Wenn der Stromverbrauch niedrig (zwischen 0 und 20 W) ist und die Solarproduktion unter 15 W liegt.
- Erhöhung der Leistung: Wenn der Stromverbrauch über 50 W liegt, wird die maximale Leistung um diesen Wert erhöht.
- Kleine Anpassung: Wenn die aktuelle Leistung unter 200 W liegt und der Stromverbrauch über 25 W ist, wird die Leistung um 5 W erhöht.
- Überproduktion: Wenn die Solarproduktion über 15 W liegt, wird die Leistung reduziert, um eine Überproduktion zu vermeiden.
- Rundung: Die berechnete Leistung wird auf die nächsten 5 W gerundet und in einem Bereich von 50 W bis 700 W begrenzt.
5. Setzen der neuen maximalen Leistung
- Node:
api-call-service (Setze EZ1-M Leistung)
- Dieser Node setzt die berechnete neue maximale Leistung (
number.solar_max_power
) über eine Home Assistant Service-API.
- Dadurch wird der Einspeiseregler entsprechend angepasst.
6. Debugging und Überwachung
- Nodes:
Debug Nodes (Debug Calculation, Debug Response, Debug Details)
- Diese Nodes dienen zur Überprüfung und Fehlerbehebung. Sie zeigen Details der Berechnung sowie die gesetzten Werte im Debug-Fenster an.
- Debug Details gibt dir eine detaillierte Übersicht darüber, welche Berechnungen durchgeführt wurden und was die Gründe für die Anpassung waren.
Zusammengefasst:
Der Flow überwacht deinen aktuellen Stromverbrauch und die Solarstromproduktion und passt die maximale Einspeiseleistung automatisch an, um eine optimale Nutzung der Solarenergie zu gewährleisten. Er verhindert sowohl Überproduktion als auch unnötige Einspeisung ins Netz, indem er die Leistung dynamisch reguliert.
Das Ziel des Flows ist es, möglichst effizient mit deinem Strom umzugehen und unnötige Einspeisung zu vermeiden, was dir potenziell Kosten spart und dein System optimal ausnutzt.