Inhaltsverzeichnis

MQTT Wasserzähler / Verbrauchsmessung eines Zenner-Wasserzählers

Beschreibung

Ein Zenner MNK Wasserzähler ist werksseitig mit einem Reed-Kontakt Aufnehmer ausgestattet und kann demzufolge mit einfachen Maßnahmen Smart gemacht werden.
Der 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 SPEWA Reed Kontaktgeber MNK für Zenner ist folgendermaßen an den D1-Mini ESP8266 anzuschließen/anzulöten.
Hier erhältlich: Reed Kontaktgeber zu MNK N Zähler (Zenner)


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




Montage

Der runde Kunststoff-Aufsatz wird einfach auf den Wasserzähler aufgesetztn.
Anschließend wird der Reed-Kontaktgeber gemäß Herstelleranleitung an dem Zenner-Wasserzähler montiert.
Anleitung: 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³ ensprechen der Zahl 33696.
Somit wäre gemäß dieses Beispiels das Kommando:

sensor53 c1 33696



Konsolen Script

In folgendem Script (Konsolen > Script konfigurieren) ist eine Variablenwerte zu ersetzen.

  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": "%2hgp1%", "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:

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 stromzaehler_icon
attr MQTT2_DVES_4F9216 stateFormat {ReadingsVal($name,"LWT","") eq "Offline" ? "absent" : ReadingsVal($name,"energytotal","") . " kWh"}

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

Stromverbrauch:

defmod WasserVerbrauch dummy
attr StromVerbrauch group Wasser
attr StromVerbrauch room 99_Zähler
attr StromVerbrauch 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 StromverbrauchNoti notify MQTT2_DVES_BE3FE3:value.* {\
my $Zaehlerstand=round(ReadingsNum("MQTT2_DVES_BE3FE3","energytotal","0"),0);;\
my $ZaehlerStandLetzteAbrechnung=round(ReadingsNum("ZaehlerStandLetzteAbrechnung","state","0"),0);;\
my $Diff=$Zaehlerstand-$ZaehlerStandLetzteAbrechnung;;\
fhem("set StromVerbrauch $Diff kWh");;\
my $wasser_db_yesterday=ReadingsNum("MQTT2_DVES_BE3FE3","dbyd_kwh","0");;\
my $wasser_yesterday=ReadingsNum("MQTT2_DVES_BE3FE3","yd_kwh","0");;\
my $wasser_today=ReadingsNum("MQTT2_DVES_BE3FE3","today_kwh","0");;\
fhem("set StromVerbrauch_Vorgestern $wasser_db_yesterday kWh");;\
fhem("set StromVerbrauch_Gestern $wasser_yesterday kWh");;\
fhem("set StromVerbrauch_Heute $wasser_today kWh");;\
}

Konfiguration Home Assistant

Bitte die Konfiguration in Anlehnung an die des Gaszählers vornehmen.
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"

Neue TASMOTA Firmware für den MQTT Stromzä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 Wasserzähler

Troubleshooting

Es wurde eine Standard TASMOTA Firmware auf den MQTT-Stromzä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.


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 Micro-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).