PV-Überschuss­laden mit EVCC

Einführung

Dein WARP Charger ist mit EVCC kompatibel. EVCC ist eine Open-Source-Lösung, mit der du auf einfache Weise den Überschuss deiner Photovoltaik-Anlage zum Laden deines Elektroautos benutzen kannst. EVCC implementiert zudem weitere APIs, mit denen du zum Beispiel eine Hausbatterie bevorzugt, oder dein Elektroauto bis zu einem gewünschten Ladestand laden kannst. Weitere Informationen zu EVCC findest du auf evcc.io, detaillierte Dokumentation, ein Support-Forum und den Quellcode im GitHub-Repository.

Diese Anleitung zeigt dir, wie du EVCC aufsetzt, deinen WARP Charger mit EVCC verknüpfst und wie weitere Komponenten, beispielhaft ein Elektroauto eingebunden werden können. Hierfür benötigst du neben deinem WARP Charger nur einen Rechner, auf dem EVCC ausgeführt werden soll. Wir verwenden im Folgenden einen Raspberry Pi. EVCC kann auch auf anderen Plattformen installiert werden, aber da die Steuerung des WARP Chargers möglichst robust sein soll, bietet es sich an ein System nur für diesen Einsatzzweck abzustellen. Die notwendigen Zähler, die die Stromerzeugung einer PV-Anlage, sowie den Gesamtverbrauch des Hauses messen, werden wir zunächst simulieren.

Ladesteuerung mit EVCC

Vorbereitung des Raspberry Pis

Zunächst musst du eine SD-Karte mit dem Betriebssystem für den Raspberry Pi vorbereiten. Am einfachsten ist das mit dem Raspberry Pi Imager. Der RPi-Imager lädt das ausgewählte Betriebssystem herunter und flasht es auf eine angeschlossene Micro-SD-Karte. Wenn du mit der Benutzung einer Linux-Konsole vertraut bist, empfehlen wir das Raspberry Pi OS Lite, das im Imager unter OS auswählen -> Raspberry Pi OS (other) zu finden ist. Falls du mit einer graphischen Oberfläche arbeiten möchtest, kannst du das normale Raspberry Pi OS verwenden. Mit der Tastenkombination STRG+SHIFT+X kannst du die erweiterten Optionen öffnen um z.B. den SSH-Server zu aktivieren, oder ein WLAN-Netzwerk, die Spracheinstellungen und einen Hostnamen zu konfigurieren. Der Imager flasht nach Auswahl der SD-Karte und klicken auf Schreiben das Betriebssystem auf die Micro-SD-Karte.

Raspberry Pi Imager

Du kannst jetzt die Micro-SD-Karte in den Raspberry Pi einlegen und ihn booten. Nachdem du dich gegebenenfalls eingeloggt hast (per SSH auf pi@raspberry, oder in der Textkonsole als pi; Passwort ist jeweils raspberrypi), solltest du zunächst, falls du die graphische Oberfläche gebootet hast, dem Einrichtungs-Wizard folgen. In beiden Fällen solltest du danach in der Konsole mit sudo apt update und sudo apt upgrade das System aktualisieren. Danach kannst du den Pi mit sudo reboot neustarten.

Installation des MQTT-Brokers

Die Kommunikation zwischen dem WARP Charger und EVCC erfordert den Einsatz eines MQTT-Brokers. Auf dem Raspberry Pi kann mit sudo apt install mosquitto mosquitto-clients der Mosquitto-MQTT-Broker installiert werden. Mosquitto startet sofort und bei jedem Start des Systems automatisch.

Verknüpfen des WARP Chargers

(Mehr Informationen zur MQTT-Konfiguration findest du in der API-Dokumentation)

