evcc-io / evcc

Sonne tanken ☀️🚘
https://evcc.io
MIT License
3.54k stars 653 forks source link

Integration in Home Assistant als Addon #235

Closed Tscherno closed 3 years ago

Tscherno commented 4 years ago

Home-Assistant (genau genomme Hass.io) bietet die Möglichkeit Addons ins Frontend zu integrieren und vollständig über HA zu verwalten. Dazu müssen die Applikationen als speziell angepasste Dockercontainer bereitgestellt werden. Es wäre genial, wenn das für evcc klappen würde.

Beispiel für Grafana: https://github.com/hassio-addons/addon-grafana/

grafik

issue-label-bot[bot] commented 4 years ago

Issue-Label Bot is automatically applying the label feature_request to this issue, with a confidence of 0.90. Please mark this comment with :thumbsup: or :thumbsdown: to give our bot feedback!

Links: app homepage, dashboard and code for this bot.

andig commented 4 years ago

Da ich kein hassio verwende müsste dieser Beitrag aus der Community kommen. Welchen Wert würde dieses Addon bringen, außer dass das UI integriert wäre?

Tscherno commented 4 years ago

OK, war erstmal nur als Ideensammlung gedacht. Ich schaue mir das Thema an. Wie funktioniert dein Dockerimage? Zieht sich das automatisch das aktuellste Release von Github?

andig commented 4 years ago

Ein Dockerimage ist ein Release. Ein neues ziehen musst Du selber. Aber im Ernst: was ist der Nutzen eines Hassio Dockers? Ich habs nicht rausgefunden 😳

Tscherno commented 4 years ago
  1. Zugriffschutz über HA
  2. Integration in HA - eine UI für alles rund ums smarte Home
  3. Zugang über HA, wenn ein Reverse Proxy / Cloud eingerichtet, klappt es von überall
  4. Installation und Updates über Webinterface
  5. Riesige Benutzerbasis
  6. Editieren des Configfiles über Webinterface
  7. Integration in HA Apps
andig commented 4 years ago

Spannend- die ganzen Infrastrukturthemen sind gute Argumente. Die Zielgruppe- EV Nutzer die evcc einsetzen und dann auch noch HA haben dürfte sehr klein sein :O. Der Aufwand allerdings auch- anscheinend braucht es nicht mehr als eine config.json. Falls Du dafür einen Vorschlag machen möchtest könnte ich Dir helfen wir ein entsprechendes Docker Image gebaut werden könnte. Wenns fertig ist und funktioniert können wir das gerne hier integrieren.

Tscherno commented 4 years ago

Die Zielgruppe- EV Nutzer die evcc einsetzen und dann auch noch HA haben dürfte sehr klein sein

Anders rum wird ein Schuh draus: Es gibt sehr viele HA Nutzer die auch EV haben und evcc gar nicht kennen. Ich bin auch nur zufällig über das tolle Projekt gestolpert.

Ich schaue auf jeden Fall mal, wie weit ich komme. Ich habe schon ein paar Container gebaut, aber noch nie spezifisch für HA.

Ich denke der Knackpunkt für die eigentliche Veröffentlichung ist dann die (fehlende) Mehrsprachigkeit des Frontend. Oder habe ich da was übersehen?

andig commented 4 years ago

@Tscherno wie startest Du das eigentlich? Mir fehlt das "Supervisor" control unten wenn ich homeassistant/home-assistant auf dem Mac launche?

Tscherno commented 4 years ago

Das geht nur wenn Du Hass.io verwendest. Das ist ein fertiges OS mit Supervisor, der eben die Addons verwaltet. Bei mir läuft das virtualisiert auf der Synology. Ursprünglich war es als fertiges Raspberry-Image gedacht.

Tscherno commented 4 years ago

Mittlerweile heisst HASS.io auch nur noch Home Assistant und ist die bevorzugte Variante.

