EMH eHZB Smart Meter in Home Assistant integriert
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:
- Optokoppler am Zähler anbringen (Magnet)
- USB-Kabel zum Rechner führen (Kabellänge 3m)
- Dem Docker Container, in dem Home Assistant läuft, den Zugriff auf die USB-Device einrichten.
- Container neu starten
- ELD21-Integration einrichten
- 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
Der EMH eHZb stellt sieben Sensoren zur Verfügung:
- aktuelle Gesamtwirkleistung in Watt
positive Werte für Netzbezug, negative Werte für Netzeinspeisung4 - aktuelle Wirkleistung Phase L1 in Watt
- aktuelle Wirkleistung Phase L2 in Watt
- aktuelle Wirkleistung Phase L3 in Watt
- negative Gesamtwirkenergie in Wattstunden
= Gesamtverbrauch seit Installation des Zählers - positive Gesamtwirkenergie in Wattstunden
= Gesamteinspeisung seit Installation des Zählers - 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.