Ich habe vor vier Monaten eine PV-Anlage mit einem GoodWe Wechselrichter bekommen. Das Überschussladen meines Elektro-Autos wollte ich mit evcc, einer open source Software als Steuerung zwischen Wechselrichter und Wallbox realisieren. Leider spricht evcc derzeit (Mai 2023) GoodWe Wechselrichter per WLAN nicht direkt an, und zeitgleich liefert Home Assistant als Smart Home Zentrale sehr interessante Strom-Statistiken. Da die Einrichtung nicht ganz trivial und nirgends dokumentiert ist und in einem GitHub Issue die Bitte aufkam, hier also die Dokumentation meines Setups, um das Szenario aus der Überschrift zu realisieren.

Mein Setup

  • GoodWe GW8K-ET Wechselrichter mit WLAN Modul
  • Raspberry Pi 3b
  • easee Wallbox
  • Shelly Plug S WLAN-Steckdose
  • Opel Corsa-e (bzw. in zwei Wochen Tesla Model Y)

Schritt 1: Home Assistant installieren

Da Home Assistant (HA) durchgehend läuft, will ich es nicht auf einem „großen“ Computer mit relativ viel Strom laufen haben, sondern auf einem kleinen Raspberry Pi. Ich hatte noch einen 3b rumliegen, deshalb habe ich HA als Betriebssystem gemäß deren Anleitung auf eine SD-Karte installiert. Dazu gibt’s super Anleitungen, wie etwa direkt von HA, deshalb hier nur der Link.

Schritt 2: GoodWe Integration hinzufügen und Wechselrichter-Daten auslesen

Jetzt ist es Zeit, die Daten des Wechselrichters in HA auszulesen. Dazu fügt man eine „Integration“ hinzu, in meinem Fall die GoodWe Integration. Das geht über „Einstellungen“ >> Geräte und Dienste >> GoodWe.

Im Dialogfenster gibt man nun die IP-Adresse des Wechselrichters ein. Diese findet man z.B. über das Menü seines WLAN-Routers heraus. Die Integration erkennt den Wechselrichter und greift jetzt alle Daten ab. Nach Bestätigung sieht man die Integration und die „Sensoren“, also die einzelnen Messwerte, die der Wechselrichter übermittelt:

Schritt 3: Energie-Dashboard konfigurieren

Das Energie-Dashboard liefert sehr interessante Diagramme zum Energieverbrauch, hier mal als Beispiel der heutige Tag:

Damit HA die Statistiken berechnen kann, benötigt es drei Daten bzw. „Sensoren“ vom Wechselrichter, nämlich

  • Netzverbrauch: Meter Total Energy (import)
  • Zurück ins Netz: Meter Total Energy (export)
  • Sonnenkollektoren: Total PV Generation

So sieht das dann in der Konfiguration aus:

Schritt 4: MQTT als Nachrichtenprotokoll konfigurieren: Mosquitto broker, Node-RED, mqtt-core

Ab jetzt wird’s komplizierter: Da evcc die Daten des GoodWE Wechselrichters nicht direkt lesen kann, müssten wir den Umweg über mqtt gehen, ein gängiges Nachrichtenprotokoll von Smart Home Geräten (u.a.). Dazu brauchen wir

  • core-mosquitto Integration: Eine Core-Integration für mqtt
  • Mosquitto broker Add-on
  • Node-RED Add-on: damit kommen die Sensor-Daten bei jeder Veränderung in einen „topic“ (deutsch: Thema), den evcc später auslesen kann

mosquitto-Integration und Add-on

Nach der Installation der core-mosquitto Integration und der Broker Add-Ons muss man diese beiden konfigurieren. Hier gibt’s nichts Besonderes einzustellen, der „Dokumentation“-Tab sagt alles bzw. Werkseinstellungen passen. Dementsprechend habe ich vorab für mosquitto einen eigenen HA-Benutzer angelegt, dessen Daten man bei der mosquitto-Einrichtung einfach eingibt.

Node-RED bringt Sensordaten in ein MQTT-Thema

Nachdem mqtt läuft, ist es nun Zeit, Node-RED zu konfigurieren. In einer Drag-and-Drop Oberfläche kann man hier Workflows zusammenbauen:

Für dieses Tutorial ist nur der obere Workflow relevant, der aus dem Trigger „trigger-state“ und dem Netzwerk-Baustein mqtt out besteht. Diese beiden Bausteine zieht man in das weiße Feld und verbindet es anschließend durch Ziehen der Quadrate.

  • Bei trigger-state wählt man als Sensor den sensor.active-power aus. Dieser entpricht dem, was ins Netz gespeist bzw. aus dem Netz zugekauft wird. Bei jeder Änderung dieser Zahl (oft im Sekundentakt) wird der Workflow ausgelöst.
  • Bei mqtt out muss man den mqtt-Server und das Thema konfigurieren. Die Server-Adresse ist in der Regel IP-Adresse-von-HA:Port-von-mqtt, also z.B. 192.168.4.246:1883; Bei der Konfiguration muss man auch einen Benutzer angeben, hier trägt man Benutzername und Passwort des oben genannten MQTT-Benutzers aus Home Assistant ein. Das Thema/topic kann man frei benennen, ich habe hier „pv/netto“ festgelegt.

In der core-mosquitto Integration kann man nun testen, ob der Workflow funktioniert: Dazu „abonniere“ ich das Thema „pv/netto“ und „höre“ auf jede Änderung:

Schritt 5: evcc installieren und per yaml-Datei konfigurieren

evcc ist ganz einfach über das gleichnamige Add-on zu installieren. Für die Konfiguration braucht man außerdem das File Editor Add-on, weil diese über eine yaml-Datei (hurra, yaml …) funktioniert.

Im File Explorer legt man nun zwei Sachen im Ordner config/ an:

  • die evcc.yaml Datei, deren Inhalt gleich folgt.
  • einen Ordner evccdata (der ist nicht weiter von Bedeutung)

Im File Editor bearbeitet man nun seine individuelle yaml-Datei, die die „Bausteine“ zur Wallbox, zum Auto, zum Tarif usw. enthält. Hier meine yaml-Datei mit anonymisierten Benutzerdaten:

network:
  
  schema: http
  
  host: 192.168.4.246
  port: 7070

interval: 10s # control cycle interval


sponsortoken:
123

telemetry: true
plant: 123123123


meters:
- name: grid
  type: custom
  power: # Leistung (W)
    source: mqtt
    topic: pv/netto
    scale: -1
    timeout: 30s # don't accept values older than timeout
    

# for documentation see https://docs.evcc.io/docs/devices/chargers
chargers:
  - name: easeecharger
    type: template
    template: easee
    user: user@name.de
    password: password123
    charger: EH123
  - name: shellyplug1
    type: template
    template: shelly
    host: 192.168.4.248
    user: user@name.de
    password: password123
    standbypower: 15

# vehicle definitions
# for documentation see https://docs.evcc.io/docs/devices/vehicles
vehicles:
  - name: opel_corsa_e
    type: template
    template: opel
    title: OpelCorsaE
    user: user@name.de
    password: password123
    targetSoc: 80
    capacity: 50

# site describes the EVU connection, PV and home battery
site:
  title: Home # display name for UI
  meters:
    grid: grid # grid meter
    #pv:
    #  - my_pv # list of pv inverters/ meters

loadpoints:
- title: Wallbox # display name for UI
  charger: easeecharger # Wallbox Referenz
  vehicle: opel_corsa_e # Referenz auf Standardfahrzeug
  mode: pv # charge mode (off, now, minpv, pv)
- title: Steckdose
  charger: shellyplug1
  phases: 1
  mode: pv

# tariffs are the fixed or variable tariffs
# cheap (tibber/awattar) can be used to define a tariff rate considered cheap enough for charging
tariffs:
  currency: EUR # three letter ISO-4217 currency code (default EUR)
  grid:
    type: fixed
    price: 0.38 # EUR/kWh

  feedin:
    # rate for feeding excess (pv) energy to the grid
    type: fixed
    price: 0.08 # EUR/kWh

# mqtt message broker
mqtt:
  broker: 192.168.4.246:1883
  user: mqtt-user
  password: password123

Für die Information, wie viel Strom evcc zum Laden nutzen kann, abonniert evcc das mqtt-Thema, das ich oben konfiguriert und über Node-RED aktualisieren lasse. Dazu braucht es zwei Einträge:

  • In meiner Datei ganz unten ist der Abschnitt mqtt. Hier ist der mqtt-Server und Benutzer eingetragen, der zuvor konfiguriert wurde (vgl. mosquitto und Node-RED).
  • Bei meter wird die aktuelle Einspeise- bzw. Zukauf-Leistung abgefragt. Zur Erinnerung: Das ist im Endffekt der sensor.active-power Wert bzw. genau der Wert, der auch am Stromzähler live abgelesen werden könnte. Dazu wird als source: mqtt angegeben, das selbst festgelegte Thema (in meinem Fall pv/netto und hier zusätzlich der scale: -1, weil der GoodWe-Sensor den Wert mit einem für evcc falschen Vorzeichen ausliefert.

In diesem Beitrag geht es nur um die GoodWe Integration, deshalb lasse ich die Beschreibungen für Wallbox und Co. weg.

Jetzt müsste alles klappen, sprich der Balken oben müsste den Wert anzeigen, den auch der Stromzähler anzeigt. Und damit ist evcc bereit, die Wallbox zu steuern.

Ich hoffe, mit dieser Dokumentation konnte ich den einen oder anderen helfen. Viel Spaß beim Überschussladen!