Energiemonitoring mit Loxone – Wallbox

In Teil 3 meiner Serie zum Thema Energiemonitoring mit Loxone stelle ich heute vor, wich ich meine Wallbox, den SMA EV Charger, in mein Loxone-System eingebunden habe. Im ersten Schritt wollte ich vor allem die aktuelle Leistungsaufnahme der Wallbox sowie die Zählerstände auslesen, um den Energiefluss und die Verbrauchswerte zentral darstellen zu können.

TL/DR: Wer eine Lösung für smartes PV-Laden seines Elektrofahrzeugs sucht, die ohne Loxone und Home Assistant einfach funktioniert, sollte sich EVCC anschauen. Wer einfach nur einen SMA EV Charger in Home Assistant integrieren möchte, dem sei die SMA EV Charger integration for Home Assistant empfohlen. Wer außerdem Hintergründe, Codebeispiele oder die fertige Loxone-Integration sehen möchte, darf gerne weiterlesen.

Ausgangssituation: SMA-App

Wie bereits in Teil 1 beschrieben war ich in einigen Punkten mit der App des PV-Anlagenherstellers SMA nicht ganz zufrieden. Insbesondere konnte ich den Verbrauch meiner Wärmepumpe nicht separat vom restlichen Stromverbrauch analysieren. Selbst der Verbrauch der Wallbox – obwohl vom selben Hersteller – taucht zunächst in der SMA-App nicht separat auf. Möchte man sehen, wieviel Energie ins Auto geflossen ist, muss man in den Reiter „Mobilität“ wechseln. Dann dauert es üblicherweise ca. 5 Sekunden, bis die Ansicht erscheint – und zwar immer, wenn man irgendwie mit der Wallbox interagieren möchte: Sei es, um den Lademodus zu wechseln, den Ladestatus zu prüfen, einen Ladevorgang freizugeben, oder auch nur den Verbrauch zu checken.

Nachdem also nun das Auslesen der Zählerwerte des PV- und Batteriewechselrichters (Teil 1) sowie der Wärmepumpe (Teil 2) funktionierte, war ich zuversichtlich, auch für die Wallbox eine Lösung zu finden, die mir schnell, zuverlässig und komfortabel Zugriff auf Momentanverbrauch sowie Statistiken über die Loxone-App liefern würde.

Protokolle, Betriebssysteme & Co. im SMA-Universum

Anders als der Wechselrichter verfügt die Wallbox zwar über ein Web Interface, hat aber keine Möglichkeit, die aktuellen Werte direkt ohne Authentifizierung auf der Startseite anzuzeigen. Die Lösung über einen simplen HTTP-Request an alle Daten zu kommen, scheidet also aus. Obwohl Wechselrichter und Wallbox beide aus der aktuellen Gerätegeneration stammen, setzen sie offensichtlich auf unterschiedlichen Systemen auf. So ist etwa auch das Modbus-Protokoll, das beim Wechselrichter noch eine Alternative darstellte, auf der Wallbox nirgends zu finden.

Wie kommen also die Daten der Wallbox in die SMA-App? Da dort offensichtlich der Sunny Home Manager eine Rolle spielt, startete ich dort meine Recherche. Ich landete relativ schnell beim Stichwort „Speedwire“, einem SMA-eigenen Protokoll für die Kommunikation zwischen den verschiedenen Komponenten der Anlage. Anscheinend ist das ein UDP-basiertes Multicast-Protokoll, das für die Identifikation der Komponenten untereinander verwendet wird: Jedes Gerät schickt regelmäßig Multicast-Pakete ins Netzwerk in der Hoffnung, dass jemand „lauscht“. So gelingt das initiale Setup einigermaßen schnell, und die Geräte erfahren die IP-Adressen der jeweils anderen. Da mein Loxone-Miniserver allerdings in einem anderen Subnetz arbeitet als die PV-Komponenten, und ich mich aktuell nicht auch noch um Netzwerkprotokolle und Multicast-Routing kümmern wollte, suchte ich weiter.

Wie also kommunizieren die Geräte untereinander? Die Produktseite des Sunny Home Managers verkündet, intelligente Verbraucher würden „über Standard-Schnittstellen EEBUS und SEMP“ eingebunden. Navigiert man im Sunny Portal zu den Gerätedetails der Wallbox, lautet die URL sunnyportal.com/HoMan/Consumer/Semp/{id}. Also wird wohl SEMP verwendet. Aber was ist das? Im Photovoltaikforum fand ich einen Post „SEMP Protokollspezifikation“ – allerdings von 2014, und mit dem Hinweis, man habe die Dokumente zurückgezogen, da SMA an einer Alternative arbeite, bald offene Schnittstellen für Drittanbieter bereitstelle und SEMP ohnehin nur noch so lange anbieten werde, bis EEBUS für das SMA-Energiemanagement verfügbar werde.

Vorhandene Lösungen

Nach meinen guten Erfahrungen mit Integrationen für Home Assistant zum Auslesen und Steuern meiner Wärmepumpe (siehe Teil 2) war der nächste Schritt meiner Suche wieder eine solche Integration. Leider führten alle Suchanfragen ins Leere: Anscheinend gab es weder fertige Integrationen für den SMA EV Charger1, noch für SEMP oder Speedwire.

Stattdessen entdeckte ich EVCC, ein Open-Source-Projekt für das intelligente Laden von Elektrofahrzeugen mit Solarstrom. Es bietet unzählige Plugins für verschiedene Wechselrichter und Wallboxen, samt mobiltauglicher Weboberfläche und ansprechendem Design. Die Integrationen für einige Wallboxen (deren Schnittstellen nicht öffentlich dokumentiert sind) erfordern ein sog. Sponsor Token, welches man für eine kleine finanzielle Unterstützung bekommt. Es gibt ein Add-On für Home Assistant OS, welches EVCC in Home Assistant OS einbindet. Das wirkte mir für meine Zwecke allerdings auch etwas zu komplex. Da EVCC Open Source ist, habe ich mir zunächst den Code angeschaut, der mit dem SMA EV Charger kommuniziert, und war etwas überrascht: Hier passierten im Wesentlichen HTTP(S)-Aufrufe mit einer OAuth2-Authentifizierung.

Eine Integration für Home Assistant

Wenn es also doch einen Web-basierten Weg gab um an die Daten zu kommen, könnte ich ja vielleicht selbst eine Integration für Home Assistant schreiben? Dazu müsste ich zwar erst Python lernen und dann das Plugin-Konzept für Home Assistant, plus evtl. die Anforderungen für den HACS, aber dafür könnte ich der Community etwas zurückgeben, nachdem ich schon häufig von anderen Projekten profitiert hatte. Also schnell meine großartigen Kollegen nach ein paar Einstiegshilfen zum Thema Python und OAuth gefragt2, und im Go-Code des EVCC-Plugins nach einem Startpunkt gesucht. Am nächsten Abend war nach kurzer Zeit der erste Request3 erfolgreich.

Das ganze angereichert um ein paar weitere HTTP-Requests, die die Werte über die Loxone Web Service API an den Miniserver schicken, und ich hatte ein fertiges Python-Script (inklusive Fehlerbehandlung) mit 90 Zeilen, welches die Grundfunktion erfüllte und einige Tage lang erfolgreich Werte in die Loxone-App lieferte:

Als ich gerade ein Repository aufsetzen wollte um die Arbeit an einer vollwertigen Home-Assistant-Integration zu beginnen, stieß ich schließlich doch noch auf ein existierendes Projekt, das genau das schon getan hatte4. Also installierte ich stattdessen einfach dieses in Home Assistant, spendete dem Autor eine Kleinigkeit in seine Kaffeekasse und verwendete einfach denselben Mechanismus wie für die Wärmepumpe: Die Action-UUIDs der Virtuellen Eingänge via customize an die Zähler-Entitäten schreiben, und diese Entities als Trigger für die Loxone-Wertübergabe-Automatisierung ergänzen:

sensor.wallbox_leistung_ladestation:
loxone_uuid: '1c4f7a4c-01f2-34fa-ffff7f08837d3b2d'

sensor.wallbox_zahlerstand_ladestation:
loxone_uuid: '1c4f7a58-028e-7e0e-ffff7f08837d3b2d'

sensor.wallbox_status_ladevorgang:
loxone_uuid: '1c55f52c-0318-f090-ffff7f08837d3b2d'

Wallbox-Status für Loxone übersetzen

Um Leistung und Zählerstand der Wallbox in Loxone einzubinden, habe ich den Wallbox-Baustein verwendet. Dieser ist gleichzeitig auch ein Zähler, kann also im Energieflussmonitor dargestellt werden. Zusätzlich hat er aber eine eigene Visualisierung, in der er z.B. auch den aktuellen Ladezustand anzeigt. Außerdem kann er auch verwendet werden um den Ladevorgang zu steuern, verschiedene Lademodi zu definieren etc. – hier soll es aber zunächst nur um die Darstellung gehen.

Leistung und Zählerstand waren einfach anzubinden, da diese bereits als Zahlen an die jeweiligen virtuellen Eingänge gemeldet werden. Da SMA allerdings in W und Wh misst, und Loxone in kW bzw. kWh, werden beide Werte durch einen Skalierer-Baustein geführt, bevor sie and den Eingängen Cp bzw. Mr des Wallbox-Bausteins ankommen (s. oberer Teil der Abbildung).

Der Status der Wallbox liegt in Home Assistant als Text vor, der entweder not_connected (kein Fahrzeug angeschlossen), sleep_mode (Fahrzeug angeschlossen, lädt nicht) oder active_mode (Fahrzeug lädt) lautet. Der Wallbox-Baustein hat zwei Digitaleingänge Vc (Vehicle Connected) und Cac (Charging Active), die separat angesteuert werden müssen. Das löse ich über eine Befehlserkennung, die das erste Zeichen als ASCII-Wert extrahiert, einen Status-Baustein, der die Statuswerte 0, 1 bzw. 3 ausgibt, sowie einen Binärdekoder, der diesen Wert in zwei einzelne Status-Bits aufteilt (s. unterer Teil der Abbildung). Weitere im Screenshot verwendete Ein- und Ausgänge sind für die Steuerung des Ladevorgangs über den Energiemanager zuständig und werden im nächsten Teil erklärt.

Zusammenfassung

Dank Home Assistant, hervorragenden Integrationen aus der Community, der eventbasierten Übertragung an den Miniserver via PyLoxone und Loxones Flexibilität in Bezug auf Energieverbraucher kann ich nun auf einen Blick sehen, wieviel Energie an einem bestimmten Tag die Wärmepumpe, die Wallbox oder meine anderen Geräte im Haus verbraucht haben. Sollte ich irgendwann auf die Idee kommen, die Waschmaschine auch noch getrennt auswerten zu wollen, kann ich mir sicher sein, dass das auch funktionieren wird. Hier noch einmal zum Vergleich die Werte aus den jeweiligen Apps, jeweils vom selben Tag. Dasselbe funktioniert natürlich auch pro Woche, Monat, Jahr, oder insgesamt.

Fußnoten

  1. (was sich später als falsch herausstellen sollte) ↩︎
  2. Danke an Thomas und Alex! ↩︎
  3. Code auf GitHub: https://gist.github.com/agoeb/130e447152ca9c1ce3cd99d117156d91 ↩︎
  4. Wie ich das trotz der Bezeichnung „SMA EV Charger integration for Home Assistant“ zunächst nicht finden konnte, bleibt vermutlich ein Rätsel. ↩︎

Ein Kommentar zu „Energiemonitoring mit Loxone – Wallbox

Hinterlasse einen Kommentar

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..