Zuletzt angesehen: • wasserzaehler
Inhaltsverzeichnis
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.
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!
Konsolen Script
In folgendem Script (Konsolen > Script konfigurieren) ist eine Variablenwerte zu ersetzen. Immer mit PUNKT nicht mit KOMMA !!
- 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).