Als wir vor einiger Zeit unseren ersten digitalen Messplatz bekamen, wollte ich die Daten des Stromzähler über die optische Schnittstellen auslesen. Der hierfür notwendigen USB-IR-Schreib-/Lesekopf wurde bestellt, um dann festzustellen, dass der damals vom Stromnetz Berlin verbaute Zähler zwar grundsätzlich kompatibel, aber aufgrund von minderwertigen Bauteilen nicht dauerhaft nutzbar war. Diese Aussicht zusammen mit der Tatsache, dass ich die Softwareseite nicht vollständig geklärt hatte, führte dazu, dass das Projekt im Sande verlief.

Letztlich habe ich das Projekt wieder aufgenommen.

Umsetzung

Der alte Zähler wurde im Rahmen der Montage der PV-Anlage durch ein neues, im Hinblick auf die Auslesbarkeit zuverlässigeres Modell (EMH eHZB) ersetzt. Auf der Softwareseite setze ich mittlerweile auf Home Assistant, der mir bei der Intergration neuer Komponenten schon viel Kopfschmerz erspart hat.

Das Freischalten des Datenzugangs hatte ich vorab erledigt.1 Die eigentliche Integration war dann sehr einfach:

  1. Optokoppler am Zähler anbringen (Magnet)
  2. USB-Kabel zum Rechner führen (Kabellänge 3m)
  3. Dem Docker Container, in dem Home Assistant läuft, den Zugriff auf die USB-Device einrichten.
  4. Container neu starten
  5. ELD21-Integration einrichten
  6. Fertig.

Die Schritte 3+4 sind spezifisch beim Betrieb von Home Assistant in einem Docker-Container (siehe weiter unten). Betreibt man Home Assistant nicht im Container, dürfte ein Neustart notwendig sein.

Ermitteln des Gerätenamens

Unabhängig von der Art der Installation ist die Vorgabe des zutreffenden Gerätenamens (/dev/ttyxxx) notwendig:

  • Installation ohne Docker: Vorgabe bei der Einrichtung der Integration
  • Installation mit Docker: Freigabe des Gerätes für den Container in der Docker-Konfiguration

Der Lesekopf wird als serielles Gerät eingebunden, sodass /deb/ttyUSB0 ein guter Startpunkt ist, der meistens passt.

Auf meinem Docker-Host wird /deb/ttyUSB0 systemseitig bereits für den Conbee III-Stick verwendet, sodass der Lesekopf auf /dev/ttyUSB1 gemappt wurde.

Um Probleme bei späteren Rekonfiguration zu vermeiden, habe ich auf den gerätespezifischen Gerätenamen im Format /dev/serial/by-id/usb-XXXXXXXXX umgestellt. Diese Bezeichner enthalten neben den Hersteller und Produkttyp oft auch eine Seriennummer. In diesem Fall bezeichnen er dann das jeweilige Gerät eindeutig.

Diesen Gerätenamen kann man wie folgt ermitteln:

