Smartmeter im Selbstbau

Wir haben bei uns im Haus einen sogenannten Smartmeter. Diese Stromzähler bieten in der Regel eine Schnittstelle an, über die gemessene Stromwerte von mir als Kunden ausgelesen werden können. In meinem Fall wurde ein Easymeter Q3M verbaut. Dieser Zähler bietet eine MSB und INFO-DSS (Infrarot) Schnittstelle an. Die MSB-Schnittstelle ist allerdings mit einem Aufkleber versehen, die eine Verplombung darstellt. Ein Entfernen dieses Aufklebers stellt demnach eine Manipulation am Messgerät dar und ist nicht erlaubt. Für das Auslesen des Smartmeters wird diese Schnittstelle aber auch nicht benötigt, sondern ich nutze die Infrarot-Schnittstelle für das SML-Protokoll.

Damit erweiterte Informationen über die INFO-DSS Schnittstelle ausgelesen werden können, müssen diese über eine PIN am Smartmeter freigeschaltet werden. Üblicherweise stellt der Messstellenbetreiber diese kostenlos zur Verfügung. In meinem Fall ist das die EWE NETZ GmbH. Sie bieten hierfür eine Servicerufnummer und ein Kontaktformular an, worüber die PIN kostenlos angefragt werden kann. Falls keine PIN verfügbar ist, können aber dennoch grundsätzliche Verbrauchsinformationen ausgelesen werden.

Zum Auslesen der INFO-DSS Schnittstelle wird ein Infrarot-Interface benötigt. Dazu verwende ich ein IR-TTL Interface, das an einen ESP8266 angeschlossen wird. In meinem Fall nutze ich dafür einen Wemos D1. Den IR-TTL Lesekopf habe ich bereits fertig über eBay gekauft.

Dazu wird das IR-TTL wie folgt an den Wemos D1 gelötet:

IR-TTLWemos D1
GNDGND
VCC5V
TXD6
RXD5
Belegung zwischen IR-TTL und Wemos D1

Damit die Werte mit dem IR-TTL Adapter und dem Wemos D1 ausgelesen werden können, nutze ich die Tasmota Firmware. Dazu muss allerdings ein eigener Build erzeugt werden, da die notwendige Script-Sprache im allgemeinen Build nicht enthalten ist.

Zur Vereinfachung könnt ihr gerne mein Image verwenden:

Falls ihr einen eigenen Build erzeugen möchtet, geht das ganz einfach mit Hilfe von Gitpod. Sobald die Entwicklungs-Umgebung geladen ist, einfach die Datei /tasmota/user_config_override.h im unteren Bereich vor dem letzten #endif mit den folgenden Zeilen erweitern:

#ifndef USE_SCRIPT
#define USE_SCRIPT
#endif
#ifndef USE_SML_M
#define USE_SML_M
#endif
#ifdef USE_RULES
#undef USE_RULES
#endif

Anschließend kann im Terminal mit ‘platformio run -e tasmota’ der Build gestartet werden. Sobald der Build fertig ist, sind die Images unter /build_output/firmware/ zu finden.

Screenshot: Gitpod-Terminal

Wie der Wemos D1 geflasht werden kann, ist hier ausführlich beschrieben. Sobald der Wemos D1 online ist, muss nur noch das SML-Script gespeichert werden. Dazu muss lediglich im Web-Interface unter Consoles -> Edit Script folgendes Script eingefügt werden:

>D

>B
=>sensor53 r
tper=60

>M
+1,14,s,16,9600,SML
1,77070100010800ff@1000,Verbrauch,kWh,Power_in,1
1,77070100020800ff@1000,Einspeisung,kWh,Power_out,1
1,77070100100700ff@1,Akt. Verbrauch,W,Power_act,1
1,77070100240700ff@1,Wirkleistung L1,W,Power_p1,1
1,77070100380700ff@1,Wirkleistung L2,W,Power_p2,1
1,770701004c0700ff@1,Wirkleistung L3,W,Power_p3,1
#

Grob zusammengefasst: Mit >B wird die Boot-Sequenz deklariert. Mit sensor53 r wird veranlasst, die Meter Deskriptoren auszulesen. tper=60 definiert den Intervall für TelePeriod. Somit werden alle 60 Sekunden die Meter-Werte an das Telemetrie-Interface von Tasmota gesendet. Die Telemetrie-Werte sind z.B. interessant, wenn ihr per MQTT die Werte zur Verfügung stellen möchtet.

In >M wird das eigentliche Metering-Interface deklariert. In unserem Fall nutzen wir nur eins. In der ersten Zeile wird das TTL-Interface initialisiert, also 14 ist der rxGPIO, s legt den Meter-Typen für SML fest, 16 erzeugt einen Medianfilter, 9600 ist die Baudrate und der letzte Wert definiert den JSON-Präfix für das Web-Interface oder MQTT. Eine genaue Erklärung findet ihr hier.

Wenn alles funktioniert, sollte das Web-Interface so aussehen:

Screenshot: Tasmota Web-Interface

Und über MQTT werden die Meter-Werte alle 60 Sekunden gesendet – wie in diesem Beispiel gut zu erkennen:

{
  "Time": "2022-01-12T21:24:34",
  "SML": {
    "Power_in": 12016,
    "Power_out": 0.2,
    "Power_act": 349.9,
    "Power_p1": 157.2,
    "Power_p2": 169.6,
    "Power_p3": 22.4
  }
}

Im Schrank sieht das ganze nun so aus. Als Gehäuse für den Wemos D1 habe ich einfach eine alte Bonbon-Dose verwendet.

Und wozu die ganze Mühe? Dank MQTT können so die gemessenen Werte ganz einfach beispielsweise ins Smarthome-Dashboard integriert werden. In meinem Fall nutze ich dafür Home-Assistant:

Screenshot: Home-Assistant

2 Gedanken zu „Smartmeter im Selbstbau

  1. Mir ist aufgefallen das der IR-TTL mit 5V Versorgt wird, somit auch ein 5V Signal zurückliefert (minus Diodenspannung). Das ist aber zu viel für den ESP der ja nur 3V3 an den IOs erlaubt.

    Besteht da nicht eine gefahr für die Hardware?

    MfG. Thomas

    1. Hallo Thomas, bitte entschuldige die späte Antwort. Der IR-TTL wird nicht vom USB-Netzteil oder so versorgt, sondern hängt an den GPIOs des ESP. Laut schneller Recherche liegt dort auch 3,3V an, bzw. “0.8 x VDD for minimal Voh with a Imax of 12mA”. Aus eigener Erfahrung kann ich sagen, dass das Setup nun seit gut zwei Jahren läuft, und der IR-TTL keine Probleme macht. Allerdings hatte ich einige Wochen ein komisches Verhalten. Teilweise wurden sprunghaft falsche Werte gemessen. Mal lag ein einzelner Wert bei 0, oder 1000 oder 999.999. Ich habe den Wemos inzwischen mit einem Magnetschalter erweitert, um den Gaszähler zu messen. Ich glaube, das Problem lag daran. Letztendlich war es das USB-Netzteil. Ich werde bald nochmal einen Blogbeitrag zum erweiterten Setup schreiben und diesen Sachverhalt beleuchten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert