Stromzähler auslesen: IR-Lesekopf mit ESPHome und SML

Stromzähler auslesen mit IR-Lesekopf, ESP32 und ESPHome: SML-Komponente einrichten, OBIS-Codes aus dem Log lesen und Zählerstand ins Energy Dashboard holen.

Stand
Lesezeit
8 Min.
Blatt
54 von 54
Thema
ESPHome
Stromzähler auslesen: IR-Lesekopf mit ESPHome und SML

Werbung / Affiliate-Links: Mit * markierte Links sind Affiliate-Links. Beim Kauf über diese Links erhalten wir eine kleine Provision — für dich ändert sich am Preis nichts. Als Amazon-Partner verdienen wir an qualifizierten Verkäufen.

Dein digitaler Stromzähler kennt Bezug, Einspeisung und oft auch die aktuelle Leistung. Er zeigt sie nicht nur im Display, sondern sendet sie über eine optische Schnittstelle auf der Front. Mit einem IR-Lesekopf, einem ESP32 und ESPHome holst du den Zählerstand 1.8.0 direkt vom Zähler nach Home Assistant. Diese Anleitung führt dich von der Freischaltung bis zum Energy Dashboard.

Was du für das Auslesen brauchst

Dieser Artikel gilt nur für Zähler mit optischer SML-Ausgabe (Smart Message Language). Ob dein Zähler SML sendet, steht im Handbuch oder Datenblatt deines Modells. Optische Schnittstellen mit anderem Protokoll, etwa IEC 62056-21 ohne SML, deckt diese Konfiguration nicht ab. Laut ESPHome-Doku kommt das SML-Telegramm etwa alle 2 bis 4 Sekunden, die Komponente sml liest es passiv mit.

  • Lesekopf: Er sitzt magnetisch auf der optischen Schnittstelle. Wir nehmen die TTL-Variante ohne eigene WLAN-Firmware, zum Beispiel den Hichi TTL IR Lesekopf*. Laut Produktbeschreibung enthält er IR-Diode, Fototransistor und Ringmagnet, läuft mit 3 bis 5 V und gibt die Daten per UART aus. Die WLAN-Varianten mit Tasmota-Firmware brauchst du für ESPHome nicht.
  • Auswerteeinheit: Ein ESP32-Board wie das ESP32-DevKitC-32E*. Wie du ein Board grundsätzlich in Home Assistant einbindest, steht in unserer Anleitung zu ESP32 und ESPHome.
  • Dazu: vier Jumper-Kabel, ein USB-Kabel und ein USB-Netzteil für den Dauerbetrieb.

So haben wir verglichen: Auswahlkriterien waren ein TTL-Ausgang und die Anbindung an ESPHome. Datenbasis sind Herstellerangaben, die Produktbeschreibungen und die offizielle ESPHome-Doku. Die Produkte haben wir nicht selbst getestet.

Die Doku empfiehlt für den Eigenbau einen Fototransistor wie den BPW40 (Emitter an Masse, Kollektor an RX). Der fertige Lesekopf erspart dir diese Bastelei. Die Zählerkompatibilität bleibt trotzdem Foren-Erfahrung: Ob dein Zähler mit deinem Kopf sauber liest, garantiert kein Hersteller.

Zählerzugang freischalten

Viele Zähler senden die Daten nur, wenn die Schnittstelle freigeschaltet ist. Laut FAQ eines Herstellers von Zählerzubehör bekommst du dafür beim Messstellenbetreiber eine vierstellige PIN, meist telefonisch angefordert und per Post geschickt. Je nach Modell gibst du sie per Taster oder Lichtsignal ein. Bei manchen Geräten muss zusätzlich der erweiterte Datensatz im Menü „InF“ oder „Info“ auf „ON“ stehen. Die genauen Schritte stehen im Handbuch deines Zählers. Maßgeblich ist dein Messstellenbetreiber.

Sicherheit: Zähler bleibt zu

  • Der Lesekopf kommt nur magnetisch auf die optische Schnittstelle. Öffne den Zähler nicht und entferne keine Plomben.
  • Am 230-V-Netz fasst du nichts an. Der Zählerkasten ist Sache von Netzbetreiber und Elektrofachkraft.
  • Der ESP32 hängt nur an USB (5 V). Zum Erstflashen steckst du das Board per USB an deinen Rechner, den Lesekopf ziehst du dabei ab. Spätere Änderungen laufen per OTA über WLAN.
  • Wenn der Zähler dem Netzbetreiber oder Vermieter gehört, klär vorher, ob ein Lesekopf zulässig ist.