Home Assistant vs. Home Assistant Core

Home Assistant Core is a Python program, in simple words. It can be run on various operating systems and provide the ability to track, control and automate your devices. When people talking about Home Assistant Core they usually refer to a standalone installation method.

Home Assistant is a combination of Home Assistant Core and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first. Home Assistant is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a Home Assistant Core setup.

Be aware that add-ons are only available in regular Home Assistant installations.

andig commented 4 years ago

Wie installierst Du denn das virtualisierte Hass.io? Ich kann dazu nix finden, es sei denn für Ubuntu. Scheint jedenfalls ein tieferer Eingriff zu werden den ich mir nicht antun möchte.

Tscherno commented 4 years ago

https://www.home-assistant.io/hassio/installation/

bei Virtual Appliance gibt's fertige Disk-Images.

stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

henning89 commented 4 years ago

@Tscherno Arbeitest du noch an dem Home Assistant Addon? Ich habe Home Assistant bereits am laufen (auf einem Raspi 4b) und würde gegebenenfalls noch etwas abwarten, wenn ich mir dafür eine separate EVCC Installation ersparen kann.

cathiele commented 4 years ago

Moin @henning89 kannst du mal versuchen ob du das addon in hass.io mit diesem Custom Repository https://github.com/cathiele/evcc installieren kannst? ich habe das gerade mal versucht aber mein test hass.io ist nur ein alter RPI und der hat nicht genug Speicher um evcc zu bauen. dein Raspi 4b sollte das aber hinbekommen

andig commented 4 years ago

@cathiele ich hab mir Deinen Fork angeschaut- damit ginge ja nicht mehr als das UI aufzurufen. Ich hatte irgendwie die Hoffnung, dass sich mit Integration mehr erreichen ließe, z.B. dass auch /api direkt in hassio einbindbar wäre. Gibt die Integration das prinzipiell her?

Caibuk commented 4 years ago

Das UI in Home Assistant aufzurufen ist genau der Sinn dieser Integrationsmöglichkeit. Damit kann man nämlich die Sicherheit der Home-Assistant-Anmeldung für den Aufruf von unterwegs nutzen. Für eine Funktionsintegration könnte man eine Custom Integration so ähnlich wie diese hier https://www.home-assistant.io/integrations/ bauen.

henning89 commented 4 years ago

Hallo @cathiele ich hab es eben versucht. Leider ist er relativ lange (3-4min) mit der Installation beschäftigt und bricht dann mit folgender Fehlermeldung ab:

„Failed to install addon The command '/bin/sh -c AUDI_HASH_SECRET={{ env "AUDI_HASH_SECRET" }} make build' returned a non-zero code: 127“

Mein Raspi 4b hat allerdings nur 2GB und keine 4GB RAM, könnte hier ein Problem liegen?

cathiele commented 4 years ago

@henning89 danke für den test. dann schaue ich erstmal weiter

cathiele commented 4 years ago

@cathiele ich hab mir Deinen Fork angeschaut- damit ginge ja nicht mehr als das UI aufzurufen. Ich hatte irgendwie die Hoffnung, dass sich mit Integration mehr erreichen ließe, z.B. dass auch /api direkt in hassio einbindbar wäre. Gibt die Integration das prinzipiell her?

Wie @Caibuk sagt, ist die UI-Integration der Sinn eines Addons. Wenn wir das im sinne einer "integration" in Home Assistant haben wollen, dann kann ich es so wie meine go-eCharger integration bauen, aber was wäre denn der Mehrwert evcc aus Home Assistant heraus steuern zu können?

andig commented 4 years ago

Der Hashkram war mein Fehler. Ich habe git 2 commits zurück gesetzt und gehoben. Sorry für die Verwirrung.

Caibuk commented 4 years ago

Ich setze in HA mit einigen Logiken die Lademodi in Abhängigkeit von "dies und das". Durch die Webservices von evcc ist das sehr einfach zu integrieren. Eine custom integration würde es "nur" noch einfacher machen.

