MQTT-Wasserzähler / Verbrauchsmessung eines Wasserzählers

Beschreibung

Einige Wasserzähler sind werksseitig mit einem Reed-Kontakt Aufnehmer ausgestattet und können demzufolge mit einfachen Maßnahmen Smart gemacht werden.
Der meist separat, erhältlichew Reed-Kontaktgeber, erfasst das umlaufene Flügelrad des Zählers und gibt das Signal an die Zählereinheit (MQTT-Wasserzähler) weiter, welche die Auswertung übernimmt.


WLAN

Die Einbindung in das lokale Netzwerk wird folgendermaßen durchgeführt.
Nach dem Einstecken der Stromversorgung meldet sich das Gerät mit der SSID Wasserzaehler-XXXXXX-XXXX, wobei XXXXXX-XXXX für eine alphanumerische Zahlenfolge steht.
Nach dem Verbinden wird man automatisch auf eine Webseite mit der IP: 192.168.4.1 weitergeleitet. Dort bitte das lokale WLAN wählen und das Passwort eingeben (am besten mit dem Haken sichtbar machen beim Eingeben).



Kurz nach dem Speichern meldet sich das Webinterface mit der über DHCP erworbenen IP-Adresse.
Ist dies nicht der Fall, bitte im lokalen Router nach dem Gerät suchen und die IP-Adresse ausfindig machen.

Der MQTT-Wasserzähler ist nun über diese Adresse mittels Browser errereichbar.


Messeinheit

Der Reed Kontaktgeber ist folgendermaßen an den D1-Mini ESP8266 anzuschließen/anzulöten.
Für Zenner MNK hier erhältlich: Reed Kontaktgeber zu MNK N Zähler (Zenner)

Für andere Wasserzähler ist ein geegneter Reed-Kontaktgeber zu erwerben. Bitte beim Hersteller oder Gas/Wasser-Installateur nachfragen.


Kabel durch das Loch seitlich des Gehäuses einfädeln, verlöten, einsetzen, mit Deckel verschließen.




Montage

Modell mit Aufsatzring
Das Gehäuse wird auf den Aufsatzring aufgeschoben und anschließend ganz einfach auf den Wasserzähler aufgesetzt.




Modell mit Halterung

Die Halterung wird entweder mit dem mitgelieferten Klettband am Wasserzähler oder einer anderen, geeigneten Stelle befestigt, oder mit 2x 4mm Schrauben/Dübeln (nicht bei der Lieferung enthalten) an die Wand montiert.
Das Gehäuse mit der Messheinheit wird dann ganz einfach in die Halterung eingesetzt.



klettband-montage.jpg

Anschließend wird der Reed-Kontaktgeber gemäß Herstelleranleitung an den Wasserzähler montiert.
Anleitung für Reed-Kontaktgeber (Zenner MNK): Installationsanleitung Reedkontakt

Konfiguration

Bitte TASMOTA nicht mit einer Standard Firmware updaten!
Die installierte Firmware enthält das Scripting Modul, welches in Standard Versionen nicht enthalten ist. Siehe am Ende dieser Wiki Seite, wie man ein Update oder eine Neuinstallation durchführt.

Zählerstand einstellen

Der auf dem Wasserzähler bereits erfasste Zählerstand wird folgendermaßen in TASMOTA per Konsole übertragen:
Kommando: sensor53 c1 xxx
Wobei xxx die aktuelle Wert ohne Komma ist. Z.B. 336,96 m³ entsprechen der Zahl 33696.
Somit wäre gemäß dieses Beispiels das Kommando:

sensor53 c1 33696


Jetzt sollte der neue Zählerstand gesetzt sein. Aber der Wert für Heute wurde enbenfalls geändert :-(
Da Heute sich durch die Zählungen errechnet, muss nach dem Setzen des Zählerstandes der selbe Wert geteilt durch 100 für den Wert m1 (Differenz-Zählungen) gesetzt werden um Heute wieder auf Null zu bekommen.
Beispiel:

sensor53 c1 33696
script >m1=336.96

Jetzt passt alles! 8-)

Konsolen Script

In folgendem Script (Konsolen > Script konfigurieren) ist eine Variablenwerte zu ersetzen. Immer mit PUNKT nicht mit KOMMA !!

  1. wp (Wasserpreis in EUR) z.B. 1.81


>D
p:m1=0
p:g1=0
p:g2=0
p:month1=0
p:month2=0
p:month3=0
p:gesamt=0
c1=0
s1=0
h1=0
hgp=0
g1gp=0
g2gp=0
m1gp=0
m2gp=0
m3gp=0
gsgp=0
hr=0
dy=0
wp=1.81
wtotal=0

