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

Config UI: add missing config sections / partial yaml inputs (BC) #13319

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

Conversation

naltatis
Copy link
Member

@naltatis naltatis commented Apr 6, 2024

Replaces #11739

Goal

  • 🐭 make smaller config chunks (tariff, messages, mqtt, ...) editable via UI instead of complete evcc.yaml.
  • πŸš΄β€β™€οΈ create UI and API (endpoints, persistance and initialization) for all missing config areas in a fast and pragmatic way.

Later steps (seperate PRs)

  • 🎩 Improve UX where necessary (tariff template UI Add tariffs configurationΒ #10042, ...)
  • πŸ“Ÿ Allow yaml-snippets as an alternative UI config option for vehicles, meters, chargers (e.g. to allow plugins)

BC

  • all /api/state durations are now in seconds instead of nanoseconds

Todos

@naltatis naltatis added enhancement New feature or request ux User experience/ interface labels Apr 6, 2024
server/http.go Outdated Show resolved Hide resolved
@naltatis naltatis changed the title Config UI: partial yaml inputs Config UI: add missing config sections / partial yaml inputs Apr 7, 2024
@andig
Copy link
Member

andig commented Apr 8, 2024

@naltatis ich brauche mal eine Idee. ModbusProxy ist eine Liste. Wie wollen wir hier mit Updates umgehen:

  • per Element (ΓΌber Index? ΓΌber Port?) (json je Element)
  • ganze Liste am StΓΌck (json)?
  • andere Ideen?
    WΓ€re super einen Ansatz zu finden, der auch mit anderen Integrationen, z.B. den Push Service funktionieren kann.

Meine Tendenz wΓ€re per Element ΓΌber numerischen Index. Passt das?

@naltatis
Copy link
Member Author

naltatis commented Apr 8, 2024

@andig Im ersten Schritt (dieser PR) würde ich dir nur einen Yaml Block geben und keine Rücksicht auf die innere Struktur nehmen. Heißt, ein Update hat immer ein komplettes Neu-initialisieren zur Folge. Nichts auf Item-Ebene. Gleiches gilt für Messaging. Da ist die Struktur ja noch komplizierter, weil Messages und Services (Liste).

Das ist natΓΌrlich nicht schΓΆn und wir mΓΌssen das frΓΌher oder spΓ€ter sauber als Struktur/Liste ausmodellieren. Aber ich sehe das hier erstmal als einen pragmatischen Zwischenschritt.

@andig
Copy link
Member

andig commented Apr 8, 2024

Passt, das ist hΓ€sslich aber einfach.

@andig andig mentioned this pull request Apr 12, 2024
17 tasks
@andig
Copy link
Member

andig commented Apr 12, 2024

@naltatis die existierenden Site APIs, z.B: buffersoc haben alle keine Getter. Brauchen wir trotzdem GETAPIs fΓΌr die unstrukturierten Werte wie interval? Das erscheint inkonsistent.
Ebenso nutzen die existierenden "einfachen" Handler POST statt PUT. Wir sollten es konsistent machen, nach MΓΆglichkeit mit wenigen Γ„nderungen.

Vorschlag:

  • alles POST (solange wir nicht PUT/POST fΓΌr Einzelteile differenzieren)
  • GET ersetzen wir durch die Daten in /api/state (um das Coding zu vereinfachen fΓ€nde ich es im UI auch sinnvoll die dafΓΌr ΓΌber die Hierarchie einzusammeln statt einzeln zum durchreichen zu deklarieren, aber das ist nur ein "SchΓΆnheitsthema").
  • bei POST wird sofort die YAML Struktur ΓΌberprΓΌft, das erspart Überraschungen beim Neustart.

Wenn das passt mΓΌssen wir noch die Settings initial migrieren und dann nur noch aus der DB lesen.

@andig andig added the prio Priority label Apr 14, 2024
@andig andig changed the title Config UI: add missing config sections / partial yaml inputs Config UI: add missing config sections / partial yaml inputs (BC) Apr 14, 2024
cmd/root.go Outdated
@@ -192,7 +190,7 @@ func runRoot(cmd *cobra.Command, args []string) {

// setup database
if err == nil && conf.Influx.URL != "" {
Copy link
Member Author

Choose a reason for hiding this comment

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

@andig ich musste den !== "" Check wieder reverten. Ohne den stoppt das Publishing und die UI bekommt keine Werte Updates. Dadurch sind auch die e2e Tests kaputt gegangen.

@naltatis
Copy link
Member Author

WIP: configure, restart, fail, fix, restart, success cycle πŸŽ‰

startup.error.mp4

@andig
Copy link
Member

andig commented May 22, 2024

Sieht super aus! Mit der error class solltest du auch direkt mqtt rot highlighten kΓΆnnen?

@naltatis
Copy link
Member Author

Wo finde ich die? Ich hab nur was in 'fatal' gesehen.

@andig
Copy link
Member

andig commented May 23, 2024

Aber jetzt:

{
  "result": {
    "auth": {
      "vehicles": {}
    },
    "fatal": {
      "class": "mqtt",
      "error": "failed configuring mqtt: error connecting: network Error : dial tcp: lookup foo.bar: no such host"
    },
    "influx": {},
    "interval": 3,
    "loadpoints": [],
    "mqtt": {
      "topic": "evcc"
    },
    "network": {
      "schema": "http",
      "host": "evcc.local",
      "port": 7070
    }
  }
}

Falls es ein Fehler eines GerΓ€tes ist kommt auch der GerΓ€tename als device mit raus.

@andig
Copy link
Member

andig commented May 23, 2024

bich musste den !== "" Check wieder reverten. Ohne den stoppt das Publishing und die UI bekommt keine Werte Updates. Dadurch sind auch die e2e Tests kaputt gegangen.

Den brauchen wir aber- sonst funktioniert die Migration des Settings nicht. Mir ist nicht klar, was da stoppen sollte? Evtl. vorherige Fehlmigration? Aber auch dann sollte nix stoppen!

@naltatis
Copy link
Member Author

Evtl. vorherige Fehlmigration?

Ne, das passiert auch bei einer neuen Installation (siehe E2E tests). Du kannst das ja einfach reproduzieren.

@andig
Copy link
Member

andig commented May 23, 2024

Hab ich kein Problem. Welches konkrete Peoblem hast du denn?

@andig
Copy link
Member

andig commented May 23, 2024

@naltatis ich sehe kein Problem nach revert:

[site  ] DEBUG 2024/05/23 19:20:25 set battery mode: normal
[influx] ERROR 2024/05/23 19:20:26 write failed (attempts 1): Post "http://foo.bar/api/v2/write?bucket=bar&org=foo&precision=s": dial tcp: lookup foo.bar: no such host
[site  ] DEBUG 2024/05/23 19:20:28 ----
[lp-1  ] DEBUG 2024/05/23 19:20:28 charge power: 4600W
[lp-2  ] DEBUG 2024/05/23 19:20:28 charge power: 0W
[site  ] DEBUG 2024/05/23 19:20:28 pv power: 8088W
[site  ] DEBUG 2024/05/23 19:20:28 battery soc: 55%
[site  ] DEBUG 2024/05/23 19:20:28 battery power: 0W
[site  ] DEBUG 2024/05/23 19:20:28 grid meter: -2996W
[site  ] DEBUG 2024/05/23 19:20:28 site power: -2996W
[lp-2  ] DEBUG 2024/05/23 19:20:28 charger status: B

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

Successfully merging this pull request may close these issues.

None yet

8 participants