Haus Garten Computer Technik
und analoge Fotografie

Gaszähler BK-G4 und Stromzähler EasyMeter Q3MA 1020 auslesen

Erfassung der Verbrauchsdaten von Gas und Strom mit einem Raspberry Pi, Weiterverarbeitung der Daten in einer influxdb und Auswertung mit Grafana
20.09.2022

Die Idee

Erfassung von Strom- und Gaszählerdaten ist in aller Munde. Ich habe kurz nachgeschaut, welche Typen bei mir verbaut sind:

  • EasyMeter Q3MA1020
  • Honeywell BK-G4 MT

Beim Stromzähler werden die Daten seriell über eine Infrarot-LED geliefert. Als Übertragungsprotokoll kommt SML zum Einsatz. Beim Gaszähler rotiert auf dem äußersten Zählrad ein Magnet mit. Mit einem Reedkontakt oder einem Hallsensor kann pro 0,01m3 ein Impuls erzeugt werden.

Ich hatte noch einen alten Raspberry Pi 1 rumliegen. Der scheint für diese Aufgabe wie geschaffen. Zusätzlich möchte ich auch gleich noch Luftfeuchtigkeit und Temperatur im Keller erfassen. Da kommt ein vorgefertigter Sensor zum Einsatz, der nur noch an die Raspi-Pins angesteckt werden muß.

Der Sommer ist vorbei. Einige regnerische Tage später habe ich erste Resultate.

Der aktuelle Stand:

Raspberry Pi 1 mit Minielektronik zur Verarbeitung von eingehenden Sensordaten von Gas, Strom, Temperatur und Luftfeuchte
Raspberry Pi 1 mit Minielektronik zur Verarbeitung von eingehenden Sensordaten von Gas, Strom, Temperatur und Luftfeuchte

Voraussetzungen

Diese Bastelanleitung setzt einiges Grundwissen voraus. Ihr solltet wissen, wie man auf dem Raspi Softwarepakete nachinstalliert (zB Module für python). Ihr solltet die Pin-Belegung des Raspi kennen und wissen, wie man die IO-Ports konfiguriert.

Idealerweise habt ihr einen Lötkolben zur Hand und wisst, was ein Widerstand und ein Transistor ist.

Ihr solltet irgendwo in eurem Heimnetz eine InfluxDB und Grafana laufen haben und ihr solltet beide bedienen können. Man kann aber auch - wenn der Raspi es hergibt - beide Komponenten auf dem Raspi laufen lassen. Mit dem 1er geht das natürlich nicht.

Den Stromzähler auslesen

Typ: EasyMeter Q3MA 1020

Zunächst aber einige Links, die mir bei der Umsetzung geholfen haben:

Interfacing EasyMeter Q3M via Info-Interface (1)

EasyMeter Q3M’s Dokumentation (2)

Stromzähler (SmartMeter) mit Raspberry Pi auslesen (3)

wiki.volkszaehler.org (4)

Die Elektronik

Ich habe die Schaltung aus (1) weitestgehend übernommen. Als Widerstände habe ich aber 2 x 43 kOhm (R1 und R2) genommen, weil ich die gerade rumliegen hatte. Als IR-Fototransistor fand ich noch einen SP213 B aus alten DDR-Beständen (Q1). Und anstelle des BC547 nahm ich einen BC337 von Siemens (Q2), der auch übrig war. Hier habe ich also nichts zukaufen müssen.

schaltplan1.png

EasyMeter mit angeheftetem IR-Transistor
EasyMeter mit angeheftetem IR-Transistor

Vorbereitung des Raspberry Pi

Raspberry Pi Model B Rev 2
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"

Damit man mit dem Raspberry Pi (1 oder 3, 4 weiß ich nicht) Daten über den seriellen Port einlesen kann, muß diese Schnittstelle vorher über raspi-config eingeschaltet werden.

raspi-config -> Interface Options -> Serial Port -> Login Shell "no", Port Hardware enabled "yes"

Beim Model 3 muß man zusätzlich noch

dtoverlay=pi3-disable-bt

an die /boot/config.txt anfügen und anschließend den Bluetooth-Dienst komplett abschalten:

systemctl disable hciuart

Nach dem Reboot sollte jetzt /dev/serial0 als Link auf /dev/ttyAMA0 gesetzt sein. Bitte auch die Rechte kontrollieren:

crw-rw---- 1 root dialout 204, 64 Sep 20 14:53 /dev/ttyAMA0

Der Nutzer pi oder bei den neuesten Raspberry-OS jeder andere Nutzer sollte in der Gruppe 'dialout' sein.

Die Software

Zum Einsatz kommt natürlich – ihr ahnt es schon – Python. Ich habe als Basis ein Script von Alexander Kabza (3) – vielen Dank für die gute Vorarbeit – genutzt, es in python3 konvertiert und um eine Prüfung der CRC16-Checksumme ergänzt. Hier ist mein Ergebnis:

ReadEasyMeterSML.py

Ich habe das Skript aber noch nicht aufgeräumt, bitte verzeiht meine Unordnung. Einige Orginalfunktionen habe ich nicht verwendet (XML-Ausgaben). Einiges kann sicher noch schöner gemacht werden. Wenn ich mal Lust habe, setzte ich mich nochmal dran.

Die Print-Ausgaben müssen nun noch in Datenbankaufrufe umgewandelt werden.

# Hersteller-ID: 77078181c78203ff0101010104: 455359 = 455359
# Server-ID: 77070100000009ff010101010b: 09014534354534dab34
# Total Bezug: 77070100010800ff64: 00000000000011d9 = 0.0004569 kWh
# Total Lieferung: 77070100020800ff64: 0000000000000000 = 0.0 kWh
# 2022-09-20 15:52:02.083913

