Gasverbrauch mit ESP8266 messen

Der Sommer ist vorbei und die Tage werden kürzer und ich sitze mal wieder öfter im Büro und habe Zeit und Lust zum Programmieren. Nachdem mein Odroid die Impulse des Reed am Gaszählers von heute auf morgen aus mir bisher unerfindlichen Gründen nicht mehr ausliest (Gaszähler am Odroid), habe ich den Sensor umgebaut auf einen ESP8266 (bei mir wieder in Form eines NodeMCU oder WEMOS D1 mini). Das Grundgerüst der Programmierung hatte ich durch den Zisternensensor ja schon und was den Zisternenfüllstand messen kann, kann auch den Gaszähler auslesen. Es ist ja auch aktuell eine gute Idee zumindest zu wissen was seine Gasheizung so treibt.

Ja, es gibt bereits allerhand Lösungen mit ESP Home, ESP Easy & Co. aber das gefällt mir alles nicht so besonders und bedingt immer eine zentrale Lösung wie FHEM, HA, Grafana etc. in der die Ergebnisse anzeigt und auswertet werden. Meine Lösung stellt die Daten aber, wie auch bei der Zisternenfüllstandsmessung, ohne zentrale Komponente direkt auf einer Webseite dar und bietet eine Anbindung an einen Heimautomatiserungs-Server. Dazu aber gleich mehr.

Installation

Zum flashen der bin-Datei auf den Mikrocontroller kann das Programm “ESPEasy Flasher” genutzt werden. Dieses ist auf Github unter https://github.com/BattloXX/ESPEasyFlasher/releases/tag/1.1 zu finden. Nach dem Download einfach die ZIP-Datei entpacken, die bin-Datei des Gaszählers in den gleichen Ordner kopieren, Mikrocontroller anschließen und FlashESP8266.exe starten. Nach Auswahl des richtigen COM-Ports und der Firmware startet der Flash-Prozess mit Klick auf “Flash”.

Der Reed-Kontakt muss an GND und D4 angeschlossen werden. Ich spare mir für die zwei Litzen eine Fritzing-Zeichnung. Einen Pull-Down Widerstand habe ich aktuell nicht eingebaut. Bisher war die Messung des Schaltimpuls wenn der Magnet seine Runden machte immer erfolgreich. Falls es ohne Widerstand doch Probleme gibt kann ich ggf. noch eine Zeichnung nachreichen. Als Reed verwende ich immer noch das gleiche Bauteil wie in der vorherigen Lösung am Odroid (mk 471 b z.B. von Reichelt).


Hier die bin-Datei zum direkten Download:

http://www.bubux.de/heimautomatisierung/ota/gaszaehler_aktuell.bin


Ersteinrichtung und Anschluss des Reed-Kontaktes

Nach dem flashen startet der Sensor und baut ein eigenes WLAN-Netz mit dem Namen “WLAN-Gaszaehler” auf (Access Point – AP). Mit diesem muss man sich z.B. mit einem Smartphone verbinden. Bis es gefunden wird kann es einen Moment dauern – nicht ungeduldig werden. Nach dem Verbinden kann das Smartphone meckern weil kein Internet “hinter” diesem AP-WLAN verfügbar ist. Manchmal wechselt das Gerät dann wieder schnell zum “normalen” WLAN. Ist man aber schließlich im AP-WLAN des NodeMCUs eingebucht, ruft man in einem Webbrower die Adresse 192.168.4.1 auf. Es sollte eine Konfigurationsseite zur Eingabe der SSID und des WLAN-Passwortes erscheinen. Hier dann die Daten des eigenen WLANs eingeben und speichern. Der NodeMCU muss anschließend neu gestartet werden (Reset oder vom Strom trennen) und sollte sich beim neuen Start mit den eingegebenen Zugangsdaten in das WLAN einbuchen. Welche IP der NodeMCU bekommen hat, kann man in seinem Router nachschauen. Ab jetzt jetzt ist der Sensor unter der entsprechenden IP im Heimnetz erreichbar. Ist der Sensor nicht in das eingene WLAN eingebucht muss nochmal geprüft werden ob eventuell wieder ein AP aufgemacht wurde.

Startseite und weitere Konfiguration

