In meinem Keller hängt ein EMH-Stromzähler (Modell eHZ-KW8E2A5L0EQ2P). Er sendet seine Verbrauchsdaten über eine optische Schnittstelle im SML-Format – leider nur dort. Und im Keller gibt’s weder WLAN noch LAN. Also: Wie bekomme ich die Daten trotzdem zuverlässig und dauerhaft in Home Assistant?

Warum KNX?
Die einfachste Lösung: Ich benutze KNX – das Protokoll, das ohnehin überall in meinem Haus läuft. Im Keller liegt sogar ein ungenutztes zweiadriges Kabel, das ich bisher für DSL verwendet habe. Also habe ich KNX und Stromversorgung auf genau diesem Kabel mitgeschickt – zusammen mit einem Siemens BCU 5WG1117-2AB12, der praktischerweise gleich 5V für den Arduino Pro Micro liefert. Ob das „erlaubt“ ist? Gute Frage. Funktioniert es? Absolut.
Aufbau: Was ist verbaut?
- Zähler: EMH eHZ-KW8E2A5L0EQ2P (siehe Foto)
- IR-Leser: Günstiger TTL-Leser mit Saugnapf
- Microcontroller: Arduino Pro Micro (Leonardo-kompatibel)
- KNX: Siemens BCU 5WG1117-2AB12
- Integration: Loxone Miniserver → Home Assistant via KNX
- Software: Eigenbau Sketch in Arduino IDE
Der Code
Die Software liest das SML-Telegramm direkt von der seriellen Schnittstelle des IR-Lesers und extrahiert die drei wichtigsten Werte über feste Byte-Offsets:
- Total Consumption (kWh): Offset
156
- Total Generation (kWh): Offset
180
- Leistung L1+L2+L3 (W): Offset
284
Diese Werte werden per knx.groupWrite4ByteFloat()
direkt auf definierte Gruppenadressen geschrieben. Die Alive-LED (Pin 17) zeigt den Status an. KNX-seitig werden die Sensoren über DPT 14.056 eingebunden (siehe unten).
float totalConsumption = extractRawValue(156) / 10000.0;
float totalGeneration = extractRawValue(180) / 10000.0;
float powerTotal = extractRawValue(284) / 10.0;
Der gesamte Arduino-Sketch ist unten eingebettet.
Im Serial-Monitor solltet ihr folgende Ausgabe bekommen:

Sensor in Home Assistant
In der knx:
Konfiguration binde ich die Werte so ein:
knx:
sensor:
- name: "Keller Consumption (kWh)"
state_address: "0/6/1"
type: "14.056" # DPT 14.056 = 4-Byte Float
- name: "Keller Generation (kWh)"
state_address: "0/6/2"
type: "14.056"
- name: "Keller Power Total (W)"
state_address: "0/6/3"
type: "14.056"
Damit landen die Werte sauber in Home Assistant. Um daraus jetzt „saubere“ Sensoren zu erstellen habe ich jeweils noch eine Template-Umwandlung vorgenommen:

Template:
{% set current_value = states('sensor.total_consumption_hex') | float(0) %}
{{ current_value }}

So sieht es dann im Dashboard aus.
Fazit
Diese Lösung funktioniert extrem stabil, ist 100 % offline fähig (kein WLAN nötig) und kostet kaum 10 Euro an Hardware. Ich bekomme die Daten meines Zählers regelmäßig und mit minimalem Aufwand in Home Assistant – und spare mir einen teuren Lesekopf mit Netzwerkanschluss oder USB-Bridge.
Wenn du auch so einen Zähler hast und KNX verfügbar ist: Lös es doch so 😉
Gesamter Code auf Github: https://github.com/knallt/SMLtoKNX/