Im Webinterface des WARP Chargers kannst du jetzt die Verbindung zum MQTT-Broker konfigurieren. Hierzu musst du unter MQTT die Verbindung aktivieren und den Host eintragen (raspberrypi falls du ihn nicht geändert hast). Alternativ kannst du die IP-Adresse des Pis verwenden. Diese kannst du in der Konsole mit ip -brief a auslesen: unter eth0 die der LAN-Verbindung, oder unter wlan0 die der WLAN-Verbindung. Danach kannst du die Konfigurationsänderung durch Klicken auf Speichern anwenden. Das Webinterface startet dann neu.

Um zu Testen, ob die Verbindung zum MQTT-Broker funktioniert, kannst du zunächst die Status-Seite des Webinterfaces prüfen. Der Status der MQTT-Verbindung sollte auf Verbunden stehen. Falls das nicht der Fall ist, kannst du im Ereignislog nachsehen, was das Problem ist. Als weiteren Test kannst du in der Konsole des Pis die empfangenen Nachrichten mitlesen: mosquitto_sub -v -t 'warp/#' liefert empfangene Nachrichten aller Wallboxen, die mit dem Broker verbunden sind.

MQTT-Konfiguration

Installation von EVCC

(Dieser Teil der Anleitung folgt grob der manuellen Installationsanleitung von EVCC. Alternativ kann EVCC als Docker-Container eingerichtet werden, wie hier beschrieben.)

EVCC kannst du von Github herunterladen: Per Browser von hier, oder alternativ auf der Konsole mit wget https://github.com/andig/evcc/releases/download/0.68/evcc_0.68_linux_armv6.tar.gz 0.68 solltest du durch die gerade aktuelle Version ersetzen. Für den Raspberry Pi benötigst du die linux_armv6-Variante.

Auf der Konsole kannst du jetzt, falls du EVCC nicht neu installierst, sondern aktualisierst, eine eventuell vorhandene alte EVCC-Installation entfernen: sudo rm -f /usr/local/bin/evcc* Danach kannst du mit sudo tar xvfz ./evcc_0.68_linux_armv6.tar.gz -C /usr/local/bin/ die gerade runtergeladene Version von EVCC installieren. Mit evcc -v kannst du testen, ob die Installation erfolgreich war. EVCC sollte dann seine Versionsnummer ausgeben.

Konfiguration von EVCC

(Dieser Teil der Anleitung folgt grob der manuellen Konfigurationssanleitung von EVCC.)

EVCC wird durch eine Konfigurationsdatei in YAML-Syntax konfiguriert. Du kannst diese mit einem Texteditor deiner Wahl, auf der Konsole zum Beispiel mit nano* anlegen. Im Folgenden erstellen wir eine Minimalkonfiguration für den WARP Charger und erweitern diese sukzessive. Diese Datei nennen wir config.yaml. Die YAML-Syntax erfordert genaue Einrückung. Falls aus dem Kontext nicht klar ist, wie ein Block genau in die Konfigurationsdatei eingefügt werden kann, kannst du die vollständige Konfigurationsdatei zu Rate ziehen.

Allgemeine Einstellungen

Zunächst werden einige allgemeine Einträge benötigt. Die Kommentate an den Einträgen erklären deren Bedeutung. Du musst sie aber nicht in die Datei übernehmen.

# Die Adresse, sowie der Port auf der das Webinterface erreichbar ist.
# Wenn du Zugriffe nur vom Raspberry Pi aus erlauben willst, könntest du hier 127.0.0.1:7070 einfügen.
uri: 0.0.0.0:7070
# Das Ladesteuerungs-Intervall
interval: 10s

# Log-Einstellungen.
# Für die Einrichtung hilft es detailliertere Logausgaben zu bekommen.
# Wenn alles funktioniert kannst du hier stattdessen log: error setzen.
log: debug
levels:
  core: debug
  lp-1: debug

Konfiguration des WARP Chargers

Danach kannst du die Konfiguration des WARP Chargers anfügen. Du brauchst dafür den Topic-Präfix des Chargers, der gesteuert werden soll. Diesen findest du im Webinterface unter den MQTT-Einstellungen. Wir gehen hier davon aus, dass er warp/AbC lautet.

