-
-
Notifications
You must be signed in to change notification settings - Fork 704
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
base: master
Are you sure you want to change the base?
Fix wrong time display #17834
Conversation
Mir ist nicht klar, wie die Lösung hier aussieht. Alle Werte zwischenspeichern? Was ist denn der Root Cause des aktuellen Issues? |
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. 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. |
Hier ist diese Logik implementiert: https://github.com/evcc-io/evcc/blob/master/util%2Ftime.go#L9 |
Wir haben ja schon die |
Eine Variable zu nutzen, um den Plan zu speichern, gefällt mir gut. |
_, soc, _ := lp.nextVehiclePlan() | ||
lp.planActiveSoc = soc |
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.
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.
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:
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. |
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