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

Fix wrong time display #17834

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft

Conversation

Maschga
Copy link
Contributor

@Maschga Maschga commented Dec 20, 2024

Fix #17704

Hi,
dieser PR soll den richtigen Timestamp anzeigen, wenn bei den wiederholenden Plänen die Ladezeit über die festgelegte Zeit hinausgeht.
Diese Implementierung funktioniert soweit schonmal. Ich weiß aber nicht, ob alle Use Cases abgedeckt sind, da wäre es super, wenn ihr auch einmal austestet was geht.

Vielen Dank für das tolle Projekt!
~Maschga

@naltatis naltatis self-assigned this Dec 20, 2024
@naltatis naltatis added the bug Something isn't working label Dec 20, 2024
@andig
Copy link
Member

andig commented Dec 21, 2024

Mir ist nicht klar, wie die Lösung hier aussieht. Alle Werte zwischenspeichern? Was ist denn der Root Cause des aktuellen Issues?

@Maschga
Copy link
Contributor Author

Maschga commented Dec 21, 2024

Die wiederholenden Pläne speichern für die Zieluhrzeit keinen Timestamp, sondern Wochentag + Uhrzeit. Deshalb müssen die Timestamp-Zieluhrzeiten der wiederholenden Pläne errechnet werden.
Eine Annahme dafür ist, dass diese Zieluhrzeit (logischerweise) in der Zukunft liegt.
Zudem wird für jede Iteration auf dem Loadpoint die Zieluhrzeit jedesmal neu errechnet, da es sein kann, dass der Benutzer etwas an dem wiederholenden Plan geändert hat.

Wenn jetzt aber ein Auto mit einem wiederholenden Plan geladen wird und das Laden über die vom Benutzer gewünschte Zielzeit hinaus geht (also länger dauert, als evcc angenommen hat), dann wwäreird ab dem Zeitpunkt, bei dem die Zielzeit überschritten wird, diese Zielzeit in der Vergangenheit. Weil aber die Logik annimmt, dass die Zieözeit in der Zukunft liegen muss, wird ab sofort die Zielzeit auf den nächstgelegenen Wochentag geschoben, was zu diesem Fehler führt.

@naltatis hat den Vorschlag gemacht, den Soc und die Zielzeit zwischenzuspeichern, um den oben beschriebenen Fall zu umgehen. Das funktioniert in meiner Implementierung schon, aber bei Änderungen am Plan müssten noch die Variablenwerte angepasst werden. Da habe ich noch keine gute Lösung gefunden.

@Maschga
Copy link
Contributor Author

Maschga commented Dec 21, 2024

Hier ist diese Logik implementiert: https://github.com/evcc-io/evcc/blob/master/util%2Ftime.go#L9

@andig
Copy link
Member

andig commented Dec 22, 2024

Wir haben ja schon die planActive Variable. Könnten wir die nutzen (oder die auf plan- als Pointer zum Plan- und planActiveSlot: bool aufsplitten) anstatt zwei neue hinzu zu fügen? Solange der alte Plan nicht fertig ist würde dann der plan weiter verwendet. Nach der Zielzeit wird ohnehin schnell geladen, ein folgender Plan könnte also auch nichts Besseres bewirken.
Wie sollen Änderungen eines aktiven Plans behandelt werden? Gilt dann die geänderte Variante?

@Maschga
Copy link
Contributor Author

Maschga commented Dec 22, 2024

Eine Variable zu nutzen, um den Plan zu speichern, gefällt mir gut.
Wie mit einer Änderung umgegangen werden soll, bin ich mir noch nicht sicher. Ich weiß nicht, was in einem solchen Fall der Nutzer erwarten würde.

_, soc, _ := lp.nextVehiclePlan()
lp.planActiveSoc = soc
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Diese implizite Zustandsveränderung in einem Getter ist nicht gut und von außen nicht erwartbar.
Das Setzen und Zurücksetzen von lp.planActiveSoc und lp.planActiveTime sollte immer in Sync mit lp.planActive passieren. Ggf. können wir die Notwendigkeit für planActive sogar ersetzen bzw. daraus ableiten ob es eine planActiveTime gibt.

@naltatis
Copy link
Member

oder die auf plan- als Pointer zum Plan

Das ist nicht ganz so einfach. Ein Plan Objekt auf das wir verweisen können gibt es in der Form ja nicht. Die aktuelle Planzeit und das Ziel (SoC o. kWh) kann momentan drei Quellen haben:

  • kWh Plan am Ladepunkt (Energie + Zeitpunkt)
  • fester SoC Plan am Fahrzeug (SoC + Zeitpunkt)
  • wiederholender SoC Plan am Fahrzeug (SoC + Wochentagsregel)

Daher ist der Weg, dass wir uns das konkrete Ziel und Zeit beim beginnen der Ladung als primitiven merken schon gut. Wir müssen hier nur die Schreiblogik beieinander halten, dass wir keine inkonsistenten Zustände bekommen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

UI Planner falsche Anzeige wenn Ziel nicht erreicht.
3 participants