andig commented 4 years ago

An sowas hatte ich gedacht. Den Nutzen des Logins hatte ich bisher nicht gesehen, dafür nutze ich Traefik Forward Auth in Docker, allerdings nicht ganz trivial...

andig commented 4 years ago

Ich denke in der Version von @cathiele fehlen die weiteren Ports aus dem Dockerfile- TCP wie UDP- damit z.B. auch die SHM Integration von außen funzt. Ich vermute, dass hass dann entsprechende Portregeln für Docker aufsetzt?

cathiele commented 4 years ago

@henning89 bitte einmal mit dem Repo https://github.com/cathiele/hassio-addons testen.

Die Konfiguration muss unter /config/evcc.yaml in der hass.io installation liegen (z.B. mit dem "File editor" Addon zu bearbeiten).

Wenn beim ersten Start keine Datei gefunden wird, wird eine einfache default-config dort hinkopiert.

die von hass.io vorgesehene Konfiguration über den entsprechenden Tab bei den Addons geht leider nicht, da dort nur zwei ebenen der Verschachtelungstiefe möglich sind und es eine json und keine yaml Datei sein muss.

andig commented 4 years ago

Json geht auch- evcc sollte das Format egal sein ;)

cathiele commented 4 years ago

Json geht auch- evcc sollte das Format egal sein ;)

ok das ist schonmal gut 👍 Aber es ist leider weiter mehr als zwei Ebenen tief verschachtelt.

Tscherno commented 4 years ago

Servus,

danke an @cathiele für die Mühe :) Bei mir war das Thema leider eingeschlafen, aber die Updates hier im Thread haben mich wieder geweckt. Ich habe es eben ausprobiert. Der Ansatz mit der ausgelagerten Config ist auf jeden Fall sinnvoll. Ich habe mir damals auch den Kopf zerbrochen wie man die dynamische Config von evcc in HA config abbilden kann - IMO gar nicht sinnvoll. Da würde ich nur sowas wie logging reinnehmen.

Nach der Installation und Ablage von vorhandener config sieht alles erstmal gut aus im Log:

[core  ] INFO 2020/10/27 08:09:11 site config:
[core  ] INFO 2020/10/27 08:09:11   grid ✓
[core  ] INFO 2020/10/27 08:09:11   pv ✓
[core  ] INFO 2020/10/27 08:09:11   battery ✓
[core  ] INFO 2020/10/27 08:09:11   grid meter config:
[core  ] INFO 2020/10/27 08:09:11     power ✓
[core  ] INFO 2020/10/27 08:09:11     energy ✓
[core  ] INFO 2020/10/27 08:09:11     currents —
[lp-1  ] INFO 2020/10/27 08:09:11 loadpoint 1 config:
[lp-1  ] INFO 2020/10/27 08:09:11   vehicle ✓
[lp-1  ] INFO 2020/10/27 08:09:11   charge ✓
[lp-1  ] INFO 2020/10/27 08:09:11   charge meter config:
[core  ] INFO 2020/10/27 08:09:11     power ✓
[core  ] INFO 2020/10/27 08:09:11     energy —
[core  ] INFO 2020/10/27 08:09:11     currents ✓
[lp-1  ] INFO 2020/10/27 08:09:11   charger config:
[lp-1  ] INFO 2020/10/27 08:09:11     power ✓
[lp-1  ] INFO 2020/10/27 08:09:11     energy —
[lp-1  ] INFO 2020/10/27 08:09:11     currents ✓
[lp-1  ] INFO 2020/10/27 08:09:11     timer —
[core  ] DEBUG 2020/10/27 08:09:11 ----
[core  ] DEBUG 2020/10/27 08:09:12 pv power: 223W
[core  ] DEBUG 2020/10/27 08:09:12 grid power: 910W
[core  ] DEBUG 2020/10/27 08:09:13 battery power: -157W
[core  ] DEBUG 2020/10/27 08:09:13 site power: 753W
[lp-1  ] DEBUG 2020/10/27 08:09:13 charge power: 0W
[lp-1  ] DEBUG 2020/10/27 08:09:16 vehicle soc: 34%
[lp-1  ] DEBUG 2020/10/27 08:09:16 charger status: B
[lp-1  ] DEBUG 2020/10/27 08:09:16 max charge current: 0A = 0A + -2A (753W @ 3p)
[lp-1  ] DEBUG 2020/10/27 08:09:16 target charge current: 0A