>B
=>sensor53 l255


>S
h1=s1-m1
hgp=(h1*wp)
g1gp=(g1*wp)
g2gp=(g2*wp)
m1gp=(month1*wp)
m2gp=(month2*wp)
m3gp=(month3*wp)
gsgp=(gesamt*wp)

hr=hours
dy=day
if chg[hr]>0
 and hr==0
  then
   m1=s1
   g2=g1
   g1=h1
   month1=month1+h1
   gesamt=gesamt+h1
   if chg[dy]<2
    and dy==1
     then
      month3=month2
      month2=month1
      month1=0
   endif
   svars
endif



if upsecs%tper==0{
=>Publish tasmota/%topic%/main/td_m3 %2h1%
=>Publish tele/%topic%/main/yd_m3 %2g1%
=>Publish tele/%topic%/main/dbyd_m3 %2g2%
=>Publish tele/%topic%/main/value %2s1%
=>Publish tele/%topic%/main/wtotal %2wtotal%
=>Publish tele/%topic%/main/water_price %2wp%
=>Publish tele/%topic%/json {"wtotal": "%2wtotal%", "water_price": "%2wp%", "td_m3": "%2h1%", "td_money": "%2hgp%", "yd_m3": "%2g1%", "yd_money": "%2g1gp%", "dbyd_m3": "%2g2%", "dbyd_money": "%2g2gp%"}
}

>T
s1=Counter#C1/100
c1=Counter#C1
wtotal=(c1/100)

>W
Zählerstand: {m} %wtotal% m³
============
Wasserpreis: {m} %wp% €/m³
============
Verbrauch:
---------------------
Heute: {m} %2h1% m³
Kosten: {m} %2hgp% €
---------------------
Gestern: {m} %2g1% m³
Kosten: {m} %2g1gp% €
---------------------
Vorgestern: {m} %2g2% m³
Kosten: {m} %2g2gp% €
---------------------
Aktueller Monat: {m} %2month1% m³ | %2m1gp% €
Letzter Monat: {m} %2month2% m³ | %2m2gp% €
Vorletzter Monat: {m} %2month3% m³ | %2m3gp% €
Gesamt: {m} %2gesamt% m³ | %2gsgp% €

#

Sieht dann in etwas so aus:


Sonstige Konfiguration

Fall noch nicht vordefiniert, muss Pin D5 für den Counter konfiguriert werden, da der Reedkontaktgeber zwischen GND und D5 eingelötet ist.


MQTT gegebenfalls aktivieren (für Hausautomation) und zum Datenschutz sollte man die Weboberfläche mit einem kryptischen Passwort schützen:

Werte einstellen/korrigieren

Will man die Werte in der Weboberfläche neu justieren, kann man in der Konsole folgende Kommandos dazu verwenden.
Dabei lautet die Syntax folgendermaßen:

script ><var>=<value>

Beispiel: Der Verbrauch von gestern soll auf 5.65 m³ korrigiert werden. Dafür wird die Variable g1 benötigt.
Somit wird in der Konsole folgendes Kommando verwendet:

script >g1=5.65

Variablen Übersicht:

g1 = Verbauch gestern in m³
g2 = Verbauch vorgestern in m³
month1 = Verbauch aktueller Monat in m³
month2 = Verbauch letzter Monat in m³
month3 = Verbauch vorletzter Monat in m³
gesamt = gesamter Verbrauch in m³

Der Verbrauch heute wird anhand der Zählungen berechnet und kann dementsprechend nicht wirklich korrigiert werden. Man muss also einen Tag warten und dann den Verbrauch für gestern korrigieren.


Gezählter Wert (Zähler1) auf 0 (Null) setzen

Um den bisher gezählten Wert zu resetten, also auf NULL zu setzen wird folgendes Kommando verwendet:

sensor53 c1 0

Damit Heute auch auf NULL gesetzt wird, muss m1 (Differenz-Zählungen) auch auf NULL gesetzt werden.

script >m1=0

Impuls Anpassung

Per default geht das Script von 10 Liter pro Impuls aus.
Falls der Wasserzähler andere Impulse liefert, aslo 1L/imp oder 100L/imp, muss das script angepasst werden.

z.B. bei 1L/imp (1 Liter pro Impuls)

s1=Counter#C1/1000
c1=Counter#C1
wtotal=(c1/1000)

z.B. bei 1L/imp (100 Liter pro Impuls)

s1=Counter#C1/10
c1=Counter#C1
wtotal=(c1/10)