ls /dev/serial/by-id/*

Der jeweilige Gerätename kann dann für die Konfiguration genutzt werden.2

Docker-Spezifika

Während man bei einer Installation ohne Docker den konkreten Gerätenamen bei der Konfiguration der Integration vorgibt, ist das Vorgehen unter Docker anders.

Hier muss man zunächst das physikalische Gerät in den Container einbinden. Hierbei wird der Name des physikalischen Geräte auf dem Host auf einen Gerätenamen im Container gemappt, wobei Letzterer der generischer Gerätename /deb/ttyUSB0 sein kann.

Umsetzung in einer docker-compose.yml:

    devices:
    #      - /path/to/device:/path/to/device     
    # ID ermitteln: ls -l /dev/serial/by-id/
    # IR Sensor am Stromzähler
      - /dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_D20101LS-if00-port0:/dev/ttyUSB0

Hier wird das physikalische Gerät auf das Gerät /dev/ttyUSB0 im Container gemappt. Wenn im Container bereits ein Gerät /dev/ttyUSB0 definiert wurde, wäre der Gerätename entsprechend anzupassen.

Bei der Konfiguration der Integration in Home Assistant ist Gerätename zu verwenden, der innerhalb des Container definiert wurde, hier also /dev/ttyUSB0.

Ich hatte diesen Weg, die Hardware über den gerätespezifischen Namen anzusprechen, bereits beim Conbee III genutzt. Beim Lesekopf funktioniert dies erwartungsgemäß ebenfalls, jedoch wirft der Container Warnungen, dass das Gerät /dev/ttyUSB0 nicht lesbar sei. Da die Integration die Daten dennoch auslist, kann man diese Warnungen IMO ignorieren.3

Ergebnis

Anzeige der Sensorenwerte der EDL21-Integration im Homes Assistant Dashboard Der EMH eHZb stellt sieben Sensoren zur Verfügung:

  1. aktuelle Gesamtwirkleistung in Watt
    positive Werte für Netzbezug, negative Werte für Netzeinspeisung4
  2. aktuelle Wirkleistung Phase L1 in Watt
  3. aktuelle Wirkleistung Phase L2 in Watt
  4. aktuelle Wirkleistung Phase L3 in Watt
  5. negative Gesamtwirkenergie in Wattstunden
    = Gesamtverbrauch seit Installation des Zählers
  6. positive Gesamtwirkenergie in Wattstunden
    = Gesamteinspeisung seit Installation des Zählers
  7. Zählpunkt-ID 1
    = Zählernummer

Die obige Darstellung mit einer Phase, die Strom aus dem Netz zieht, und zwei Phasen, die einspeisen, ist keine Fehldarstellung, sondern ein Effekt, der durch unsere PV-Anlage verursacht wird. Nach meinen Recherchen speist das System gleichmäßig auf allen drei Phasen ein, wobei es sich am höchsten Verbrauch orientiert. Das ist bei unser regelmäßig die Phase L2.5 Aber um ehrlich zu sein, habe ich das Ganze noch nicht richtig durchdrungen.

Nutzen

Ohne eine PV-Anlage würde uns die Integration des Stromzähler neben den Gesamtwirkenergie auch Informationen über den augenblicklichen Stromverbrauch (aka Gesamtwirkleistung) geben.

Durch die PV-Anlage produzieren wir im Jahresmittel gut 75% des verbrauchten Stroms selbst.6 Damit läuft dieser Teil des Stromverbrauchs nicht durch den Stromzähler, und die vom Stromzähler eimittelte Gesamtwirkenergie verliert ihre Aussagkraft.

Bis ich die Steuerung der PV-Anlage in Home Assistant integriert habe, könnte ich aus dem Vorzeichen und der Höhe der aktuelle Gesamtwirkleistung den momentane Betriebszustand der PV-Anlage grob ableiten.

Fazit

Die Integration des Zählers in Home Assistant war - nach ich mich mit LLM-Unterstützung kurz eingearbeitet hatte - einfach. Bei der Umsetzung war die Suche nach dem "ordentlich weggepackten" Lesekopf der größte Zeitfaktor.

Da der Nutzen der Messwerte bei uns durch die PV-Anlage stark eingeschränkt ist, stand bei mir - wie bei 80% des Smarthome-Krams - die Neugier, der Spaß an der Umsetzung und die Freude, als es lief, im Vordergrund.

Wer keine PV-Anlage hat, kann durch die Intergation wertvolle Einblicke in den eigenen Stromverbrauch gewinnen.

 


1 Zunächst musste ich beim Stromnetz Berlin telefonisch die PIN erfragen (Ja, derzeit geben sie die PIN telefonisch raus, auch wenn es auf der Webseite anders beschrieben ist...), und habe dann mit der Taschenlampe "morsend" (Link auf PDF-Datei mit der Bedienungsanleitung) die Konfiguration vorgenommen.
2 Ich muss hier darauf hinweisen, dass ich diesen Weg nur bei meinem Docker-Setup testen konnte.
3 Man sollte den Container jedoch so konfigurieren, dass kein oder nur ein größenbeschränktes Log geschrieben wird.
4 Die Angebe von positiven Werte für Netzbezug und negativen Werten für Netzeinspeisung ist der Soll-Zustand. Es soll Sensortypen geben, bei denen die Vorzeichen anders verwendet werden.
5 Für mich stellt sich aus obigem Bild die Frage, ob die Stromkreise im Haus optimal über die Phasen verteilt sind. Ich kann aber auch nicht ausschließen, dass unserer Nutzungsverhalten (z.B. aktive Netzwerkkomponenten und NAS im Keller) vom von den Planern erwarteten Nutzungsverhalten abweichen.
6 Und das ist keine Milchmädchenrechnung, bei der der gemesse Gesamtverbrauch ins Verhältnis zur produzierten Strommenge gesetzt wird, sondern eine Berechnung, bei der natürlich auch der Netzbezug einfließt. Die Produktion der PV-Anlage liegt über das Jahr betrachtet bei etwas mehr als dem Doppelten unseres Verbrauchs.