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

Add schedule for planner #16091

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

Conversation

Maschga
Copy link
Contributor

@Maschga Maschga commented Sep 13, 2024

Fix #5492

Hi,
dieser Draft soll den Support für das Planen für Wochentage hinzufügen.
Dafür fehlt noch folgendes: Ich kenne mich im evcc-System nicht so gut aus. Wenn etwas fehlt, dann bitte mir mitteilen.

  • Backend-Implementierung
  • Tests schreiben
  • Bug fixen: Uncaught (in promise) Maximum recursive updates exceeded in component <ChargingPlanRepetitiveSettingsEntries>. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.. Auslöser ist diese Zeile.
  • (Wie) in Preview Pläne visuell anzeigen?
  • Bug fixen: Siehe Video. Das Dropdown-Menu aktualisiert nur die Daten des dazugehörigen Select-Menus, wenn auf die Checkbox geklickt wird.
bug.mp4
  • Weiteres bitte mitteilen

Vielen Dank für das tolle Projekt!
~ Maschga

@andig
Copy link
Member

andig commented Sep 14, 2024

Was wäre denn hier die Idee fürs API?

@naltatis
Copy link
Member

Wording: Ich würd hier nicht repetetive verwenden. Da steckt von der Bedeutung was "ermüdendes", "monotones" drin. Lass uns repeating nehmen. Sowohl Richtung User als auch im Code.

@naltatis naltatis self-assigned this Sep 14, 2024
@naltatis naltatis self-requested a review September 14, 2024 22:12
@naltatis naltatis added enhancement New feature or request ux User experience/ interface labels Sep 14, 2024
@andig
Copy link
Member

andig commented Sep 15, 2024

Oder einfach Wochenplaner?

@Maschga
Copy link
Contributor Author

Maschga commented Sep 15, 2024

Wie soll ich es jetzt machen? 😅

@naltatis
Copy link
Member

