-
-
Notifications
You must be signed in to change notification settings - Fork 670
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Kostal Plenticore: add battery control #15709
Kostal Plenticore: add battery control #15709
Conversation
Wo ist denn der Unterschied zwischen Case 1 (normal) und Case 2 (hold)? Beides setzt den Wert auf 0, verstehe die Logik dahinter nicht, warum man dafür dann zwei identische Codeblöcke braucht. Oder hab ich was übersehen? Und zweite Frage: bei mir ist der Plenticore per default auf little-endian eingestellt, würde das dann überhaupt funktionieren? Oder sollte da im WR ohnehin big-endian eingestellt werden? |
Der Unterschied ist im Issue bereits erwähnt. Zusätzlich wird beim Case 1 der für Case 2/3 nötige Watchdog für das regelmäßige Schreiben zurückgesetzt. Ein Vorteil ergibt sich bei der Regelung, da die Batterieladung nicht sofort endet, sondern ein paar Sekunden benötigt. Dies ist dann nach Beobachtungen für die Übergangszeit bis zur Übernahme der internen Regelung günstig. |
Ja big/little endian kann man einstellen in evcc. Sollte man auf little endian einstellen, auch bei den kostal WR, da sonst im KSEM riesige und damit falsche Werte angezeigt werden. |
@deadrabbit87 nach Blick auf den PR it nicht offensichtlich, was man sonst noch tun könnte. Anscheinend lässt sich der WR nicht "per Befehl" wieder in den Normalmodus versetzen? Falls doch müsste dieses Kommando mit in case 1 rein. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove min/max soc
Nein, das geht nicht. Ich habe kein Register gefunden, mit dem man den WR wieder in den internen Modus schalten kann. |
Die Lösung ist doch arg unglücklich. Es sollte möglich sein, eine Entladesperre zu setzen ohne dabei die Ladung zu bedindern. Wenn wir das so mergen sind die nächsten Fehlermeldungen schon vorprogrammiert :/ |
Der WR kann ja auch Sunspec. Hat mal jemand probiert, ob es damit das gewünschte Verhalten gibt? |
Ja hab ich. Hatte diesbezüglich auch schon Kontakt mit Kostal. Leider ist eine Steuerung der Batterie über Sunspec nicht implementiert. Also leider Sunspec-Mogelpackung.... Ich finde es auch blöd, aber ich weiß leider keine andere Lösung. |
@andig Ich wollte den Vorschlag gemacht haben, als eine Ausweichlösung. Die Diskussionen hatte ich zuvor nach Sunspec durchsucht, und die damaligen Antworten von @deadrabbit87 führen zu keiner abweichenden Lösung. Ich habe auch nochmal bei Kostal nachgefragt und warte auf eine Antwort. Prinzipiell fehlt das Register, um die Netzladung zu erlauben/zu verbieten durch Kostal: analog zu ChaGriSet. Also zurück zum ursprünglichen Vorschlag oder als alternatives Template die batterymode Implementierung auf Register 1028/1036 anbieten? Nebenbei gefragt, wäre es eigentlich richtiger den PR als Draft zu bearbeiten? |
@andig Eine andere Option liegt im Verhalten des Watchdog? Wenn beim Wechsel in einen BatteryMode eine Ruhephase für die Reaktivierung der internen Steuerung abgewartet werden könnte, müsste man die Werte nicht selbst zurücksetzen (charge->hold). Dann wäre ein Schreiben des Registers für die Entladeleistung (Register 1040) für batteryHold ausreichend. Ich habe auf die Schnelle Fragmente für einen Ansatz im Quelltext des Watchdog gefunden, die darauf hindeuten, das ihr das vielleicht dort vorgesehen habt (flagBatteryModeWait)? |
Ich verstehe nur Bahnhof- kann leider den Registern nicht folgen. |
Normal: die Null ist aktuell ja nur bis zum Timeout, vernachlässigbar: die Regelung ist gerade nach dem erzwungenen Netzladen träge, da der Ladestrom intern im WR langsam heruntergefahren wird. Hold: leider ist das minsoc/maxsoc schreiben gar nicht das Problem: es hat nur leider die Wirkung, das die Daten, die im Charge-Modus vorher ins andere Register geschrieben wurden, weiterhin intern gesetzt bleiben. Daher muss der Ladewert per 0 in das Laderegister mindestens einmalig (!) zurückgesetzt werden. Weil das aber einmalig mit dem Watchdog nicht geht, lädt der WR überhaupt nicht mehr. Charge: die Laderegister (1028/1036) sind nach meiner Auffassung redundant, beide regeln relativ die Ladeleistung, also in Prozent vom erlaubten Wert: Strom oder Leistung je nach Register @andig Was ich gemeint habe: ein ähnlicher Mechanismus (reset), der für eine gewisse Zeit im Watchdog keine neuen Modbus-Nachrichten schreibt - insbesondere im Modus HOLD, würde andere Wege ermöglichen. |
Gibts leider nicht :/
Was spricht gegen 100? Oder entlädt der dann ins Netz?
Kann da nicht auch 100 geschrieben werden? |
Du brauchst min und max, bei "normal" muss ja wieder auf min zurück gestellt werden. Siehe #15927 |
Das haben wir ja auch so bei anderen WR implementiert. Würde diese Variante im Zweifelsfall immer vor den meist auch noch persistenten SoC-Spielereien, die man auch wieder richtig(?) zurückschreiben muss immer bevorzugen. |
Danke für dein Feedback. Ich brech' mir die Finger, das anders hinzubekommen, aber es klappt einfach nicht vernünftig. @andig
Ich würde also gerne auf die Implementierung für das Ladeleistungsregister (1028 oder 1036) zurückfallen. Es ist die Frage zu klären, ob der Wechsel der Implementierungslogik (limitsoc/batterymode) gewünscht ist, oder ob nur die batterymode-Registersteuerung des initialen PR angewandt werden soll. Ich bevorzuge die erste und einfachste Implementierung, also nur Register 1028. Mit dem dann NORMAL/HOLD/CHARGE möglich sind. Den Fehler aus den Tests würde ich in einem neuen Commit beseitigen... |
Für Hold einfach nur 1040 (Battery max. discharge power limit, absolute) wie beim SMA SBS auf 0 setzen? Der Watchdog-Timeout im WR sollte recht niedrig eingestellt werden (10s ?), der zugehörige Template-Parameter hier entsprechend um eine zügige Rückkehr in den Normalbetrieb zu ermöglichen. |
Genau so hätte ich es auch gemacht... |
Das hat zwar von der Idee die richtige Wirkung, wird aber dadurch unmöglich, dass der Watchdog des WR nicht einzelne Register schützt, sondern alle Modbus (write)-Register. Bedeutet leider, der Ladewert aus dem CHARGE bleibt auch aktiv (-100) und lädt ständig aus dem Netz/PV weiter: solange irgendein Register beschrieben wird. |
Das ist eine gute Idee. Bei der Steuerung hab ich aber bemerkt, dass die Batterieleistung träge von Ladung/Entladung wechselt. Ich glaube, es ist nicht sehr wirksam den Timer zu reduzieren, aber das kann per Parameter der Anwender entscheiden: 30s klingt interessant, probiere ich mal aus |
Das ist völlig irrelevant. Er muss kleiner sein als der WR erwartet, alles andere hängt am WR. |
Ja, dafür welches Register ist es irrelevant und führt in der Fragestellung am Ergebnis der Netzladung vorbei. Natürlich wäre der Timeout am WR entsprechend auch zu verringern. Ich finde das Timing ist zu vernachlässigen. In der Fragestellung sollten wir uns auf den Punkt konzentrieren, welche Register beschrieben werden, und welche Nebenwirkungen tolerierbar sind: unkontrollierten Weiterbezug aus dem Netz zu vermeiden, hat Priorität vor der Verschwendung von PV Energie im HOLD Modus. |
@premultiply warum die Änderung des Timeouts? |
Man sollte die Leute hier motivieren kürzere Werte zu wählen damit der WR auch nochmal zeitnah seinen Normalbetrieb fortsetzt. 10s ? Völlig egal, sollte halt nicht zu lang sein. Aber ich hänge da wirklich nicht dran. |
Warum? Je kürzer der Timeout, desto höher die Wahrscheinlichkeit, dass am Ende der Updatephase einer gesetzt wird. Das führt dazu, dass der WR eher noch später seinen Normalbetrieb aufnimmt nachdem dann sein Timeout abläuft. Ich halte es generell für sinnvoll, Änderungen gezielt zu machen. Mit dem Timeout gab es hier kein Problem. |
Das bezog sich natürlich meinerseits auf die Timeout-Zeit in der WR-Konfig. Bleibt hier der Standardwert konfiguriert dauert es halt entsprechend "ewig" bis der Normalbetrieb wieder einsetzt. |
Genau. Und wenn man daran etwas ändern will gehört es in die Doku oder ins Template. Ist hier aber OT. |
Hier haben wir nicht aufgepasst. Minsoc/Maxsoc hätten deprecated gesetzt werden müssen statt zu löschen. Vmtl. Ursache von #15971. |
Danke für deine Korrektur! |
Ist das schon korrigiert? |
m.E. commit 7bd213f |
This change adds writing the registers for holding or mains charging the battery for the template.
The changes have been discussed in the context of incident #15508. Prior to these changes, writing was done to register 1042, which has now been replaced by writing to register 1028. As before, external battery management is required to use these functions.
Internal battery management is re-enabled in normal mode by resetting the watchdog.
There are templates for SMA and Fronius, which have already implemented these functions and inspired the changes.
Could you please review and adapt the template?