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 185 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

Out of scope:

  • move dirty api to web socket
  • move site meters to global config, identified by type (grid, pv, battery, aux)
  • show/update meter configuration when device fails during startup
  • allow saving broken devices (RCT)

→ moved out-of-scope tasks to epic #6029

@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
21 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
@andig
Copy link
Member

andig commented Jun 2, 2024

evcc migrate --clean

Ich habs jetzt reset genannt- ok?

cmd/setup.go Show resolved Hide resolved
@andig andig mentioned this pull request Jun 2, 2024
3 tasks
@naltatis
Copy link
Member Author

naltatis commented Jun 3, 2024

Ich hab ein paar Anpassungen an der Migration gemacht. Nun startet es auch und kopiert die richtigen Daten.

Allerdings funktioniert --reset nicht. Meine Vermutung ist, dass db.Instance.Save nicht löscht, nur hinzufügt oder aktualisiert. Magst du noch mal schauen?

@andig
Copy link
Member

andig commented Jun 3, 2024

Wohl so ein ORM-Ding. Ich schaus an. An der Stelle müssen wir ja leider echt löschen- leer setzen reicht nicht.

cmd/setup.go Outdated
func configureModbusProxy(conf []globalconfig.ModbusProxy) error {
// migrate settings
if settings.Exists(keys.ModbusProxy) {
if err := settings.Yaml(keys.ModbusProxy, &conf); err != nil {
Copy link
Member Author

Choose a reason for hiding this comment

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

Der hier schlägt fehl, wenn ich evcc migrate aufrufe und dann starte. In der DB steht unter dem Key der Wert []

Copy link
Member

Choose a reason for hiding this comment

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

Was ja richtig ist- eine leere Liste von Modbus Proxies.

Copy link
Member Author

Choose a reason for hiding this comment

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

Jo, schlägt beim lesen trotzdem fehl. Kannst du mit der demo.yaml testen.

@naltatis
Copy link
Member Author

naltatis commented Jun 5, 2024

@andig die --reset Änderung funktioniert bei mir noch nicht. Ich bekomme folgendes:

go run main.go --config cmd/demo.yaml migrate --reset

[main  ] INFO 2024/06/05 09:09:10 evcc 0.0.0
[main  ] INFO 2024/06/05 09:09:10 using config file: cmd/demo.yaml
[db    ] INFO 2024/06/05 09:09:10 using sqlite database: /Users/michael/.evcc/evcc.db
[main  ] WARN 2024/06/05 09:09:10 resetting:
[main  ] DEBUG 2024/06/05 09:09:10 - global settings
panic: runtime error: slice bounds out of range [15:1:]

goroutine 1 [running]:
slices.Delete[...](...)
	/opt/homebrew/Cellar/go/1.22.1/libexec/src/slices/slices.go:219
github.com/evcc-io/evcc/server/db/settings.Delete({0x102b30b09, 0x8})
	/Users/michael/lab/evcc/server/db/settings/setting.go:81 +0x324
github.com/evcc-io/evcc/cmd.runMigrate(0x1067a3900, {0x14000a8bdd0?, 0x4?, 0x102b207e9?})
	/Users/michael/lab/evcc/cmd/migrate.go:44 +0x1f0
github.com/spf13/cobra.(*Command).execute(0x1067a3900, {0x1400112f780, 0x3, 0x4})
	/Users/michael/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:987 +0x828
github.com/spf13/cobra.(*Command).ExecuteC(0x1067a52e0)
	/Users/michael/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1115 +0x344
github.com/spf13/cobra.(*Command).Execute(...)
	/Users/michael/go/pkg/mod/github.com/spf13/cobra@v1.8.0/command.go:1039
github.com/evcc-io/evcc/cmd.Execute()
	/Users/michael/lab/evcc/cmd/root.go:103 +0x24
main.main()
	/Users/michael/lab/evcc/main.go:44 +0x38
exit status 2

Korrektur: Sie funktioniert, wenn es nichts zu löschen gibt, aber das ist ja nicht der Anwendungsfall hier. 😄

@naltatis
Copy link
Member Author

naltatis commented Jun 5, 2024

Ich hab dirty via Websocket mal auf "later" verschoben. Das ist ein Thema was wir schön isoliert angehen können und der jetzige Stand funktioniert ja.

@naltatis
Copy link
Member Author

naltatis commented Jun 7, 2024

"Startup Error" Nachrichtauf Hauptscreen + Red Badge in Navigation

Bildschirmfoto 2024-06-07 um 09 45 19

@naltatis
Copy link
Member Author

naltatis commented Jun 7, 2024

@andig meine Todoliste hier ist jetzt leer. Wenn die Fehler aus dem Migrationscommand behoben sind können wir den mMn. reinnehmen.

@andig
Copy link
Member

andig commented Jun 7, 2024

Panic auch behoben. Man muss es halt auch richtig machen :) Wir könnten das jetzt als :testing Docker releasen?

@naltatis
Copy link
Member Author

naltatis commented Jun 7, 2024

... oder mutig zu nem Nightly machen. Wir haben die Änderungen ja so umgebaut, dass eigentlich nichts Breaking sein sollt

@naltatis
Copy link
Member Author

naltatis commented Jun 7, 2024

Panic auch behoben.

Confirm. Löschen klappt jetzt wie erwartet.

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