Verkabelung am ESP32

Der Lesekopf hat vier Anschlüsse: VCC, GND, TX und RX. Zum Mitlesen reichen drei:

LesekopfESP32
VCC3V3
GNDGND
TXGPIO16 (RX des ESP32)

Der TX-Ausgang des Kopfes geht an den Empfangspin des ESP32. Die Beschriftung stimmt nicht bei jedem Kopf. Im Easymeter-Thread der simon42-Community lag der Fehler nach Nutzerangaben an vertauschten TX-/RX-Pins. Kommt später nichts an, tausche die Leitung testweise.

ESPHome-Konfiguration für die SML-Komponente

Lege in ESPHome ein neues Gerät an und trag diese Konfiguration ein. Die Schlüssel api_key_stromzaehler und ota_stromzaehler musst du vorher in der secrets.yaml anlegen: ein gültiger, gerätespezifischer API-Schlüssel und ein OTA-Passwort. Alternativ behältst du die vom Geräteassistenten erzeugten Secret-Namen bei. Zuerst läuft der Log auf DEBUG, damit du die OBIS-Codes siehst.

esphome:
  name: stromzaehler

esp32:
  board: esp32dev

logger:
  level: DEBUG

api:
  encryption:
    key: !secret api_key_stromzaehler

ota:
  - platform: esphome
    password: !secret ota_stromzaehler

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

uart:
  id: uart_bus
  rx_pin: GPIO16
  baud_rate: 9600
  data_bits: 8
  parity: NONE
  stop_bits: 1

sml:
  id: mysml
  uart_id: uart_bus

Die Doku nennt 9600 Baud mit 8N1 oder 7E1. Siehst du Prüfsummenfehler im Log, stell parity: EVEN und data_bits: 7 ein. Flashe das Gerät einmal per USB, wie im Abschnitt zur Sicherheit beschrieben. Setz dann den Lesekopf auf die Schnittstelle.

OBIS-Codes aus dem Log ermitteln

Öffne in ESPHome das Log des Geräts. Sobald der Zähler sendet, listet die Komponente Server-ID und OBIS-Codes mit ihren Rohwerten. Das Format ist [server_id] OBIS-Code [Hexwert]. Typisch sind:

  • 1-0:1.8.0: Wirkenergie Bezug gesamt
  • 1-0:2.8.0: Wirkenergie Einspeisung gesamt (nur bei Zählern mit Einspeisung)
  • 1-0:16.7.0: aktuelle Wirkleistung gesamt

Welche Codes dein Zähler tatsächlich sendet, steht in deinem Log. Zähler ohne Einspeisemessung liefern keinen sinnvollen Wert für 2.8.0. Übernimm nur Codes, die dort auftauchen.

Sensoren definieren

Ergänze die Konfiguration um die Sensoren. Der Faktor multiply rechnet den Rohwert in kWh um. Das Doku-Beispiel nutzt 0.0001, weil dort der Rohwert in Zehntel-Wattstunden vorliegt. Vergleiche das Ergebnis mit dem Display deines Zählers und passe den Faktor an.

sensor:
  - platform: sml
    name: "Zählerstand Bezug"
    sml_id: mysml
    obis_code: "1-0:1.8.0"
    unit_of_measurement: kWh
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.0001

  - platform: sml
    name: "Zählerstand Einspeisung"
    sml_id: mysml
    obis_code: "1-0:2.8.0"
    unit_of_measurement: kWh
    accuracy_decimals: 1
    device_class: energy
    state_class: total_increasing
    filters:
      - multiply: 0.0001

  - platform: sml
    name: "Wirkleistung"
    sml_id: mysml
    obis_code: "1-0:16.7.0"
    unit_of_measurement: W
    device_class: power
    state_class: measurement

Hat dein Zähler keine Einspeisung, streich den zweiten Block. Bei mehreren Zählern am selben Lesekopf brauchst du zusätzlich die server_id. Für sehr große Zählerstände empfiehlt die Doku einen text_sensor mit Template-Sensor in Home Assistant, damit keine Rundungsfehler entstehen. Danach setzt du das Log auf INFO zurück.