Man sieht, dass die Ausgabe derzeit noch auf ein Minimum beschränkt ist. Durch die Eingabe einer 4-stelligen Pin – zu erfragen beim Energieversorger – kann das EasyMeter Q3MA dazu überredet werden, detailliertere Infos über die IR-Schnittstelle bereitzustellen (4). Bei mir hat sich aber nach Pin-Eingabe und 120s Untätigkeit der Zähler wieder auf Standardausgabe zurückgestellt. Eine dauerhafte Freischaltung der erweiterten Infomationen hat nicht geklappt bisher. Es fehlen auch die nötigen Menüpunkte.

nach Eingabe der PIN zeigt das EasyMeter erweiterte Informationen - für 120s
nach Eingabe der PIN zeigt das EasyMeter erweiterte Informationen - für 120s

Update: Mittlerweile habe ich weitere Informationen über die Infoschnittstelle erhalten. Leider erlaubt die derzeitige Konfiguration des Stromzählers ab Werk keine dauerhafte Umschaltung in den erweiterten Modus mit den nötigen zusätzlichen Daten. Es fehlen schlicht die Menüpunkte – z.B. zum Abschalten der PIN.

Aber, es gibt eine weitere Schnittstelle am EasyMeter auf der Oberseite, die durch einen Aufkleber verdeckt ist. Die ist bidirectional und für eine Konfiguration des Zählers gedacht. Glücklicherweise werden auf der Ausgaberichtung (rechte LED) die kompletten Daten übermittelt - wahrscheinlich aber auch erst nach Eingabe der Pin. Ich habe den IR-Fototransistor einfach statt vorne an die Infoschnittstelle oben auf die Datenschnittstelle (DO) MSB-DSS montiert (mit Klebeband befestigt).

Daten zu einer influxdb senden

Nachdem nun die erweiterten Informationen – also aktuelle Leistungsentnahme und Totalverbrauch mit Nachkommastellen – verfügbar sind, können wir das Python-Script verschlanken und anstelle der Print-Ausgaben die Werte in eine influxdb schreiben.

storeEasyMeterData.py

Auswertung mit Grafana

Werden die Daten erstmal regelmäßig in eine Influxdb geschrieben, kann man jetzt mit Grafana eine grafische Auswertung erstellen.

In der Grafik sieht man bspw. das Einschalten verschiedener Verbraucher wie z.B. den Kühlschrank oder morgens die Kaffeemaschine mit periodischem Einschalten der Heizplatte. Unser dauerhafter Grundverbrauch liegt übrigens bei 50W. D.h. das sind dann Geräte, die im Standby laufen oder Verbraucher wie Radiowecker o.ä.

Leistungsentnahme.Easymeter.png

Den Gaszähler auslesen

zunächst das Python-Script, Erklärung folgt

storeGasverbrauch.py

verwendeter Sensor am Gaszähler:

SS 441 A

Alle getesteten Reedschalter waren zu unempfindlich und reagierten nicht auf den rotierenden Magneten des Gaszählers.

Ein vorhandener Hall-Sensor aus DDR-Beständen (B461) war ebenfalls nicht empfindlich genug für das Magnetfeld des Gaszählers. Hier mußte ich bei reichelt.de den SS 441 nachkaufen. Der SS 441 ist ein Open Collector IC, d.h. man verbindet den Ausgang mit dem IO-Port des Raspi. Sowohl der B461 als auch der SS 441 arbeiten mit 5V als Versorgungsspannung. Der Ausgang muß also über einen Spannungsteiler auf die max. erlaubten 3,3 V abgesenkt werden.

schaltplan2.png

Ich habe noch einen Kondensator mit eingefügt (C1 = 100n), aber ich glaube nicht, dass er benötigt wird.

Fazit

Mit ein wenig Geschick kann man den Gaszähler und Stromzähler smart machen, wie das so schön heißt heutzutage.

Ein paar Worte noch zum Anschluß der Sensoren. Bei mir sind Gaszähler und Stromzähler nicht direkt nebeneinander angebracht. Damit ich mit einem Raspi beide Zähler bedienen kann, mußte ich mindestens einen Sensor über ein langes Kabel mit dem Raspi verbinden. Der Hallsensor am Gaszähler erwies sich dabei als unkritisch, was Störungen angeht. Er wird bei mir über ein 8m langes vieradriges Telefonkabel mit dem Raspi verbunden. Der Stromzähler sendet seine Informationen seriell. Hier ist es schon etwas komplizierter. Nach etlichen Versuchen ist es mir gelungen, zumindest 2m mit einem Flachbandkabel zu überbrücken. Andere Kabel incl. abgeschirmten Kabel haben das serielle Signal so gefälscht, dass nichts mehr am Raspi ankam. Hier muß man also etwas experimentieren. Notfalls muß der Raspi direkt am Stromzähler angebracht werden.

Über Grafana habe ich nun den Gesamtverbrauch von Gas und Strom im Überblick und kann verschiedene Verbraucher zuordnen und gezielt abschalten, um Strom zu sparen. Beim Gas gibt es nur "heizen" oder "nicht heizen". Da wird man kaum Abstriche machen können. Zumindest kann man testen, ob zB die Abschaltung einer Zirkulation für Warmwasser Einsparungen bringt oder ob das eher wenig ausmacht.

Auswertung der Datenerfassung von Gas- und Stromzähler mit Grafana
Auswertung der Datenerfassung von Gas- und Stromzähler mit Grafana

Viele Spaß beim Basteln und Sparen wünscht euch

Jens

Neuen Kommentar hinzufügen

Sie können einen Kommentar abgeben, indem Sie das unten stehende Formular ausfüllen. Nur Text. Kommentare werden moderiert.