smarthome-tricks.de

ESP32 Stromzähler auslesen

Wie viel Strom verbraucht das Haus gerade? Läuft nachts noch ein größerer Verbraucher? Und wie stark verändert sich der Verbrauch, wenn Wärmepumpe, Waschmaschine oder Backofen eingeschaltet werden? Wer einen digitalen Stromzähler besitzt, kann viele dieser Informationen direkt auslesen und in Home Assistant darstellen.

Dafür braucht es häufig keinen teuren Energiemesser im Sicherungskasten. Viele moderne Stromzähler besitzen bereits eine optische Schnittstelle. Mit einem ESP32, einem passenden IR-Lesekopf und ESPHome lassen sich die dort ausgegebenen Daten lokal erfassen.

In dieser Anleitung schauen wir uns an, wie das grundsätzlich funktioniert, welche Hardware benötigt wird und wie die Werte anschließend in Home Assistant landen.

Hinweis: Dieser Artikel enthält Affiliate-Links. Bei einem Kauf über einen gekennzeichneten Link erhalte ich eine kleine Provision. Für dich bleibt der Preis unverändert.

Welche Stromzähler lassen sich mit dem ESP32 auslesen?

Als Erstes solltest du dir deinen Stromzähler genauer ansehen. Viele digitale Stromzähler besitzen auf der Vorderseite eine optische Schnittstelle. Häufig erkennt man sie an zwei kleinen runden Öffnungen beziehungsweise einem optischen Sende- und Empfangsbereich.

In Deutschland geben viele dieser Zähler ihre Daten über SML, Smart Message Language, aus. ESPHome besitzt dafür eine eigene SML-Komponente.

Es gibt allerdings verschiedene Zählermodelle und Protokolle. Prüfe deshalb vor dem Kauf eines Lesekopfes die genaue Typenbezeichnung deines Stromzählers. Auch Baudrate und ausgegebene Messwerte können sich unterscheiden.

[Bild-Platzhalter: Digitaler Stromzähler mit markierter optischer Schnittstelle]

Welche Werte kann ich auslesen?

Welche Informationen tatsächlich ausgegeben werden, hängt vom jeweiligen Stromzähler und dessen Konfiguration ab. Typische Werte sind:

Gerade die aktuelle Leistung ist für Home Assistant interessant. Statt nur einmal im Monat auf den Zählerstand zu schauen, sieht man damit nahezu live, wie sich der Stromverbrauch verändert.

Was benötigen wir?

Für den Aufbau braucht es nur wenige Komponenten:

ESP32 Development Boards:
ESP32 Boards bei Amazon ansehen*

IR-Lesekopf für digitale Stromzähler:
IR-Leseköpfe für Stromzähler bei Amazon ansehen*

Beim Lesekopf würde ich nicht einfach irgendein Modell bestellen. Kontrolliere vorher, ob der Adapter zu deinem Zähler und zur gewünschten UART-Anbindung des ESP32 passt.

Wie funktioniert das Auslesen?

Der ESP32 verändert nichts am Stromzähler. Er liest lediglich die Daten mit, die der Zähler über seine optische Schnittstelle ausgibt.

Bei vielen SML-Zählern wird regelmäßig ein Datentelegramm übertragen. Der Lesekopf empfängt dieses Signal und gibt es über eine serielle Verbindung an den ESP32 weiter. ESPHome zerlegt anschließend das SML-Telegramm und stellt die gewünschten Werte als Sensoren bereit.

Damit bleibt die gesamte Auswertung lokal. Für die Übertragung der Messwerte vom ESP32 zu Home Assistant wird kein Cloud-Dienst benötigt.

IR-Lesekopf am Stromzähler befestigen

Viele fertige Leseköpfe besitzen einen Magneten und können direkt auf der optischen Schnittstelle des Zählers befestigt werden. Dadurch lässt sich der Sensor bei Bedarf jederzeit wieder entfernen.

Achte darauf, dass Sender beziehungsweise Empfänger des Lesekopfes genau über der optischen Schnittstelle sitzen. Schon eine ungünstige Position kann dazu führen, dass keine oder nur fehlerhafte Daten empfangen werden.

Der große Vorteil dieser Lösung ist, dass der Zähler selbst nicht geöffnet werden muss. An plombierten Bereichen oder an der Netzverdrahtung wird nichts verändert.

Wichtiger Hinweis zum Zählerschrank

Bei diesem Projekt arbeiten wir ausschließlich mit der von außen zugänglichen optischen Schnittstelle des Stromzählers. Öffne keine plombierten Bereiche des Zählerschranks und arbeite nicht an Leitungen mit Netzspannung. Arbeiten an der elektrischen Anlage gehören in die Hände einer Elektrofachkraft.

IR-Lesekopf mit dem ESP32 verbinden

Für SML verwendet ESPHome eine UART-Schnittstelle. Welche Pins benötigt werden, hängt vom verwendeten Lesekopf ab.

