Die Idee: Wir flashen den WEMOS D1 mini mit Tasmota, nutzen die Pinouts des WEMOS, um den Reed-Kontakt an Ground und z.B. D7 anzuschließen. D7 ist als Zähler konfiguriert und jedes Mal, wenn der Reed-Kontakt schließt, wird in Tasmota ein interner Zähler hochgezählt. Diesen Wert übertragen wir per MQTT an ioBroker und berechnen den Zählerstand, jeder Durchlauf entspricht 0,01qm Gas.
Update 09/2023 Gegen eine Spende können wir anbieten, eine für Elster-Gaszähler vorgesehene 3D-Druck-Halterung (siehe https://www.thingiverse.com/thing:5175961) für den Reed-Kontakt und Wemos zu drucken.
Bei Interesse gerne an 3d@smarthomejetzt.de schreiben.
Was benötigen wir dafür:
- WEMOS D1 mini
- Reed-Kontakt
- Tasmotizer, um den D1 zu flashen
- 10k OHM Widerstand (siehe Beschreibung unten)
Unsere Empfehlungen
Fangen wir an, Schritt 1: WEMOS D1 mini mit Tasmota flashen
Der WEMOS D1 mini ist perfekt für Einsteiger, lässt er sich doch mit einem normalen Micro-USB-Kabel flashen. Umständliches Verkabeln mit den Pinouts ist hier nicht notwendig. Wir laden Tasmotizer herunter, starten das Programm und wählen bei Release „tasmota.bin“ aus. So stellen wir sicher, dass die Firmware mit dem letzten Release-Stand von Github auf dem WEMOS D1 mini geflasht wird.
Wir stecken den WEMOS D1 mini per USB an, wählen den USB-Port aus und starten den Flashvorgang, sollte dies nicht auf Anhieb funktionieren, einfach nochmals versuchen. Die Zeit zwischen dem Anstecken und dem Flashen darf nicht zu lange sein.
Ist Tasmota erfolgreich auf dem WEMOS D1 mini geflasht, können wir das device neu starten. Der WEMOS D1 mini startet ein eigenes WLAN, mit dem wir uns im nächsten Schritt verbinden müssen, um die WLAN-Konfiguration unseres eigenen WLANs vornehmen zu können.
Das WLAN heißt üblicherweise „tasmota-######-####“ und lässt sich ohne Passworteingabe verbinden. Nach erfolgreicher Verbindung sollte sich unter Windows automatisch der Standardbrowser öffnen und die Tasmota-Startseite aufgerufen werden. Ist dies nicht der Fall, im Browser der eigenen Wahl die IP 192.168.4.1 aufrufen.
Tasmota zeigt die verfügbaren WLANs und wir wählen das korrekte WLAN aus, tragen das WLAN-Passwort ein und klicken auf „save“. Im Anschluss wird der WEMOS D1 mini neu gestartet und bei erfolgreichem Verbinden mit dem eigenen WLAN können wir Tasmota mit der zugewiesenen IP aufrufen (diese könnt ihr in der Router-Konfiguration einsehen).
Im nächsten Schritt konfigurieren wir Tasmota so, dass wir an einem der Pinouts den Reed-Kontakt installieren können und ein Schließen des Reed-Kontakts in Tasmota hochgezählt wird. Hierzu klicken wir auf Configuration > Configure Module. Wir wählen im Dropdown „Generic 0“ aus und setzen D7 GPIO13 auf Counter mit dem Index 1.
Wir klicken auf „save“, Tasmota startet neu und folgende Startseite erwartet uns:
Verbinden wir nun D7 und GND mit einem Kabel bzw. nutzen den Reed-Kontakt und einen Magneten, sollte der Counter1 hochzählen. Wir merken schnell, dass zu viele Impulse gezählt werden. Abhilfe schafft hier die Definition eines timeouts zwischen zwei Triggern, die ein Hochzählen auslösen sollen, der Befehl in Tasmota heißt CounterDebounce und kann mit der Angabe von Millisekunden eingerichtet werden. Wir setzen CounterDebounce auf 500 Millisekunden.
Jetzt sollte der Zähler mit jedem Schließen von D7 und GND korrekt hochzählen.
Immer wieder wir empfohlen, zusätzlich zur Verbindung des Reed-Kontakts mit D7 und GND noch einen Widerstand von D7 auf 3,3V zu legen. Die Theorie dahinter besagt, dass der Zustand des D7 (auf Spannung oder auf GND) sporadisch wechseln kann, weswegen man den Pinout mit Hilfe eines Widerstands auf Spannung, an den 3,3V-Pinout legt:
Wir können also nun den mit dem WEMOS D1 mini verbundenen Reed-Kontakt am Gaszähler installieren, hierfür entweder die Aussparung nutzen oder den Reed-Kontakt direkt über die letzte Zahl der Kommastellen auf das Display „kleben“.
Die wesentlichen Schritte haben wir bereits hinter uns, auf Basis des Reed-Kontakts zählt Tasmota die 0-Durchläufe des Zählers mit, ein Durch lauf entspricht bei drei Nachkommastellen genau 0,01 qm Gas. Wir müssen also im nächsten Schritt den Zählerstand ab Aktivierung unseres Reed-Kontakts mit Anzahl Counter * 0,01 addieren und erhalten den aktuellen Zählerstand.
Wir übertragen den aktuellen Zählerstand von Tasmota an ioBroker mit der eingebauten MQTT-Funktion von Tasmota. Hierzu benötigen wir zunächst einen installierten Sonoff-Adapter im ioBroker. Die Konfiguration ist trivial, wir müssen lediglich einen Nutzer und ein Passwort definieren (und uns den Port merken). Diese Daten geben wir im MQTT-Menü (Configuration > Configure MQTT) unseres WEMOS D1 mini ein:
Mit „save“ speichern und aktivieren wir die Konfiguration. Wir wechseln in die Protokoll-Ansicht in ioBroker und können die Registrierung des WEMOS in ioBroker beobachten:
Der Sonoff-Adapter speichert alle empfangenen Werte in den Objekten unter dem Sonoff-Adapter-Knoten:
Wer die Werte aufmerksam beobachtet wird feststellen, dass nur alle 5 Minuten die Werte per MQTT von Tasmota an ioBroker übertragen werden. Dies ist die Standard-Einstellung von Tasmota, bei Bedarf kann das MQTT-Übertragungsintervall mit dem Befehl TelePeriod in Sekunden definiert werden:
Mit TelePeriod sendet der WEMOS D1 mini alle 60 Sekunden den Zählerstand an ioBroker.
Müssen wir im letzten Schritt „nur“ noch die Berechnung auf Basis der gezählten Impulse in ioBroker umsetzen. Hierzu legen wir ein neues Blockly-Script an. Wir erzeugen einen neuen Datenpunkt für den Zählerstand und mit jedem Update des Tasmota-Counters, multiplizieren wir diesen mit 0,01 und addieren den Zählerstand bei Aktivierung des Scripts:
Nach Aktivierung des Scripts wird der aktuelle Zählerstand im angelegten Objekt gespeichert:
Auf Basis des stetig aktualisierten Zählerstands lässt sich mit unserem Script oder dem Sourceanalytix-Adapter der Gasverbrauch aufzeichnen und auswerten.
Hi Florian,
ich habe den WemosD1 mini genauso aufgebaut wie du ihn hier vorgestellt hast. An den Gaszähler befestigt und es Get super. Allerdings kann ich dein Blockly nicht nachbauen, weil ich die Befehle „setze“ und Datenpunkt erzeugen nicht in der Blockly Liste auswählen kann.
Wäre rs möglich, das du mir das Blockly als Text zusenden kannst, damit ich es importieren kann?
vg G. Helling
Die beiden Bausteine gibt es unter „System“.
Hallo, vielen Dank für den – auch für Anfänger – gut verständlichen Beitrag zu einem sehr aktuellen Thema. Ich habe es so nachgebaut wie beschrieben, allerdings scheint der Kontakt nicht zuverlässig zu zählen. Es kommt vor, dass einige Impulse -trotz Counter Debounce- doppelt gezählt werden. Habe auch mal einen höheren Wert ausprobiert. Habt ihr eine Idee, woran das liegen kann?
Vielen Dank für eure Unterstützung!
Versuch es mal damit. Bei mir war es die Lösung des Problems.
CounterDebounce 1000
CounterDebounceLow 500
CounterDebounceHigh 500
Danke für die tolle Anleitung.
Ich habe es mit einem Reed von Meder nachgebaut. Provisorisch mit Tesa Posterstrip befestigt. Aktuell zählt der Counter bei jeder Umdrehung 2 Werte hoch. Scheinbar immer beim Wechsel von 9 auf 0 und von 0 auf 1.
Eine Umdrehung benötigt 105 Sekunden. Ich werde das mal über einen längeren Zeitraum beobachten und hoffe, das bei schnellerem Durchlauf auch immer +2 gezählt werden.
Vermutlich prellt der Kontakt. Durchsuche das Netz nach Kontakt „entprellen“.
Hallo,
muss der Widerstand zwingend 10k sein ?
Denn einen 10k hab ich nicht im Bestand….
Florian
Muss hier zwingend ein 10K Widerstand verbaut werden ?