Moderne Messeinrichtungen bieten über eine optische Schnittstelle die Möglichkeit einige Werte auszulesen. Möchtest du also deinen Verbrauch erfassen, macht es Sinn diesen direkt aus dem Zähler zu ziehen. Von den verschiedenen Versorgern werden jedoch unterschiedlichste Zähler verbaut und für viele gibt es bereits Anleitungen im Internet. Für meinen Zähler von HolleyTech habe ich jedoch noch keine Anleitung gefunden, daher möchte ich hier meine Vorgehensweise mit dir teilen. Grundlage dafür ist eine Openhabian-Installation auf einem Raspberry Pi 3b. Des weiteren solltest du Node-RED mit dem Openhab-Packet installiert haben. Dies ist eine Besonderheit des Holleytech Smartmeters, näheres dazu jedoch im Kapitel „OpenHab Anbindung“.
Benötigte Bauteile und Informationen
Die Messeinrichtungen von HolleyTech (in meinem Fall ein DTZ541-ZDBA und DTZ541-ZEBA) sind mit einem Pin-Code gesichert. Diesen kannst du über deinen Messstellenbetreiber in Erfahrung bringen. In meinem Fall habe ich dazu Bayernwerk kontaktiert. Eine genaue Anleitung wie du deine Pin eingibst und durch das Menü navigierst erfährst du auf der Website des Herstellers. Dort sind alle Funktionen im Handbuch beschrieben. Zum Auslesen des Zählers solltest du die Pineingabe deaktiveren, denn nur wenn der Zähler entsperrt ist wird das vollständige Protokoll über die optische Schnittstelle ausgegeben.
Außerdem benötigst du einen seriellen Adapter. Wahlweise kannst du auch direkt mit der seriellen Schnittstelle deines Raspberrys arbeiten. Da ich jedoch mehrere Zähler auslesen möchte, habe ich mich für FTDI Umsetzer auf einer Fertigplatine entschieden. Diese kann ich direkt über USB mit meiner Steuerung verbinden. Zusätzlich zum Umsetzer wird noch ein IR-Empfänger benötigt. Da diese einzeln kaum zu bekommen sind, habe ich direkt einen größeren Pack Sende- und Empfangsdioden gekauft. Zu guter letzt benötigst du noch einen Widerstand mit 1k Ohm. Möchtest du ein Gehäuse zur Befestigung der Dioden nutzen, benötigst du noch Neodym-Magnete, denn um die Dioden im Zähler befindet sich ein metallischer Ring. Mit einem oder mehreren Magneten kannst du also dein Gehäuse komfortabel befestigen.
Beschaltung
Schalte einfach die Empfangsdiode zwischen 3,3 Volt und RxD an der FTDI Platine. Den Widerstand klemmst du dazwischen. Hierzu habe ich dir eine kleines Schema angefertigt:
Anschließend montierst du deine Empfangsdiode am Zähler an der korrekten Position. Die Sendediode im Zähler befindet sich auf der rechten Seite, positioniere deine Empfangsdiode darüber und schirme externes Licht ab. Die Positionierung muss sehr genau erfolgen, daher habe ich mir ein Gehäuse erstellt. Dieses kannst du hier herunterladen und anschließend auf einem 3D-Drucker ausdrucken. Im Gehäuse ist genug platz für die Empfangsdiode und die FTDI-Platine. Außerdem habe ich die Arretierungspunkte unterhalb der Dioden am Zähler berücksichtigt, dadurch entfällt das mühsame Ausrichten 😉
Hast du alles montiert, kannst du das USB-Kabel zur Verbindung in deinen Raspberry stecken und mit der Softwareeinrichtung fortfahren.
OpenHab Anbindung & Code
Mit dem Smartmeter-Binding in Openhab kann das genormte Protokoll (SML = Smart metering Language) des Zählers ausgelesen werden. Allerdings gibt es mit dem HolleyTech DTZ541 ein Problem, denn dieser Zähler hat einen Bug in seinem Code. Dadurch fehlen diverse Werte des Protokolls (z.B. die Prüfsumme), welche allerdings vom Openhab-Binding benötigt werden. Dadurch ist das Auslesen damit nicht mehr möglich! Im Internet liest man das Holleytech diesen Bug bereits gefixt hat, jedoch bringt das allen die den Zähler bereits haben nichts mehr.
Auf der suche nach einem Workaround bin ich über das Node-Red Paket „noderedpaket für smartmeter“ gestolpert. Dieses verwendet eine Library in welcher der Bug von Holleytech bereits gefixt ist. Damit ist es also doch möglich recht unkompliziert die Werte des Zählers in Openhab zu erfassen. Du solltest also als erstes in deine Node-Red Oberfläche gehen und dort das Paket installieren.
War die Installation erfolgreich, taucht der Smartmeter-Verbindungspunkt in der Auflistung links auf. Ziehe diesen ins Fenster und öffne das Konfigurationsmenü mit einem Doppelklick.
Sollte dir nicht bekannt sein, unter welchem Port der FTDI an deinem Raspberry erreichen kannst, so verbinde dich mit SSH und gib folgende Zeile ein:
ls /dev/*USB*
In der Ausgabe wird dir nun aufgelistet welche USB-Geräte erreichbar sind. Bei mir wird der FTDI-Chipsatz unter „/dev/ttyUSB0“ geführt. Klicke nun in der Konfiguration auf den Stift um die Verbindungswerte einzutragen.
Für den Holleytech DTZ541 verwendest du folgende Parameter:
Baud Rate: 9600
Data bits: 8
Parity: none
Stop bits: 1
Protocol: SmlProtocol
Transport: SerialResponseTransport
Request Intervall: 60
Passe den Port in diesem Code unbedingt auf deine Gegebenheiten an. Den Refresh-Wert kannst du ebenfalls anpassen, ich habe hier 60 Sekunden angegeben, da es mir genügt den Zähler jede Minute einmal auszulesen. Der Zähler selbst gibt seine Werte jede Sekunde über die IR-Diode aus.
Nun benötigst du einen Funktionsblock, denn die Zählerwerte werden als komplettes Datenpaket eingelesen und müssen dadurch erst zerlegt werden. Hierzu verwendest du einen „Function“-Block und stellst die Verbindung zwischen Smartmeter und diesem her. Der „Function“-Block ist programmierbar, öffne diesen also nun mit einem Doppelklick und füge folgenden Code ein:
return [
{ payload: parseFloat(msg.payload["1-0:1.8.1*255"].values[0].value) },
{ payload: parseFloat(msg.payload["1-0:1.8.2*255"].values[0].value) },
{ payload: parseFloat(msg.payload["1-0:16.7.0*255"].values[0].value) },
{ payload: parseFloat(msg.payload["1-0:32.7.0*255"].values[0].value) },
{ payload: parseFloat(msg.payload["1-0:52.7.0*255"].values[0].value) },
{ payload: parseFloat(msg.payload["1-0:72.7.0*255"].values[0].value) },
{ payload: parseFloat(msg.payload["1-0:14.7.0*255"].values[0].value) },
];
Bevor du den Block schließt, stelle den Wert „Outputs“ auf 7. Damit bekommst du nun folgende Werte aussortiert:
- Zählerwert 1.8.1 in Kilowattstunden
- Zählerwert 1.8.2 in Kilowattstunden (bei Mehrtarifzählern)
- Leistung in Watt
- Spannung L1 in Volt
- Spannung L2 in Volt
- Spannung L3 in Volt
- Netzfrequenz in Hertz
Nach dem speichern solltest du nun viele neue Verbindungspunkte am Funktionsblock sehen, diese werden als nächstes zu OpenHab verbunden.
OpenHab einrichten
Info (25.11.2020): Vor einigen Tagen wurde Openhab 3 offiziell veröffentlicht! Dieses Tutorial ist ausschließlich für Openhab 2.5! Für die neue Version werden daher einige Anpassungen notwendig sein.
Um die Werte zu übergeben, werden entsprechende Items benötigt. Lege dazu eine Items-Datei mit folgendem Inhalt an:
Number HeizungTarif1 "Normaltarif [%.1f kWh]"
Number HeizungTarif2 "Niedertarif [%.1f kWh]"
Number HeizungLeistungAkt "Aktuelle Leistung [%.0f W]"
Number Heizung_L1 "Heizung - L1 [%.1f V]"
Number Heizung_L2 "Heizung - L2 [%.1f V]"
Number Heizung_L3 "Heizung - L3 [%.1f V]"
Number Heizung_Hz "Heizung - Hz [%.1f Hz]"
Dieses Beispiel entspricht wieder meinem bereits angedeuteten Mehrtarifzähler. Die Beschriftungen und Variablennamen kannst du selbstverständlich nach deinem belieben anpassen. Hast du die Items angelegt, kannst du wieder zu Node-Red wechseln. Suche nach dem Knoten „openhab2-out“ und füge ihn 7 mal hinzu. Die Konfiguration erfolgt wieder mit einem Doppelklick. Zuerst musst du deinen Openhab-Server auswählen, die möglichen Items werden anschließend automatisch ausgelesen. Über die Suchfunktion kannst du außerdem gezielt filtern. Konfiguriere nun alle Blöcke entsprechend der oben stehenden Reihenfolge und verbinde diese mit dem Funktionsblock. Am Ende sollte es dem unten stehenden Bild entsprechen:
Nach einem Klick auf Deploy oben rechts, beginnt Node-Red mit der Abarbeitung. Kurze Zeit später sollten dann die ersten Werte in OpenHab landen. Diese kannst du nun zum Auswerten deines Stromverbrauchs verwenden und eventuelles Energiesparpotential entdecken. Auch eine Statistik oder einen Chart kannst du dir damit von OpenHab erstellen lassen, wie das funktioniert erfährst du in einem kommenden Beitrag 😉
Schlusswort
Manche Dinge, wie zum Beispiel den Zähler auslesen, sind gar nicht so komplex, wie es auf den ersten Blick scheint 😉 Bei mir jedenfalls funktioniert das Auslesen der Werte reibungslos und zuverlässig. Durch die gedruckten Gehäuse ist das Anbringen und Wegziehen des Sensors ein Kinderspiel. Die vorgesehen Rastnasen am Zähler machen ein Ausrichten des Gehäuses nach dem Anbringen nicht notwendig, hier hat der Hersteller mit gedacht, auch wenn er an anderer Stelle Stolpersteine lauern lässt. Ich bin jedenfalls mit dieser Lösung zufrieden und kann sie daher auch bedenkenlos weiter empfehlen. Bei mir läuft dieses System nun schon über einen Monat fehlerfrei. Falls du dennoch Fragen dazu hast, nutze einfach die Kommentarfunktion oder das Forum.