Bei einem einfachen UART-Lesekopf könnte der Aufbau beispielsweise so aussehen:

LesekopfESP32
VCCje nach Modul 3,3 V oder 5 V
GNDGND
TXGPIO16 (RX)

Die Versorgungsspannung solltest du unbedingt anhand der technischen Daten deines Lesekopfes kontrollieren. Nicht jedes Modul arbeitet mit der gleichen Spannung.

[Bild-Platzhalter: Schaltplan ESP32 mit UART-IR-Lesekopf am digitalen Stromzähler]

SML in ESPHome einrichten

ESPHome unterstützt SML direkt. Zunächst richten wir die serielle Schnittstelle ein.

uart:
  id: uart_bus
  rx_pin: GPIO16
  baud_rate: 9600

sml:
  id: mysml
  uart_id: uart_bus

9600 Baud ist bei vielen SML-Zählern üblich, aber nicht universell. Abhängig vom Stromzähler können andere UART-Einstellungen erforderlich sein. Wenn keine gültigen Daten ankommen oder ESPHome Prüfsummenfehler meldet, solltest du deshalb zuerst die Schnittstellenparameter deines Zählers kontrollieren.

OBIS-Codes des Stromzählers herausfinden

Jetzt kommt der interessanteste Teil. Die einzelnen Messwerte innerhalb eines SML-Telegramms werden über sogenannte OBIS-Codes identifiziert.

Typische Codes können beispielsweise so aussehen:

OBIS-Codehäufige Bedeutung
1-0:1.8.0bezogene Energie / Zählerstand
1-0:2.8.0eingespeiste Energie
1-0:16.7.0aktuelle Wirkleistung

Die tatsächlich vorhandenen Codes solltest du immer anhand der Daten deines eigenen Zählers ermitteln. ESPHome kann die empfangenen SML-Daten im Debug-Log anzeigen. Dadurch lässt sich erkennen, welche OBIS-Werte übertragen werden.

[Bild-Platzhalter: ESPHome-Log mit erkannten SML- und OBIS-Werten]

Aktuelle Leistung in ESPHome anzeigen

Wenn dein Zähler die aktuelle Wirkleistung beispielsweise über 1-0:16.7.0 bereitstellt, kann daraus ein ESPHome-Sensor erstellt werden.

sensor:
  - platform: sml
    name: "Aktuelle Leistung"
    sml_id: mysml
    obis_code: "1-0:16.7.0"
    unit_of_measurement: "W"
    accuracy_decimals: 0
    device_class: power
    state_class: measurement

Nach dem Flashen des ESP32 steht dieser Sensor über die ESPHome-Integration in Home Assistant zur Verfügung.

Zählerstand auslesen

Interessant ist natürlich auch der eigentliche Energieverbrauch. Dafür wird bei vielen Zählern der OBIS-Code 1-0:1.8.0 verwendet.

sensor:
  - platform: sml
    name: "Stromzähler Bezug"
    sml_id: mysml
    obis_code: "1-0:1.8.0"
    unit_of_measurement: "kWh"
    accuracy_decimals: 3
    device_class: energy
    state_class: total_increasing

Je nach Zähler kann zusätzlich ein Umrechnungsfaktor notwendig sein. Vergleiche deshalb den in ESPHome angezeigten Wert mit dem Display des Stromzählers, bevor du die Daten dauerhaft verwendest.

PV-Einspeisung auslesen

Wer eine Photovoltaikanlage besitzt, bekommt eventuell noch einen weiteren interessanten Wert. Viele Zweirichtungszähler führen die ins Netz eingespeiste Energie separat.

Dafür wird häufig der OBIS-Code 1-0:2.8.0 verwendet. Ob dein Zähler diesen Wert über die optische Schnittstelle ausgibt, musst du am konkreten Gerät prüfen.

Damit können in Home Assistant Netzbezug und Einspeisung getrennt dargestellt werden.

Stromzähler in Home Assistant integrieren

Ist der ESP32 bereits über ESPHome mit Home Assistant verbunden, erscheinen die angelegten Sensoren automatisch als Entitäten.

Damit kannst du aktuelle Leistung und Zählerstände auf einem Dashboard darstellen oder für Automationen verwenden.

[Bild-Platzhalter: Home-Assistant-Dashboard mit aktuellem Stromverbrauch, Netzbezug und Zählerstand]

Daten im Home Assistant Energy Dashboard nutzen

Besonders interessant wird der Aufbau zusammen mit dem Energie-Dashboard von Home Assistant. Ein korrekt konfigurierter Energiezähler kann dort als Netzbezug verwendet werden.

Besitzt du einen Zweirichtungszähler und kannst auch die Einspeisung erfassen, lässt sich diese ebenfalls hinterlegen. Home Assistant kann daraus langfristige Statistiken über deinen Energieverbrauch erstellen.