Um die Kommastellen der Bildschirmausgabe von 2 Stellen auf 3 Stellen zu erweitern, muss im Script %2 durch %3 ersetzt werden.

Zählerstand: {m} %3wtotal% m³

Konfiguration in FHEM

In FHEM ist dann noch das einmalige Anlegen eines Brokers erforderlich.

define myBroker MQTT2_SERVER 1883 global

Anschließend sollte sich der Stromzähler in FHEM nach kurzer Zeit folgendermaßen, aber mit abweichender Adresse (4F9216) melden (autocreate muss aktiviert sein):


Zusätzlich sind noch folgende Attribute von Vorteil.

attr MQTT2_DVES_4F9216 alias Wasserzähler
attr MQTT2_DVES_4F9216 group Wasser
attr MQTT2_DVES_4F9216 icon measure_water_meter
attr MQTT2_DVES_4F9216 stateFormat {ReadingsVal($name,"LWT","") eq "Offline" ? "absent" : ReadingsVal($name,"wtotal","") . " m³"}

Zusätzlich werden noch folgende dummies und eine Notification benötigt.

Wasserverbrauch:

defmod WasserVerbrauch dummy
attr WasserVerbrauch group Wasser
attr WasserVerbrauch room 99_Zähler
attr WasserVerbrauch sortby 12

Wasser-Verbrauch Letzte Abrechnung: (Im Alias steht das Datum der Abrechnung als Hinweis)

defmod WasserVerbrauchLetzteAbrechung dummy
attr WasserVerbrauchLetzteAbrechung alias WasserVerbrauch_20221202
attr WasserVerbrauchLetzteAbrechung group Gas
attr WasserVerbrauchLetzteAbrechung room 99_Zähler
attr WasserVerbrauchLetzteAbrechung sortby 1

Wasserzählerstand letzte Abrechnung: (Im Alias steht das Datum der Abrechnung als Hinweis)

defmod WasserZaehlerStandLetzteAbrechnung dummy
attr WasserZaehlerStandLetzteAbrechnung alias Wasserzähler_20220522
attr WasserZaehlerStandLetzteAbrechnung group Wasser
attr WasserZaehlerStandLetzteAbrechnung room 99_Zähler
attr WasserZaehlerStandLetzteAbrechnung sortby 110

Wasserverbrauch Heute:

defmod WasserVerbrauch_Heute dummy
attr WasserVerbrauch_Heute group Wasser
attr WasserVerbrauch_Heute room 99_Zähler
attr WasserVerbrauch_Heute sortby 20

Wasserverbrauch Gestern:

defmod WasserVerbrauch_Gestern dummy
attr WasserVerbrauch_Gestern group Wasser
attr WasserVerbrauch_Gestern room 99_Zähler
attr WasserVerbrauch_Gestern sortby 30

Wasserverbrauch Vorgestern:

defmod WasserVerbrauch_Vorgestern dummy
attr WasserVerbrauch_Vorgestern group Wasser
attr WasserVerbrauch_Vorgestern room 99_Zähler
attr WasserVerbrauch_Vorgestern sortby 40

Notification:

defmod WasserverbrauchNoti notify MQTT2_DVES_BE3FE3:wtotal.* {\
my $Zaehlerstand=round(ReadingsNum("MQTT2_DVES_BE3FE3","wtotal","0"),0);;\
my $ZaehlerStandLetzteAbrechnung=round(ReadingsNum("WasserZaehlerStandLetzteAbrechnung","state","0"),0);;\
my $Diff=$Zaehlerstand-$ZaehlerStandLetzteAbrechnung;;\
fhem("set WasserVerbrauch $Diff m³");;\
my $wasser_db_yesterday=ReadingsNum("MQTT2_DVES_BE3FE3","dbyd_m3","0");;\
my $wasser_yesterday=ReadingsNum("MQTT2_DVES_BE3FE3","yd_m3","0");;\
my $wasser_today=ReadingsNum("MQTT2_DVES_BE3FE3","td_m3","0");;\
fhem("set WasserVerbrauch_Vorgestern $wasser_db_yesterday m³");;\
fhem("set WasserVerbrauch_Gestern $wasser_yesterday m³");;\
fhem("set WasserVerbrauch_Heute $wasser_today m³");;\
}

Konfiguration Home Assistant

Bitte die Konfiguration in Anlehnung an die des Gaszählers vornehmen. Anschließend aber das folgende Script für den Wasserzähler verwenden.
https://wiki.gorjup.de/doku.php?id=public:gaszaehler#konfiguration_im_home_assistant

Script:

mqtt:
  sensor:
    - name: "Wasserzähler Zählerstand"
      unique_id: sensor.wasserzaehler_zaehlerstand
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.wtotal }}'
      unit_of_measurement: 'm³'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Wasserpreis"
      unique_id: sensor.wasserzaehler_wasserpreis
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.water_price }}'
      unit_of_measurement: 'EUR/m³'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Verbrauch heute"
      unique_id: sensor.wasserzaehler_verbrauch_heute
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.td_m3 }}'
      unit_of_measurement: 'm³'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Verbrauch Kosten heute"
      unique_id: sensor.wasserzaehler_verbrauch_kosten_heute
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.td_money }}'
      unit_of_measurement: 'EUR'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Verbrauch gestern"
      unique_id: sensor.wasserzaehler_verbrauch_gestern
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.yd_m3 }}'
      unit_of_measurement: 'm³'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Verbrauch Kosten gestern"
      unique_id: sensor.wasserzaehler_verbrauch_kosten_gestern
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.yd_money }}'
      unit_of_measurement: 'EUR'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Verbrauch vorgestern"
      unique_id: sensor.wasserzaehler_verbrauch_vorgestern
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.dbyd_m3 }}'
      unit_of_measurement: 'm³'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"
    - name: "Wasserzähler Verbrauch Kosten vorgestern"
      unique_id: sensor.wasserzaehler_verbrauch_kosten_vorgestern
      state_topic: "tele/Wasserzaehler/json"
      value_template: '{{ value_json.dbyd_money }}'
      unit_of_measurement: 'EUR'
      payload_available: "Online"
      payload_not_available: "Offline"
      device_class: water
      state_class: "total_increasing"


Dashboard:


Energy-Board: (Beispielhaft sind alle drei angebotenen Zähler dargestellt)

Neue TASMOTA Firmware für den MQTT-Wasserzähler

Neue TASMOTA Releases stehen zum Download unter folgendem Link zur Verfügung (Passwort = 10 stellige, aphanumerische Nummer auf dem Gerätelabel „unterste Zeile“)
Download TASMOTA Releases für MQTT-Zähler
Hier geht's zur STEP-BY-STEP Anleitung für das Neuflashen des Zähler: STEP-BY-STEP-FLASHEN

Troubleshooting

Es wurde eine Standard TASMOTA Firmware auf den MQTT-Wasserzähler geflashed/geupdated

Solange kein blank_1MB.bin Image geflashed wurde, sind die Einstellungen noch vorhanden, aber das Script funktioniert nicht mehr.
In diesem Fall muss zuerst die tasmota-minimal_xxx.bin Firmware und anschließend wieder die scripting_tasmota_xxx.bin Firmware über das Webinterface geflashed werden. (Siehe „Neue TASMOTA Firmware für den MQTT Stromzähler“).


MQTT-Wasserzähler meldet sich nicht mit seiner WLAN/SSID

Bitte prüfen, ob das 5V Stromkabel richtig tief eingesteckt wurde. Es kann sein, dass das Kabel nicht 100% Kontakt mit dem D1 Wemos Mini im inneren des Gehäuses hat.
Im Zweifelsfall bitte den Deckel öffen, den D1 Wemos Mini heraus nehmen und nochmal das Kabel einstecken. Wenn er sich immer noch nicht meldet, scheint die TASMOTA Software nicht geflashed oder korrupt zu sein.
Es kann auch sein, dass bei der WLAN Verbindung ein falsches Passwort eingegeben wurde und das Gerät jetzt permanent versucht sich mit falschem Passwort zu verbinden.
In diesem Fall muss das Gerät neu geflashed werden. Zuerst mit dem blank_1MB.bin und anschließend mit der scripting_tasmota_xxx.bin. (Siehe „Neue TASMOTA Firmware für den MQTT Wasserzähler“).
Danach muss eine komplette Neukonfiguration gemäß dieser Wiki Anleitung durchgeführt werden.

Hier geht's zur STEP-BY-STEP Anleitung für das Neuflashen des Zähler: STEP-BY-STEP-FLASHEN


MQTT-Wasserzähler wird am USB-Port nicht erkannt

In diesem Fall handelt es sich bei dem verwendeten Kabel evtl. nur um ein reines Stromkabel und nicht um ein Datenkabel. Bitte ein anderes USB-Kabel verwenden.
Meistens ist beim Einstecken des MQTT-Wasserzählers in den Computer-USB Port bei Verwendung eines Datenkabels ein Windows-Sound zu hören (Windows 10 oder höher).



Navigation
Eigene Werkzeuge