Skip to content
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

Circuits: review and validate logic from #20183 #20365

Open
andig opened this issue Apr 4, 2025 · 5 comments
Open

Circuits: review and validate logic from #20183 #20365

andig opened this issue Apr 4, 2025 · 5 comments

Comments

@andig
Copy link
Member

andig commented Apr 4, 2025

See #20183, #19166 (comment):

Je länger ich drüber nachdenke, desto mehr frage ich mich ob hier nicht an der falschen Stelle eingegriffen wird. Warum sollte sich der Circuit darum scheren, ob etwas lädt? Müsste nicht stattdessen der Ladepunkt schon vorher sicherstellen, dass nur "echte" Anforderungen umgesetzt und an den Circuit geschickt werden? Ein bisschen analog #20286 wäre es vllt. besser den Algorithmus für Stromfreigabe anzupassen statt retrospektiv Korrekturen durchzuführen.

Weiterhin:

/cc @mfuchs1984 @premultiply

@andig andig changed the title Review and validate logic from #20183 Circuits: review and validate logic from #20183 Apr 4, 2025
@andig
Copy link
Member Author

andig commented Apr 4, 2025

@mfuchs1984 magst Du Dich mal bei uns auf Slack melden?

@mfuchs1984
Copy link
Contributor

@andig @premultiply, mir kam gerade noch eine Erkenntnis, die ich für essentiell halte:

  • ValidateCurrent bekommt als old lp.chargeCurrents übergeben, was dem vorher freigegeben Strom entspricht
    currentLimit := lp.circuit.ValidateCurrent(lp.chargeCurrent, chargeCurrent, lp.charging())
  • ValidatePower dagegen bekommt lp.chargePower, das der aktuellen gemessenen Ladeleistung entspricht, als old
    powerLimit := lp.circuit.ValidatePower(lp.chargePower, currentToPower(chargeCurrent, activePhases), lp.charging())

-> schaut für mich nach einem Fehler in der Initialen Implementierung aus, ggf. durch die Bennennung von lp.chargeCurrent, diese lässt meinen es wäre der aktuelle Ladestrom, wahrend es eigentlich der freigegebe Ladestrom ist. Übergibt man überall die gemessenen Werte, also bei ValidateCurrent max(lp.chargeCurrents[0], lp.chargeCurrents[1], lp.chargeCurrents[2]) statt lp.chargeCurrent, dann entfällt der charging Parameter und die potential Berechnung ist korrekt, #19166 wäre so nie passiert.

Und hier mich ein paar lose Gedanken:

  • bei ValidatePower ist der Aufruf korrekt. In Verbindung mit charger ohne Meter gibt's aber ein Problem mit der Reihenfolge der Funktionsaufrufe, die dafür sorgt, dass das load management nicht funktioniert, siehe Lastmanagement: charger flapping on and off - evaluates 0W->7360W twice #19473 (comment)
  • möglicherweise gibt's einen Konflikt zwischen load management und loadpoint priority, wenn mehrere loadpoints im gleichen circuit sind? Wenn der erste den circuit auslastet, bekommt der zweite auch bei höherer Priorität nichts ab, wenn ich mich nicht irre, da ValidatePower und ValidateCurrent nichts freigeben.

@mfuchs1984
Copy link
Contributor

Wenn ich nicht ganz falsch liege, könnte der ganze Aufwand umsonst gewesen sein und es hätte einfach nur der falsche Parameter korrigiert werden müssen 😒 😀

@premultiply
Copy link
Member

In der Tat ist die Bezeichnung lp.chargeCurrent für die Stromvorgabe vs lp.chargeCurrents / lp.chargePower maximal unglücklich und verwirrend.
Da bekomme ich auch einen Knoten ins Hirn.

Da wäre lp.maxCurrent oder lp.offeredCurrent wohl eine passendere Bezeichnung...

@mfuchs1984
Copy link
Contributor

lp.offeredCurrent oder lp.currentOffered wären für mich am intuitivsten.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants