WiFi ACM-ESP: Kommunikationsmodul für Elster BK-GxA Gaszähler
Das Modul WiFi ACM-ESP ermöglicht es, den Zählerstand von Honeywell / Elster / GWF BK-G Gaszählern mit montiertem Absolute Encoder auszulesen. Dieser Absolut Encoder des Zählers tastet die einzelnen Stellen des Zählwerks optoelektronisch ab und bietet eine elektronische Schnittstelle, über die der absolute Zählerwert abgefragt werden kann. Im Gegensatz zu einfachen optischen oder magnetischen Impulszählern steht dabei immer der im Zählerfenster ablesbare Messwert zur Verfügung, so dass kein manuelles Nachtragen oder Korrigieren nötig ist. Das WiFi ACM-ESP bucht sich stündlich in ein vorhandenes WiFi Netz ein, fragt den Zählerstand des Zählers ab und kann die Messwerte an unterschiedliche Datensenken weitergeben. Für den Betrieb ist dank des geringen Strombedarfs kein Netzspannungsanschluss erforderlich. Für den Betrieb an einem Netzteil bleibt das Modul mit der Einstellung „no sleep“ aktiv so dass der Zähler in einem einstellbaren Zeitintervall ausgelesen wird und die Daten übermittelt werden.
Voraussetzungen
- Honeywell / Elster /GwF Gaszähler BK-G2,5, BK-G4, BK-G6, … mit Absolut Encoder AE2, AE3 oder AE5 in einer der folgenden Protokollvarianten (auf dem Ziffernblatt des Zählers angegeben, weitere auf Anfrage):
AE.02:02.01:01.01
AE.03:05.01:01.01
AE.03:05.01:02.01
AE.05:05.01:01.01
AE.05:05.01:02.01
Achtung! Zähler ohne Protokollangabe sind nicht mit dem WiFi ACM-ESP kompatibel. Diese sind mit einer M-Bus-Schnittstelle anstatt einer ACM-Schnittstelle ausgestattet. auch wenn ein gleich aussehender Anschluss vorhanden ist. - WiFi ACM-ESP Kommunikationsmodul für Elster Gaszähler
- 2 Mignonzellen (AA)
- Geeignete Datensenke, z. B. ein Account bei Emoncms.org, InfluxDB Cloud, ThinkgSpeak oder ein Raspberry PI mit installiertem MQTT Broker
Installation & Einrichtung
- Blinddeckel des Zählers abschrauben, Kommunikationsmodul auf Absolut Encoder aufstecken und mit M3 Schraube fixieren. Achtung, Schraube nicht zu fest anziehen!
- Modul mit 2 AA Batterien bestücken
- Taste „RST/CONFIG“ lange drücken, bis die blaue LED 2x blinkt. Das Modul befindet sich nun im Konfigurationsmodus. Im Konfigurationsmodus bleibt das Modul daueraktiv und im WiFi eingebucht, so dass dessen Webinterface zur Konfiguration erreichbar ist. Achtung, dieser Modus ist nur zu Konfigurations- und Testzwecken geeignet, da die Batterien so schnell verbraucht werden!
- Das WiFi ACM-ESP spannt einen WiFi Access Point mit der SSID „WiFi ACM-ESP“ auf. Mit einem WiFi-fähigen Gerät, etwa einem Smartphone, Tablet, Notebook etc. mit diesem Access Point Verbindung aufnehmen. Das vorkonfigurierte Passwort lautet „12345678“.
- Mit einem Browser zur Adresse
http://4.3.2.1
navigieren. - Unter dem Bereich „WiFi“ auf den Button „scan“ klicken. Nach einem kurzen Moment werden alle erreichbaren Access Points aufgelistet. Gewünschten Accesspoint auswählen, Passwort angeben und den Button „save“ klicken. Bei korrekten Zugangsdaten ändert sich der Verbindungszustand auf „connected“ und die IP Adresse des Moduls wird angezeigt.
- Im Abschnitt „Data targets“ gewünschte Datensenke(n) hinzufügen, konfigurieren und abschließend mit dem Button „save“ die Einstellungen speichern. Durch das Speichern wird automatisch eine Datenübermittlung angestoßen, insofern ein Messwert vom Zähler abgefragt werden konnte. Die Ergebnisse der Datenübermittlungen werden unter den jeweiligen Konfigurationsabschnitten dargestellt.
- Nach Abschluss und Speichern der Konfiguration ganz unten mit dem Button „reboot“ das Modul neu starten. Das Modul ist nun nicht mehr über WiFi zur Konfiguration erreichbar, sondern erwacht lediglich ca. 1x pro Stunde kurz um die Messwerte vom Zähler abzufragen und an die Datensenken zu übertragen. Im Modus „no sleep“ bleibt das Modul aktiv und im WLAN eingebucht.
- Auf Auslieferungszustand zurücksetzen (ab Firmware 1.18): Taster gedrückt halten bis die LED an bleibt. Dadurch werden die WiFi- und Datensenkeneinstellungen gelöscht.
- Dauerbetrieb und Zeitintervall: Wird das Modul mit einem Netzteil betrieben kann es mit der Option „no sleep “ im Dauerbetrieb gehalten werden. So bleibt es im WLAN eingebucht und kann jederzeit abgefragt werden.

Datensenken
MQTT
Meldet an einen MQTT-Broker, über den z. B. Home Assistant mit den Messwerten versorgt werden kann. Das MQTT-Topic lautet standardmäßig home/wifi-acmesp/<MAC>/state
und kann umkonfiguriert werden. Der MQTT-Payload besteht aus einem JSON Objekt:
{
"meter": {
"address": 0,
"id": "12345678",
"manufacturer": "1593",
"version": 37,
"medium": 3,
"access_no": 18,
"status": "0",
"signature": "0",
"values": [
{
"vif": 37690,
"code": 2,
"scalar": -3,
"value_raw": 4267073,
"value_scaled": 4267.073
}
]
},
"millis": 9934668,
"battery_mv": 2800,
"vol_m3": 4267.073
}
Der Wert „values“ kann seiner Struktur variieren, manche Zähler liefern zwei Elemente im Array wobei im ersten Element die Zählernummer angegeben wird.
InfluxDB / InfluxDB2
InfluxDB Cloud
Der Dienst InfluxDB Cloud von influxdata erlaubt es die Messwerte in dessen Cloud abzuspeichern und mit konfigurierbaren Dashboards darzustellen.

Einrichtung
- Account bei InfluxDB Cloud erstellen und bei InfluxDB Cloud 2.0 einloggen
- Im Menü unter „Load Data“ den Punkt „Sources“ wählen und unter Abschnitt „Client Libraries“ den Punkt „Arduino“ wählen. In der erscheinenden Installationskette den Punkt „Initialize Client“ aufrufen. Rechts unter „Select or create a bucket“ einen Bucket erstellen oder einen bestehenden auswählen.
- Darunter im Abschnitt „Configure an InfluxDB profile“ aus dem Quellcode die Strings
INFLUXDB_URL
,INFLUXDB_TOKEN
,INFLUXDB_ORG
undINFLUXDB_BUCKET
entsprechend im WiFi ACM-ESP unter url, token, org und bucket übertragen. - In der Installationskette den letzten Punkt „finish“ anklicken.
Emoncms
Übermittelt die Daten über HTTP(S) an eine Emoncms-Instanz (Cloud oder selfhosted). Siehe Open Energy Monitor und Emoncms.org.

ThingSpeak
Übermittelt die Daten über HTTPS an den Dienst ThingSpeak (kostenfreier Account möglich). In Feld 1 wird der Zählerstand, in Feld 2 die Batteriespannung geschrieben. Die Daten können so komfortabel, z. B. mit einem ThingSpeak Widget, auf einem Mobilgerät dargestellt werden.
Anbindung an Home Assistant
Die Messwerte des WiFi ACM-ESP können von einer Home Assistant Instanz über MQTT abgegriffen werden, so dass der Gasverbrauch auf dessen Energie-Dashboard übersichtlich visualisiert werden kann:

Für die Einbindung in Home Assistant geht ab Firmwareversion 1.21 automatisch von statten. Das WiFi ACM-ESP schickt dazu einige MQTT discovery Nachrichten so dass in Home Assistant automatisch ein Device mit 3 Entitäten angelegt wird für Zählernummer (meterid), Zählerstand (volume) und Batteriespannung (batterymv):


Anschließend in Home Assistant unter Einstellungen -> Dashboards -> Energie
im Abschnitt „Gasverbrauch“ auf „Gasquelle hinzufügen“ klicken und den entsprechenden Sensor auswählen.
Tagesverbrauch in Node-RED berechnen und anzeigen

Dieser Node-RED Flow berechnet aus den MQTT Daten des WiFi ACM-ESP den aufgelaufenen Verbrauch und die Kosten des aktuellen Tags.

Firmwareupdate
Die Firmware kann über die Weboberfläche des WiFi ESP-ACMs aktualisiert werden. Dazu das Modul in den Konfigurationsmodus bringen (Taste Rst/Config lange drücken bis die LED 2x blinkt), mit einem Browser die Weboberfläche öffnen und unter dem Abschnitt Firmwareupdate die Software hochladen. Nach dem Updatevorgang startet das WiFi ACM-ESP neu und muss ggf. über die Taste erneut in den Konfigurationsmodus gesetzt werden.
1.15 | 13.2.23 | Send MQTT Autodiscovery messages for Home Assistant |
1.16 | 13.3.23 | Configurable MQTT topic „no sleep“ option for power supply |
1.17 | 8.5.23 | Fix protocolparser for some meters Formating of volume in webUI |
1.18 | 21.8.23 | Improved WiFi scanning Hint in webUI when in configuration mode factory reset |
1.19 | 6.10.23 | Configurable read interval in „no sleep mode“ support for new VIF |
1.21 | 22.11.23 | Support ThingSpeak as datatarget Send MQTT autodiscovery with device information for Home Assistant Captive portal Support variable length fields in M-bus data |
1.22 | 4.12.23 | Calculate flow Increase buffer for discovery messages |
Haftungsausschluss
Für jegliche Schäden an Personen, Geräten oder Gegenständen, die durch Installation und Betrieb dieses Moduls entstehen, übernehmen wir keinerlei Haftung. Die Installation und der Betrieb des WiFi ACM-ESP Moduls geschieht auf eigene Verantwortung.
Hallo Herr Seegel
Seit dem update von 1.19 auf 1.21 habe ich die gleichen Probleme wie Florian Es werden nur Spannung und Meter ID in Home Assistant MQTT angezeigt.
Bei ip/status kommt folgendes:
{„resetInfo“:“Software/System restart“,“vol_m3″:5701.565,“decPlaces“:3,“millis“:417035,“battery_mv“:2454,“configMode“:false,“freeHeap“:11440,“dateTime“:“02.12.23 18:37:1701″,“firmware“:“1.21″,“WiFi“:{„status“:3,“mode“:1,“ipsta“:“192.168.1.138″,“mac“:“34:94:54:9A:CD:91″,“hostname“:“ESP-9ACD91″,“sta_ssid“:“******“},“mbus“:{„status“:2,“rxbuf“:“681b1b6808037209900500e61e3c03040000000c78099005000c13651570059216″},“meter“:{„address“:3,“id“:“00059009″,“manufacturer“:“GWF“,“version“:60,“medium“:3,“access_no“:4,“status“:“0″,“signature“:“0″,“values“:[{„vif“:120,“code“:31,“scalar“:0,“value_raw“:59009,“value_scaled“:59009},{„vif“:19,“code“:2,“scalar“:-3,“value_raw“:5701565,“value_scaled“:5701.565}]},“results“:[„ok“]}
Ein downgrade auf 1.19 ist komischerweise nicht möglich bzw. funktioniert nicht.
Haben Sie ein Lösung. Herzlichen Dank
Vielen Dnak für den tollen und raschen Support!!!
Jetzt funktioniert alles wie es soll..
Eine Frage noch:
Wenn ich im No Sleep Modus 15min Intervall eingebe schläft er dann dazwischen wie im normalen modus oder ist er stendig „wach“ und saugt die Batterie leer?
Danke!
Hallo,
in der Einstellung „no sleep“ bleibt das Modul immer aktiv und ist nur für Netzteilbetrieb geeignet.
Schöne Grüße
Stefan Seegel
Hallo Herr Seegel,
ich bin super begeistert von ihrem Modul und es funktionierte auch sofort an meinem Gas-Zähler. Ich binde es bei mir im Homeassistant über MQTT ein, das funktionierte mit der FW 1.20 auch, nachdem es aber ein Discovery mit der 1.21 gab, habe ich das Update eingespielt. Nun hat es den Anschein, daß in der „config message“ das Value_Template der Volume Message einen leeren Inhalt hat („val_tpl“: null) im Gegensatz zur Battery oder auch ID ;essage. Wird das vom Modul evtl leer/falsch versendet oder liegt der Fehler doch auf meiner Seite?
Vielen Dank
Grüße aus Fürth
Axel
Hallo Axel,
da war offenbar zu wenig Speicher für die (großen) Discoverynachrichten reserviert, habe Dir eine Mail geschrieben.
Gruß
Stefan Seegel
Guten Abend,
habe lange probiert die Daten über den Mosquitto broaker in mein Home Assistant zu bekommen. Leider ohne Erfolg. Vielleicht weil ich über einen WLAN repeater gehen muss?
Was muss ich denn in der config eingeben beim MQTT? Axel, vielleicht ein Tip für mich?
Kann ich auch über die Nabu casa cloud drauf?
Ich bin für jede Hilfe dankbar!
Beste Grüße
Florian
Antworten
Hallo,
bei den MQTT Einstellungen muss der Hostname oder die IP Adresse des MQTT Brokers eingetragen werden, je nachdem wie der MQTT Broker konfiguriert ist noch Port, Benutzername und Passwort. Im Status (http://ip-wifiacmesp/status) wird dann unter Results das Übermittlungsergebnis angezeigt. Ein WLAN Repeater sollte kein Problem sein. Mit Nabu Casa Cloud habe ich leider keine Erfahrung.
Schöne Grüße
Stefan Seegel
Danke werde ich am abend probieren.
was ist TLS?
Tunnel Layer Security = Verschlüsselung
Hallo Herr Seegel,
anscheinend komm ich bis zu meinem Home Assistant aber im Protokoll vom MQTT broaker steht immer folgendes:
2023-11-29 19:48:40: New connection from 192.168.8.74:58941 on port 1883.
2023-11-29 19:48:40: New client connected from 192.168.8.74:58941 as WiFi-ESP-ACM-EF61FF (p2, c1, k15, u’mqtt_user‘).
2023-11-29 19:49:16: Client WiFi-ESP-ACM-EF61FF has exceeded timeout, disconnecting.
2023-11-29 19:49:16: New connection from 192.168.8.74:61412 on port 1883.
2023-11-29 19:49:16: New client connected from 192.168.8.74:61412 as WiFi-ESP-ACM-EF61FF (p2, c1, k15, u’mqtt_user‘).
2023-11-29 19:49:46: Client WiFi-ESP-ACM-EF61FF has exceeded timeout, disconnecting.
2023-11-29 19:49:46: New connection from 192.168.8.74:51544 on port 1883.
2023-11-29 19:49:46: New client connected from 192.168.8.74:51544 as WiFi-ESP-ACM-EF61FF (p2, c1, k15, u’mqtt_user‘).
2023-11-29 19:50:10: Client WiFi-ESP-ACM-EF61FF has exceeded timeout, disconnecting.
was mache ich falsch?
Bitte um Hilfe!
Danke!!
Guten Abend nochmal.
Ich habe es jetzt geschafft. Allerding bekomme ich leider nur die Spannung und die Meter ID. im Home Assistant angezeigt.
Können sie mir die Ausgabe von http://ip/status schicken?
Vielen Dank für den spannenden Beitrag. Bei mir ist ein Zähler mit „AE.03:05.01:03.01“ verbaut. Ist dieser ebenfalls mit dem von Ihnen angebotenen Modul kompatibel? Vielen Dan und Grüsse, Simon
Hallo Simon,
dieses Protokoll habe ich noch nicht gesehen, aber ich denke es wird funktionieren. Wenn nicht kannst Du das Modul einfach zurückschicken.
Gruß
Stefan
Ich hab das Modul jetzt eingerichtet und in mein WLAN eingebunden. Die Zählernummer wird korrekt ausgelesen aber der Zählerstand selbst wird nicht übertragen. Haben Sie eine Idee wo der Fehler liegen könnte?
Es handelt sich um einen Honeywell BK-G4 A (2019) mit AE.05:05.01:01.01
Können Sie mir die Ausgabe von http://IP-ADR/status zukommen lassen?
{„resetInfo“:“Software/System restart“,“millis“:29473305,“battery_mv“:3122,“configMode“:false,“freeHeap“:17936,“firmware“:“1.18″,“WiFi“:{„status“:3,“mode“:1,“ipsta“:“192.168.2.76″,“mac“:“AC:0B:FB:EE:A4:1B“,“hostname“:“ESP-EEA41B“,“sta_ssid“:“******“},“mbus“:{„status“:2,“rxbuf“:“******“},“meter“:{„address“:0,“id“:“******“,“manufacturer“:5523,“version“:129,“medium“:3,“access_no“:166,“status“:“0″,“signature“:“0″,“values“:[],“decode_err“:4},“results“:[]}
Ups das war etwas zu viel des guten. Bitte einmal die Zählernummer oder den Kommentar löschen. Ich kann den Kommentar leider nicht bearbeiten.
Ok, ihr Zähler liefert einen Datenblock den der Parser noch nicht unterstützt hatte, sollte nun funktionieren. Einstellbars Interval für noSleep Mode ist nun auch drin, siehe Version 1.19
Perfekt! Läuft wie geschmiert!
Vielen vielen Dank für die schnelle Hilfe!
Gibt es die Möglichkeit das Modul auch über ein Netzteil mit Strom zu versorgen? Beispielsweise mit einem alten Nokia Ladekabel.
Ja, mit einem stabilen Netzgerät max. 3,3 V an die Batterieklemmen angeklemmt sollte das kein Problem sein.
Hallo Herr Seegel, ich habe Ihr Modul heute erhalten – danke für den schnellen Versand! Nun eine Frage zur Versorgung über ein Netzgerät: 3,3 V Steckernetzteile sind recht selten. Ich vermute, dass ein herkömmliches 5 V Netzteil das Modul zerstören würde?
Daher überlege ich, ein 5 V Netzteil mit 3 oder 3,3 V Linearregler zu verwenden (z.B. aus der LM 317 Serie). Wie hoch ist die Stromaufnahme des Moduls im Modus „no sleep“? Dies wäre wichtig zur Ermittlung der Verlustleistung für den Spannungsregler.
Kann ich das Modul für Test- und Konfigurationszwecke in Betrieb nehmen, wenn es nicht am Gaszähler angeschlossen ist?
Das Netzteil darf max. 3,3 V haben. Als Linearregler sollte etwa ein AMS1117-3.3 geeignet sein. Das Modul zieht durchschnittlich ca. 100 mA, Spitzenströme bis zu 500 mA. Sie können das Modul auch ohne angeschlossenen Zähler betreiben.
Herzlichen Dank für die schnelle Antwort!
Guten Tag
Heute hat es funktioniert, konnte config ändern. Bitte meine vorherigen 2 posts löschen. Danke
Bei mir funktioniert die WLAN-Verbindung nur kurzzeitig ca. 30min). Danach ist nichts mehr zu erreichen. Nur lange RST drücken und mit Scan das WLAN verbinden hilft dann wieder (für 30 min)…
Ich habe allerdings auf „no sleep“ gestellt (wegen einrichten in HomeAssistant.
(Meinen) Fehler gefunden! Ganz schlechte Idee im Batteriebetrieb den „no sleep“ Modus zu wählen. Das Modul (ohne Zähler) zieht 80mA. Hat man dann nicht die frischesten und besten Batterien, dann gibt´s schnell Probleme mit der WLAN-Verbindung weil die Batteriespannung zu schnell sinkt. Mein Modul sendet nun im „sleep“ Modus stündlich den Zählerstand genau so wie er soll. Zusätzlich lasse ich mir den Batteriestand im Home Assistant anzeigen (leider nicht im Autodiscover). Zusätzlich lasse ich mir eine Nachricht auf´s Handy schicken bei kritischem Batteriestand. Ich bin nun zufrieden!
PS: Danke an Herrn Seegel für das freundliche und sehr hilfsbereite Telefonat!
Prima, MQTT Autodiscovery für den Batteriestand werde ich in das nächste Release noch einbauen.
Hallo Herr Seegel,
viele. Dank für ihre Arbeit und dieses super Modul für verflixten Gaszähler.
Ich wäre dankbar für die Möglichkeit das Updateintervall selbst zu setzen. Aus feingranulareren Daten ließen sich noch mehr Infos ableiten.
Ich würde das Modul dann an einem Netzteil betreiben.
VG aus Dresden
Ab Firmware 1.16 steht ein „no sleep“-Modus zur Verfügung so dass das Modul alle 15 s den Zähler ausliest.
Grüße, S. Seegel
Herzlichen Dank!!!!
Hallo Herr Seegel,
Ich möchte die InfluxDB Cloud verwenden.
Gibt es irgendwo nähere Infos über die Einstellungen für InfluxDB? Was genau muss in die Felder rein?
Hallo Herr Friedemann,
ich werde den Blogartikel noch um ein paar Konfigurationsbeispiele erweitern. Verwenden Sie eine InfluxDB1 oder InfluxDB2 Datenbank?
Schöne Grüße aus Fürth
S Seegel
Hallo Herr Seegel,
Danke für das Update. Leider schreibt der ACM-ESP „invalid Parameter“ aus. API Token habe ich bei Influx angelegt und kopiert, ebenso die ORG ID. Der Bucket Name ist ja auch klar. Ich habe keine weitere Datensenke angegeben. Leider wird nicht markiert welcher Parameter invalid ist. Bei Influx kommen keine Daten an.
Neueingabe der URL hat die Fehlermeldung von invalid Parameter zu Connection failed geändert
Ein letztes Update: Die Daten kommen jetzt an. Alles OK