Leider klappt der Zugriff dann nicht. Beim Aufruf über HA bekommt man: "Request failed with status code 401" und "server unavailable". Die Oberfläche ist dann ziemlich leer. Bei Konfiguraiton ist auch nichts sichtbar.

Der fehlschlagende Aufruf ist GET | http://hass.fritz.box:8123/api/config

grafik

henning89 commented 4 years ago

Ich bekomme die gleichen Fehlermeldungen wie @Tscherno

cathiele commented 4 years ago

Durch das ingress mapping von hass wird evcc mit der Url (bei meinem TestPi):

http://homeassistant.fritz.box:8123/api/hassio_ingress/fkcZnkj5OdOzGmQi0sviYfRSnDxp3OyzwXqgnp6Qtow

aufgerufen. Hieran schließt sich dann die relative evcc url für die API-Zugriffe an, also z.B. für health:

http://homeassistant.fritz.box:8123/api/hassio_ingress/fkcZnkj5OdOzGmQi0sviYfRSnDxp3OyzwXqgnp6Qtow/api/health

evcc greift aber mit absolutem Pfad per axios auf die api zu. Somit kommt dann am hass-Server das hier an:

http://homeassistant.fritz.box:8123/api/health

@andig kannst du die API-Aufrufe in evcc relativ zu dem Pfad unter dem evcc erreichbar ist durchführen?

cathiele commented 4 years ago

An der Stelle müsste das dann angepasst werden:

axios.defaults.baseURL = loc.protocol + "//" + loc.hostname + (loc.port ? ":" + loc.port : "") + "/api";

andig commented 4 years ago

Das Problem ist aus dem Weg, siehe https://github.com/andig/evcc/commit/e52f68798874669458186176feb4f73e2aa5a1a2. Bin aber nicht sicher, ob das mit dem Websocket auch klappt, käme auf einen Test an. Vmtl. abhängig davon, wie Hassio das durch routet.

cathiele commented 4 years ago

@henning89 @Tscherno bitte nochmal testen.

henning89 commented 4 years ago

@cathiele Ich bekomme leider immer die Fehlermeldung "502 bad gateway", sowohl mit der default evcc.yaml als auch mit meiner customized Variante. Ich greife per https auf Home Assistant zu, ist das möglicherweise ein Problem?

cathiele commented 4 years ago

Ich mit http ging es bei mir. Dann richte ich auf dem Test Raspberry https zum testen ein.

henning89 commented 4 years ago

Vielleicht hab ich auch die URL falsch zusammengebastelt? uri: https://xyz.duckdns.org:8123/hassio/ingress/08a511dd_evcc # uri for ui xyz ist in Wirklichkeit meine Duckdns Url, auf diese läuft das https Zertifikat.

andig commented 4 years ago

Sinnvoll wäre mal die Sachen einzeln zu testen. Ohne duckdns, ohne Zertifikat...

cathiele commented 4 years ago

duckdns und externen Zugriff von außen habe ich nicht, daher kann ich das nicht testen. @henning89 Kannst du mal die genaue Fehlermeldung senden?

cathiele commented 4 years ago

achso: und was ist das für eine URI-Konfiguration? bei mir steht in der evcc.yaml das hier so wie in der Beispielkonfig:

uri: 0.0.0.0:7070 # uri for ui

henning89 commented 4 years ago

Ich hab nochmal die default evcc.yaml geladen und das addon neu installiert. Leider stoppt das addon ein paar Sekunden nach dem Start.

Im Log steht: starting evcc --config /config/evcc.yaml [main ] FATAL 2020/10/31 00:04:42 cannot create renault vehicle: missing personID

Ich habe leider noch kein Elektroauto (kommt in einer Woche), kann daher keine richtige Konfiguration für ein Fahrzeug hinterlegen.

Wenn ich direkt nach dem Start (bevor es wieder stoppt) das UI öffne, dann kommt nur die Meldung "502: bad gateway".

cathiele commented 4 years ago

versuche mal diese Datei:

https://github.com/cathiele/hassio-addons/blob/master/evcc/evcc.dist.yaml

andig commented 4 years ago

Nimm das Auto einfach raus...

Tscherno commented 4 years ago

Update auf neuestes Addon hat bei mir nicht funktioniert: "404 Client Error: Not Found ("No such image: 08a511dd/amd64-addon-evcc:latest")"

Deinstallieren und Neuinstallieren hingegen hat funktioniert.

Mit der aktuellen Version läuft es für mich perfekt. Sowohl lokal ohne HTTPS als auch über HA-Cloud-Reverse-Proxy und die App klappt es wie es soll.

Danke für die Mühe!

henning89 commented 4 years ago

Jetzt läuft es auch bei mir, hatte noch einen Fehler in meiner evcc.yaml. Vielen Dank für die Integration @cathiele !

cathiele commented 4 years ago

@andig jetzt wo das addon funktioniert bleibt die Frage wo wir das dauerhaft hinterlegen. Der Punkt ist, dass bei einem evcc-Update auch die Version in dem addon hochgezogen werden muss. Aktuell geht es einfach auf latest. Daher denke ich, dass es wohl besser ist das aus meinem Report in dein Repo zu verschieben und in Deinen Releaseprozess zu integrieren. Was denkst du?

Tscherno commented 4 years ago

Wenn die Versionsnummer im config.json hochgezogen würde, würde auch die Autoupdate-Funktion vom HA-Supervisor funktionieren.

Es sieht jetzt übrigens so aus: grafik

Das Icon im Menü gibt es leider in der HA Version nicht. Ich ändere es gerade auf mdi:ev-station passt eh besser.

Ansonsten würde ich gerne den Config-File Pfad als Konfigurationsoption hinterlegen. Damit ist erstens klar wo es standardmäßig liegen muss und zweitens kann man leicht zwischen mehreren Configs wechseln.

cathiele commented 4 years ago

config path ist eine gute Idee. Baue ich ein. Und dann auch gleich loglevel

Tscherno commented 4 years ago

Ich habe es mal versucht einzubauen. Ich kann es leider nicht von meinem Fork aus testen. Den nimmt HA warum auch immer nicht als gültiges Repository. Ich kann dir einen Pull-Request schicken, dann könnte man es ausprobieren.

https://github.com/Tscherno/hassio-addons/blob/master/evcc/config.json https://github.com/Tscherno/hassio-addons/blob/master/evcc/scripts/run.sh

cathiele commented 4 years ago

Kannst gerne einen PR machen. In config.json ist aber bei dir options doppelt drin und Schema sollte dann auch definiert werden.

Tscherno commented 4 years ago

@cathiele Das Startupscript scheint nicht richtig zu funktionieren. Komischerweise werden nicht mal die beiden Echos am Anfang geloggt. Es steht nur "standard_init_linux.go:211: exec user process caused "no such file or directory"" drin.

Ich denke es liegt an bashio. Das Image hat das vermutlich nicht drin, korrekt? Eventuell gibt es auch eine andere Möglichkeit an die Konfigurationswerte zu kommen?

https://github.com/hassio-addons/bashio