chargers:
- name: warp        # Konfigurationsname der Wallbox
  type: warp        # Typ der Wallbox
  broker: localhost # Hostname oder Adresse des MQTT-Brokers
  topic: warp/AbC   # Der Topic-Präfix
  usemeter: true    # true für WARP Charger Pro, false für Smart
  timeout: 30s

Falls du für die Verbindung zum Broker einen Usernamen und ein Passwort konfiguriert hast, kannst du diese wie folgt anfügen:

  user: testuser
  password: testpass

Diesen Teil der Konfiguration kannst du jetzt testen. Mit: evcc charger -c config.yaml sollte EVCC sich zum MQTT-Broker verbinden und dann den aktuellen Ladestatus Charge status sowie ob das Auto-Start-Verhalten Enabled der Wallbox auslesen. Falls du den Zähler eines WARP Charger Pro mit ausliest, werden zusätzlich Ladeleistung Power und bisheriger Stromverbrauch Energy ausgelesen.

Konfiguration der simulierten Stromzähler

Jetzt müssen Stromzähler konfiguriert werden. Für den reinen Test der Anbindung des WARP Chargers reichen simulierte Zähler: einen für die Stromerzeugung einer PV-Anlage, sowie einer, der den Strombezug des Hauses misst. Zur Konfiguration der echten unterstützten Zähler musst du die EVCC-Dokumentation konsultieren.

Einen simulierten Verbrauchszähler kannst du wie folgt zu deiner Konfigurationsdatei hinzufügen:

meters:
- name: gridmeter # Name des Zählers. Falls du diesen änderst, musst du die site-Konfiguration auch anpassen.
  type: custom   # Typ des Zählers
  power:
    # Wir simulieren die Leistung über ein Shellscript, das 1000 Watt zurückgibt.
    # Positive Werte bedeuten einen Strombezug im Netz.
    type: script
    cmd: /bin/sh -c 'echo 1000'

Die Zählerkonfiguration kannst du jetzt mit evcc meter -c config.yaml testen. EVCC sollte dir den simulierten Bezug mit Power: 1000W ausgeben.

Den zweiten simulierten Zähler, der die Einspeisung einer PV-Anlage misst kannst du wie folgt dem Abschnitt meters hinzufügen:

- name: pvmeter
  type: custom
  power:
    type: script
    # Wir simulieren hier -10000 Watt. Negative Werte bedeuten eine Einspeisung ins Netz.
    cmd: /bin/sh -c 'echo -10000'

Auch diese Konfiguration kannst du mit evcc meter -c config.yaml testen. EVCC sollte dir jetzt den simulierten Bezug mit Power: 1000W, sowie die simulierte Einspeisung mit Power: -10000W ausgeben.

Site-Konfiguration

Jetzt musst du mit einer site-Konfiguration die Zähler verknüpfen.

site:
  title: Home       # Anzeigename im Webinterface
  meters:
    grid: gridmeter # Name des Zählers, der den Strombezug misst
    pv: pvmeter     # Name des Zählers, der die Einspeisung misst

Konfiguration des Ladepunkts

Als letzten Schritt musst du einen Ladepunkt konfigurieren. Dieser kann später genutzt werden um eine Fahrzeugkonfiguration mit einer Wallboxkonfiguration zu verknüpfen.

loadpoints:
  # Anzeigename des Ladepunkts im Webinterface
- title: Mein erster Ladepunkt
  mode: pv      # Standard-Lademodus. pv bedeutet, dass nur Photovoltaikstrom geladen wird.
  charger: warp # Konfigurationsname der Wallbox die verknüpft werden soll
  phases: 3     # Konfiguriert ob die Wallbox ein- oder dreiphasig angeschlossen ist.

Test der Gesamtkonfiguration

