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.

Eine Möglichkeit zum Logging der Daten mittels MariaDB und Darstellung mittels Grafana habe ich in einem weiteren Artikel beschrieben.

Gruß Chris

21 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
  • 24. März 2023 um 20:13 Uhr
    Permalink

    Hallo, funktioniert super.
    Was ich nicht hin bekomme ist einen neuen Startwert zu übernehmen wenn der wenn der ausgelesenen Wert und der tatsächlichen Werte mal synchronisiert werden müssen.

    Gruß

    Steffen

    Antwort
    • 26. März 2023 um 11:21 Uhr
      Permalink

      Hallo Steffen,

      freut mich das Dir das Projekt gefällt!

      Es ist erschreckend wie schnell ich meinen eigenen Code und die Ideen dahinter vergesse…
      Ich glaube der Startwert wird nur beim Neustart des Sensors gezogen.
      D.h. Du musst den aktuellen Wert einstellen, speichern und einmal reseten. Ich müsste es selber nochmal ausprobieren.

      Gruß
      Chris

      Antwort
  • 12. Mai 2023 um 12:06 Uhr
    Permalink

    Ein super einfaches Tutorial – vielen Dank! 😉
    Wie kann man denn am ESP8266 die Uhrzeit einstellen (ohne NTP)?

    Antwort
    • 14. Mai 2023 um 09:00 Uhr
      Permalink

      Hallo SiSu,

      Gerne!
      Aktuell habe ich zum einstellen der Uhrzeit ohne NTP nichts vorgesehen.

      Gruß
      Chris

      Antwort
  • 1. Juni 2023 um 17:10 Uhr
    Permalink

    Perfekt! Genau das habe ich gesucht.
    Wäre super, wenn du den Source Code noch veröffentlichen könntest. Dann kann ich das auf meinen ESP32 aufspielen.

    Antwort
    • 2. Juni 2023 um 15:38 Uhr
      Permalink

      Hallo Thorsten,

      freut mich, dass es Dir gefällt.
      Veröffentlichung im GIT steht auf der Liste, aber ich kam noch nicht dazu.
      Hast Du keinen ESP8266 rumliegen?

      Gruß
      Chris

      Antwort
      • 2. Juni 2023 um 20:42 Uhr
        Permalink

        Hallo Chris,

        Danke für die Rückmeldung!
        Leider nein. Habe bisher immer den neueren ESP32 benutzt. Preislich ist das kaum ein Unterschied. Vielleicht kannst du einfach ein Link auf das Zip-Archiv mit dem Code unter dem Link auf die bin-Datei einstellen.

        Viele Grüße
        Thorsten

        Antwort
  • 8. Dezember 2023 um 15:07 Uhr
    Permalink

    Hallo Chris , gibt es den Code für impuls.php und von deiner Website?

    Würde mich freuen wenn man sie per download laden könnte.

    Gruß Herby

    Antwort
  • 31. Dezember 2023 um 13:52 Uhr
    Permalink

    Halli Hallo,
    alles soweit grosse Klasse. Aber wie bekomme ich die Impulse auf 0.1 / je Impuls umgestellt.
    Mein Zähler liefert je Impuls 0,1 m³ . Deinem Code liegt das bei 0,01m³
    mit freundlichen Grüssen
    Knut

    Antwort
    • 3. Januar 2024 um 16:41 Uhr
      Permalink

      Hallo Knut,

      das ist ein guter Punkt. Ich werde es in die nächste Version einbauen. Ist evtl. relativ kurfristig möglich.

      Gruß
      Chris

      Antwort
  • Pingback: Kleines Update für den Gaszähler-Sensor – bubuxblog

  • 30. Juni 2024 um 14:30 Uhr
    Permalink

    Hallo, super erstelltes Tutorial.
    Wie schon in dem Kommentar von Jürgen erwähnt, habe ich das gleiche Problem.
    „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.“
    Im Iobroker bleibt der Impulszähler auf“1″, Timestamp wird aber bei jeden Impuls aktualisiert.
    Mit freundlichen Grüßen
    Reinhard

    Antwort
    • 1. Juli 2024 um 17:00 Uhr
      Permalink

      Hallo Reinhard,

      welche Version nutzt Du?
      Mindestens seit 1006 ist ein weiteres Topic für den Gesamtzählerstand eingebaut.

      Das bei dem Impukls-Topic immer nur eine „1“ übertragen wird ist gewollt.
      Hier müsstest Du die Impulse selbst aufaddieren.

      Gruß
      Chris

      Antwort
      • 2. Juli 2024 um 13:06 Uhr
        Permalink

        Danke für die Info.
        Weiter so.
        Gruß
        Reinhard

        Antwort
  • 7. November 2024 um 08:14 Uhr
    Permalink

    Cooles Projekt!
    Scheint ein cooles Projekt zu sein, nur leider kann ich nicht über der Qnap mit der MariaDB die Daten abfassen. Ich glaube es liegt an einem Unterordner der bei mir so angelegt werden muss. 192.168.168.27:8081/Web/GasMeterImpuls.php. Weiter wäre es schön, keiner Verschlüsselte gaszaehler_aktuell.bin Datei zu arbeiten. Das ganze hätte ich somit noch für die Stromerfassung nutzen können.

    Antwort
    • 8. November 2024 um 17:01 Uhr
      Permalink

      Hallo Rene,

      welche Version des Gassensors nutzt Du? Evtl. habe ich noch ein Problem mit dem Port. Grubdsätzlich funktioniert das da ich es auch nutze (allerdings mit Port 80). Ich muss das testen.
      Siehst Du auf Deinem Webserver (192.168.168.27) im Log einen Eintrag von der IP des Gassensors?

      Gruß
      Chris

      Antwort

Schreibe einen Kommentar

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