Typische Stolpersteine

  • Kopf sitzt schief: Der Fototransistor muss mittig vor der IR-Diode des Zählers liegen. Der Ringmagnet rastet meist von selbst ein, bei Zählern mit Kunststoffring prüf die Position im Log.
  • Fremdlicht: Direkte Sonne auf der Schnittstelle kann den Empfang stören. Bei Aussetzern probier eine andere Montageposition oder schatte die Stelle ab.
  • Leerer Log: Zeigt das Debug-Log nur Verbindungsmeldungen, aber keine OBIS-Codes, liegt es fast immer an Freischaltung, Pinbelegung oder Parität.
  • Zählerstand springt: Ein falscher Faktor bei multiply fällt sofort auf, wenn du den Wert mit dem Display vergleichst. Prüf das, bevor die Daten ins Energy Dashboard laufen. Falsche Statistikwerte lassen sich nachträglich nur umständlich korrigieren.
  • WLAN-Abbruch: Bricht die Verbindung ab, fehlen in dieser Zeit Messwerte. Der Zählerstand selbst bleibt im Zähler erhalten.

Einbindung ins Energy Dashboard

Das Gerät erscheint in Home Assistant über die ESPHome-Integration. Öffne dann Einstellungen → Dashboards → Energie. Unter Stromnetz → Netzanschluss hinzufügen wählst du „Zählerstand Bezug“ als aus dem Netz bezogene Energie und bei Bedarf „Zählerstand Einspeisung“. Beide Sensoren haben Einheit, device_class: energy und state_class: total_increasing. Laut Home-Assistant-Doku muss ihr Wert außerdem vom Recorder erfasst werden. Taucht ein Sensor in der Auswahl nicht auf, prüf die Recorder-Einstellungen und die Statistik. Die Einrichtung in Ruhe erklärt unser Artikel zum Energy Dashboard.

Den Stromverbrauch einzelner Geräte oder Stromkreise misst du so nicht. Dafür eignen sich Steckdosen mit Messfunktion oder Klemmen-Sensoren. Mehr dazu in Stromverbrauch messen mit dem ESP32 und beim Shelly 3EM, der per Klemmen im Verteiler misst. Der Einbau dort ist Sache einer Elektrofachkraft.

Tasmota statt ESPHome

Alternativ gibt es Tasmota mit SML-Skript. Es liest dieselbe Schnittstelle, die Einrichtung läuft über ein Skript statt YAML. Die Unterschiede der beiden Firmwares beschreibt der Vergleich Tasmota gegen ESPHome. Wer ohnehin ESPHome nutzt, bleibt am besten dabei.

FAQ

Der Zähler sendet nichts. Woran liegt das? Häufigste Gründe: Schnittstelle nicht freigeschaltet (PIN), TX/RX vertauscht, Kopf sitzt schief oder die Parität passt nicht. Prüf der Reihe nach, mit dem Debug-Log als Maßstab.

Brauche ich eine Genehmigung für den Lesekopf? Der Lesekopf verändert den Zähler nicht. Bei Miet- oder Messstellenverträgen kann trotzdem eine Zustimmung nötig sein. Frag im Zweifel den Messstellenbetreiber.

Wie genau sind die Werte? Die Daten stammen vom Zähler. Die in Home Assistant angezeigte Genauigkeit hängt aber von der übermittelten Auflösung, dem Skalierungsfaktor und möglichen Rundungsfehlern in ESPHome ab, die die Doku bei großen Werten nennt. Gleiche die Werte mit dem Zählerdisplay ab, gleiche Genauigkeit ist nicht garantiert. Die Aktualisierung folgt dem Telegrammtakt von etwa 2 bis 4 Sekunden.

Funktioniert jeder Lesekopf mit jedem Zähler? Nein. Kompatibilität ist Community-Erfahrung und nicht garantiert. Lies im Zweifel Berichte zu deinem Zählermodell.

Fazit

Der Aufbau lohnt sich für Eigentümer und Mieter mit digitalem Zähler und ESPHome-Grundkenntnissen, die den Gesamtverbrauch ohne Eingriff in den Zählerkasten erfassen wollen. Für die Einzelmessung pro Stromkreis ist er nicht gedacht. Wer sich gar nicht mit YAML befassen will, nimmt ein Fertiggerät mit fertiger Firmware. Plane einen Abend für Freischaltung, Log und Faktor ein, der Rest ist in einer halben Stunde erledigt.

Autor
Philipp
Themen
Home Assistant, ESP32, Zigbee

Schreibt über Home Assistant, ESP32 und alles, was das Smart Home smarter macht.

Dieser Artikel wurde mit KI-Unterstützung erstellt; Angaben werden gegen offizielle Dokumentation und Herstellerangaben geprüft. Wie die Artikel entstehen