Lass uns bei repeating bleiben.

},
methods: {
fetchRepetitivePlans: async function () {
let response = await api.get(`/loadpoints/${this.id}/plan/repetitive`);
Copy link
Member

Choose a reason for hiding this comment

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

Die Komponente sollte sich nicht selbst die Daten holen. Das Muster was wir standardmäßig verwenden ist, dass wir Schreiboperationen via REST machen die aktualisierten Daten aber über Websockets gepusht werden. Die landen dann im globalen State. Da dieses Feature nur für Fahrzeuge mit SoC verfügbar sein wird sollten wir den Ladeplan auch direkt am Fahrzeug pushen. Siehe hier:

Bildschirmfoto 2024-09-16 um 08 35 18

Damit ist er dann auch gleich über MQTT verfügbar und wir lösen das Problem Datensync zwischen Geräten. Also mehrere offene Browserfenster.

Aktuell veröffentlichen wir den "einmaligen Plan" auch noch nicht am Fahrzeug. Das müssen wir aber in diesem Zuge mit machen. Momentan kommen die aktuellen Plandaten die für die Statusanzeige in der UI und für das Ladeplanformular verwendet werden vom Ladepunkt. Mit der Einführung von mehreren Plänen würde ich am Ladepunkt nur noch die Daten des "als nächstes anstehenden Plans" veröffentlichen. Dass kann ein einmaliger sein, aber auch eine Ladung, die aufgrund einer Wiederholungsregel ansteht. Bislang mussten wir das nicht trennen. Jetzt ist das aber erforderlich.

@@ -285,5 +296,35 @@ export default {
// TODO: handle fahrenheit
return this.fmtNumber(value, 1, "celsius");
},
getShortenedWeekdaysLabel: function (weekdays) {
Copy link
Member

Choose a reason for hiding this comment

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

Hier wären Unittests sicher gut.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

core/vehicle/adapter.go Outdated Show resolved Hide resolved
@naltatis
Copy link
Member

Hi @Maschga, ich hab die Ursache für das Recusionsthema gefunden und gefixt. Das liegt daran, dann in dem Updateprozess immer wieder ein neues Array für die Wochentage erstellt wird. Die MultiSelect Komponente hat bislang nicht den Inhalt, sondern die Objektidentität geprüft. Daher kam es zu schleifen.

Das Thema mit den Wechselwirkungen (Dropdown 1 Änderungen beeinflussen Dropdown 2 Änderungen) hab ich auch gelöst. Die Multiselect-Komponente arbeitet jetzt auch sauber mit Form-IDs.

@naltatis
Copy link
Member

Layout: Hier sollten die Aktionen am Ende der Zeile auf großen Screens immer untereinander und links ausgerichtet stehen.

Bildschirmfoto 2024-10-14 um 10 36 24

@Maschga
Copy link
Contributor Author

Maschga commented Oct 14, 2024

Hi @Maschga, ich hab die Ursache für das Recusionsthema gefunden und gefixt. Das liegt daran, dann in dem Updateprozess immer wieder ein neues Array für die Wochentage erstellt wird. Die MultiSelect Komponente hat bislang nicht den Inhalt, sondern die Objektidentität geprüft. Daher kam es zu schleifen.

Das Thema mit den Wechselwirkungen (Dropdown 1 Änderungen beeinflussen Dropdown 2 Änderungen) hab ich auch gelöst. Die Multiselect-Komponente arbeitet jetzt auch sauber mit Form-IDs.

Vielen, vielen Dank für deine Hilfe, da hätte ich lange gesucht!

@naltatis
Copy link
Member

[ ] Backend-Implementierung
[ ] Preview Pläne visuell anzeigen

Bzw. der Preview, aber auch der eigentlichen Regelung und der Status-Anzeige am Ladepunkt sollten wir so verfahren, dass wir immer den "nächsten Plan" ermitteln. Eine Vorschau mit mehreren Plänen würde ich im ersten Schritt noch nicht machen. Auch das Thema "überschneidende oder eng aufeinanderfolgende Pläne" (Bsp: Mo. 8 Uhr 20%, Mo. 8:01 Uhr 100%) können wir erst einmal ignorieren.

Konkret würde das im Backend eigentlich "nur" bedeuten, dass überall da, wo aktuell der "statische Plan" verwendet wird eine Funktion aufgerufen werden muss, die sich den statischen und die wiederholenden Pläne anschaut und die Daten des Nächstgelegenen wieder zurückgibt. In der UI könnten wir den Titel "Plan Vorschau" in "Nächster Plan" oder "Vorschau nächster Plan" umbenennen.

@Maschga
Copy link
Contributor Author

Maschga commented Oct 14, 2024

Haben wir nicht bereits Zugriff auf den wiederholenden Plan und auf den statischen? Liese sich der nächstfrühere Plan nicht im Frontend berechnen?

@naltatis
Copy link
Member

Liese sich der nächstfrühere Plan nicht im Frontend berechnen?

Ja die werden beide gepublisht. Aber wichtig ist ja vor allem, dass der Planner im Backend das Richtige mit den Plänen anstellt. Da muss die Logik ja ohnehin hin. Slots ausrechnen und Ladung starten macht ja nicht die UI.

@Maschga
Copy link
Contributor Author

Maschga commented Oct 14, 2024

Layout: Hier sollten die Aktionen am Ende der Zeile auf großen Screens immer untereinander und links ausgerichtet stehen.

Passt das so?
screen_small
screen_big

@Maschga
Copy link
Contributor Author

Maschga commented Oct 14, 2024

Konkret würde das im Backend eigentlich "nur" bedeuten, dass überall da, wo aktuell der "statische Plan" verwendet wird eine Funktion aufgerufen werden muss.

Habt ihr für solche Funktionen eine extra Datei im Backend?

@Maschga
Copy link
Contributor Author

Maschga commented Oct 14, 2024

Ja die werden beide gepublisht. Aber wichtig ist ja vor allem, dass der Planner im Backend das Richtige mit den Plänen anstellt. Da muss die Logik ja ohnehin hin. Slots ausrechnen und Ladung starten macht ja nicht die UI.

Sorry, da habe ich deine Nachricht zu schnell gelesen und zu wenig darüber nachgedacht. 🙈

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request ux User experience/ interface
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Planner: add schedule
4 participants