Auf der Startseite des Sensors werden der bisher gemessene Gesamtverbrauch im Kubikmeter (m³) und Kilowattstunden (kWh) angezeigt und eine Kachel die zu einer Seite mit Auswertungen führt. Die Berechnung des Verbrauchs in kWh erfolgt erst nach mindestens einem Impuls. Zudem werden einige technische Daten angezeigt die mit Klick auf den blauen Balken “Technische Daten” ausklappen. Unter “Sonstiges” klappt der Link zu der Konfigurationsseite und einem Button zum Restart des Sensors auf. Bei Impuls blinkt die eingebaute LED des NodeMCUs kurz auf.

In der Konfiguration unter “Sensordaten” kann der auf der Startseite oben angezeigte Name definiert werden. Der Startwert muss vom Gaszähler abgelesen werden wobei hier die Angabe mit zwei Nachkommastellen erforderlich ist. An der dritten Nachkommastelle des Zählers ist in der Regel der Magnet befestigt dessen Impulse mit dem Reed erfasst werden.

Mithilfe der Werte “Brennwert” und “Zustandszahl” wird der Verbrauch in kWh berechnet. Diese Werte sind abhängig vom Gaslieferanten und in der Regel auf der Gasrechnung zu finden. Auch hier sind jeweils zwei Stellen hinter dem Komma einzugeben. Die Werte für Brennwert und Zustandszahl können sich mit der Zeit ändern und können in der Konfiguration entsprechend angepasst werden.

Der Wert Impulszähler sollte zu Beginn auf “0” gesetzt werden. Hier werden alle gemessenen Impulse hochgezählt, so das bei einem Neustart des Mikrocontrollers, nicht wieder der Startwert angepasst werden muss. Bei Bedarf kann dieser Wert aber auch im Betrieb geändert werden.

Wie auch bei der Messung des Zisternenfüllstandes sind auch hier die aktuellen Werte auch per JSON abrufbar:

Auch können die Daten an einen MQTT-Broker gesendet und/oder an eine eigene API welche die Daten per HTTP-Post entgegen nimmt übermittelt werden.

Auswertung auf bubux.de

Falls eine Datenübermittlung an die bubux-WebAPI aktiviert wurde, erscheint auf der Startseite eine Kachel mit einem Graphensymbol. Bei Klick auf diese Kachel öffnet sich eine weitere Webseite welche die übermittelten Daten darstellt. Eine Kachel für den Tagesverbrauch, eine Kachel für den Monatsverbrauch und eine graphische Darstellung der letzten 7 Wochentage. Diese Seite ist noch im Aufbau. Hier werden mindestens noch ein Graph für den Monatlichen- und den Jahresverbrauch dazu kommen. Die dafür gespeicherten Daten sind die lokale IP-Adresse des Sensors (damit der Klick auf den Link für den Rückweg zur lokalen Sensorseite funktioniert), die MAC-Adresse des Sensors zur Zuordnung der Daten sowie die Impulse. Beim Aufruf der Seite werden Brennwert, Zustandszahl und aktueller Zählerstand übermittelt. Diese Daten werden aber nicht gespeichert.

So, bleibt mir nur noch viel Spaß zu wünschen mit dem neuen Sensor. Kommentare sind gerne willkommen.

Gruß Chris

3 Gedanken zu „Gasverbrauch mit ESP8266 messen

  • 28. Januar 2023 um 14:49 Uhr
    Permalink

    Hallo Christian,
    Super Sensor Applikation. Mit sind zwei Punkte aufgefallen.

    Offensichtlich hat sich in in der AP-WLAN des NodeMCUs Adresse 192.168.1.4 ein Zahlendreher eingeschlichen. Muss lauten 192.168.4.1 dann klappt es auch.

    Weiterhin scheint über MQTT der Topic Impuls nicht aktualisiert übertragen zu werden. Bei mir bleibt der Impuls auf 1 stehen und zählt nicht hoch im MQTT. Die Sensordaten selbst zeigen einen hochzählenden Impulszähler an. Vielleicht mache ich hier aber auch was falsch.
    Gruss Jürgen

    Antwort
    • 29. Januar 2023 um 12:08 Uhr
      Permalink

      Hallo Jürgen,

      danke für den Hinwweis mit der IP des AP. Ich habe es korrigiert.

      Beim MQTT habe ich eigentlich zwei Topics. Einmal der Impuls (jeweils immer “1”) und der Gesamtverbrauch.
      Beides wird aber nur bei Impuls geplublished. Ich prüfe das aber nochmal.

      Gruß
      Chris

      Antwort

Schreibe einen Kommentar

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