Jetzt sollte deine Konfigurationsdatei vollständig sein und du kannst EVCC starten: evcc -c config.yaml EVCC gibt dann diverse Debug-Informationen aus. Nach wenigen Sekunden sollte das Webinterface auf http://raspberrypi:7070 erreichbar sein. Alternativ kannst du die IP-Adresse des Raspberry Pis verwenden. Wenn alles funktioniert, kannst du in der Konfiguration die Zeile log: debug auf log: error ändern. Dann werden nur noch Fehler ausgegeben.

Wenn du jetzt das Webinterface deines WARP Chargers öffnest, sollte Autostart deaktiviert wurden sein, da EVCC jetzt das Laden kontrolliert.

Webinterface von EVCC

Gesamtkonfiguration

Hier die Konfigurationsdatei in ihrer Gänze:

uri: 0.0.0.0:7070
interval: 10s

log: debug
levels:
  core: debug
  lp-1: debug

chargers:
- name: warp
  type: warp
  broker: localhost
  topic: warp/AbC
  usemeter: true
  timeout: 30s

meters:
- name: gridmeter
  type: default
  power:
    type: script
    cmd: /bin/sh -c 'echo 1000'
- name: pvmeter
  type: default
  power:
    type: script
    cmd: /bin/sh -c 'echo -10000'

site:
  title: Home
  meters:
    grid: gridmeter
    pv: pvmeter

loadpoints:
- title: Mein erster Ladepunkt
  mode: pv
  charger: warp
  phases: 3

Automatischer Start von EVCC

Damit EVCC automatisch startet, wenn der Raspberry Pi neu bootet, musst du eine service-Datei für systemd anlegen: Lege dazu mit einem Texteditor deiner Wahl eine neue Datei an mit folgenden Inhalt an:

[Unit]
Description=evcc
After=syslog.target
[Service]
ExecStart=/usr/local/bin/evcc --log error
Restart=always
[Install]
WantedBy=multi-user.target

und speichere sie als Root unter /etc/systemd/system/evcc.service

EVCC erwartet eine Konfigurationsdatei namens evcc.yaml in /etc. Du kannst als Root die oben erstellte config.yaml als /etc/evcc.yaml abspeichern.

Teste dann ob alles geklappt hat, indem du die service-Dateien neu lädst: sudo systemctl daemon-reload Dann den EVCC-Service startest: sudo systemctl start evcc und prüfst, ob das geklappt hat: sudo systemctl status evcc Die Ausgabe sollte Active: active (running) beinhalten. Du kannst dann mit sudo systemctl enable evcc.service festlegen, dass EVCC beim Booten gestartet wird.

Erweiterungs­möglichkeiten

Dein EVCC-Setup kannst du vielseitig erweitern. Zum Beispiel können Photovoltaik- und Batterieinverter für Hausbatterien angebunden werden. Außerdem kann der Ladestand diverser Fahrzeuge ausgelesen werden.

Exemplarisch binden wir im Folgenden einen Renault Zoe ein. Hierzu musst du wieder deine EVCC-Konfigurationsdatei bearbeiten. Füge zunächst vor dem loadpoint-Block folgenden Block ein:

vehicles:
- name: zoe             # Konfigurationsname
  type: renault         # Fahrzeugtyp
  title: Zoe            # Anzeigename
  capacity: 52          # Akku-Kapazität in kWh
  user: user@domain.com # Deine myrenault-ID
  password test123      # Passwort deiner myrenault-ID

Danach kannst du den Zoe mit deinem Ladepunkt verknüpfen. Füge dazu folgendes in den loadpoint-Block ein:

  vehicle: zoe # Der Konfigurationsname von oben
  soc:
    poll:
      # Wann soll der Ladestand abgefragt werden?
      mode: charging
      # Wie oft soll der Ladestand abgefragt werden?
      interval: 60m

Wenn du jetzt EVCC neu startest: evcc -c config.yaml bzw. sudo systemctl restart evcc, falls du den Auto-Start schon eingerichtet hast, sollten der Zoe, sowie die Ladeziel-Auswahl im Webinterface erscheinen.

Webinterface mit Fahrzeug