Wichtig sind dafür korrekt konfigurierte Einheiten, Device Classes und State Classes. Beim Gesamtverbrauch sollte der Sensor beispielsweise als fortlaufender Energiezähler behandelt werden.

Was bringt die aktuelle Leistung?

Den Zählerstand einmal täglich zu erfassen ist nett. Für Automationen finde ich die aktuelle Leistung allerdings deutlich spannender.

Damit kannst du beispielsweise erkennen, wann größere Verbraucher eingeschaltet werden oder wie hoch die Grundlast des Hauses nachts ist.

Alternative: Stromzähler mit Impuls-LED auslesen

Nicht jeder Stromzähler liefert nutzbare SML-Daten. Viele elektronische Zähler besitzen aber eine blinkende LED, deren Impulse proportional zum Energieverbrauch sind.

Auf dem Zähler steht dann beispielsweise 1000 Imp/kWh oder 10.000 Imp/kWh. Mit einem Fototransistor oder geeigneten optischen Sensor können diese Lichtimpulse vom ESP32 gezählt werden.

ESPHome besitzt dafür den pulse_meter-Sensor. Aus der Zeit zwischen den Impulsen kann die aktuelle Leistung berechnet werden. Zusätzlich lässt sich die Gesamtzahl der Impulse erfassen.

Die Umrechnung hängt von der auf deinem Stromzähler angegebenen Impulskonstante ab. Werte aus Beispielkonfigurationen solltest du deshalb nicht ungeprüft übernehmen.

SML oder Impulse zählen?

SMLImpuls-LED
Aktuelle Leistunghäufig direkt verfügbarwird berechnet
Zählerstandhäufig direkt verfügbarmuss aus Impulsen berechnet werden
Einspeisungje nach Zähler möglichnicht immer unterscheidbar
HardwareIR-Lesekopfoptischer Impulssensor
ESPHomeSML-KomponentePulse Meter

Wenn mein Stromzähler SML unterstützt, würde ich diese Variante bevorzugen. Man erhält damit normalerweise wesentlich mehr Informationen direkt vom Zähler.

Brauche ich die PIN des Stromzählers?

Das hängt vom Zähler und Messstellenbetreiber ab. Bei manchen modernen Messeinrichtungen sind zusätzliche Informationen zunächst gesperrt und müssen über eine PIN freigeschaltet werden.

Wenn über die optische Schnittstelle nur wenige Daten ankommen, lohnt sich deshalb ein Blick in die Anleitung des Zählers beziehungsweise auf die Internetseite deines Messstellenbetreibers. Dort erfährst du auch, wie eine eventuell benötigte PIN angefordert und am Zähler eingegeben wird.

ESP32 bekommt im Zählerschrank kein WLAN

Das ist in der Praxis wahrscheinlich eines der häufigsten Probleme bei diesem Projekt. Ein Zählerschrank aus Metall ist für WLAN alles andere als ideal.

Ich würde deshalb zuerst testen, ob der ESP32 am vorgesehenen Standort eine stabile Verbindung bekommt. Falls nicht, kann der ESP32 außerhalb des Metallschranks montiert und der Lesekopf über ein geeignetes Kabel zum Zähler geführt werden.

Ein ESP32-Board mit Anschluss für eine externe WLAN-Antenne kann bei schwierigen Einbausituationen ebenfalls interessant sein.

ESP32 mit externer Antenne bei Amazon ansehen*

Weitere ESP32-Projekte für Home Assistant

Der Stromzähler ist nur eine von vielen Möglichkeiten, einen ESP32 als günstigen Sensor für Home Assistant einzusetzen. Weitere Projekte findest du in meiner ESP8266- und ESP32-Übersicht.

Wenn du mit ESPHome weitermachen möchtest, passen auch mein ESP32 Präsenzmelder mit LD2410 und die ESP32 IR-Fernbedienung für Home Assistant gut dazu.

Fazit: Stromverbrauch lokal mit ESP32 erfassen

Ein ESP32 am digitalen Stromzähler ist für mich eines der interessantesten ESPHome-Projekte überhaupt. Statt zusätzliche Messgeräte in der Elektroverteilung zu installieren, nutzen wir einfach die Daten, die der vorhandene Stromzähler ohnehin bereitstellt.

Wenn der Zähler SML über seine optische Schnittstelle ausgibt, ist der Aufbau überschaubar. ESP32 und IR-Lesekopf reichen für viele Installationen bereits aus. Danach stehen Zählerstand und häufig auch die aktuelle Leistung direkt in Home Assistant zur Verfügung.

Besonders nützlich wird das Ganze zusammen mit dem Energy Dashboard. Dadurch entwickelt sich das kleine ESP32-Projekt schnell zu einer dauerhaften Energieüberwachung für das gesamte Haus.

* Affiliate-Link: Bei einem Kauf über einen gekennzeichneten Link erhalte ich eine Provision. Für dich bleibt der Preis unverändert.

Die mobile Version verlassen