Het is weer zomer en dus gaat Nederland massaal zwembadjes vullen, de planten sproeien en vaker douchen. Ik vroeg mij af, hoeveel verbruik je dan eigenlijk? Maar ook in de andere seizoenen is het interessant om te weten wat je waterverbruik is. Hoeveel verbruikt je wasmachine en je vaatwasser, hoeveel water gebruik je tijdens het douchen? Meten is weten en daarom gaan we de watermeter toevoegen aan onze smarthome domoticasoftware Home Assistant.
Een watermeter bevind zich vaak in de meterkast of kruipruimte. Waterbeheerbedrijven zoals Vitens of Oasen monteren vaak watermeters van het merk Itron. Zo ook die van mij, helaas zijn de watermeters nog niet smart en missen ze dus een ‘slimme’ aansluiting zoals P1 of S0 aansluiting (pulsuitgang) zoals bij slimme meters, zonnepanelen of tussenmeters. We zullen het dus anders aan moeten pakken om de watermeter uit te lezen.
Met onderstaand stappenplan voeg je eenvoudig je watermeter toe aan Home Assistant.
- Weet waar je watermeter zit
Zorg dat je weet waar je watermeter zich bevind. Meestal is het de meterkast, je hebt er ook WiFi bereik en netstroom of USB 5v nodig.
- Knutsel de pulsteller in elkaar met de nabijheidssensor
Maak een WiFi pulsteller op basis van een Wemos D1 mini/ESP8266 met nabijheidssensor en esphome
- Configureer Home Assistant
Esphome maakt de sensoren aan in Home Assistant
- Analyseer je waterverbruik
De gegevens komen binnen terwijl je water verbruikt. Nu heb je inzicht in je waterverbruik en start met besparen!
Zelf een pulsgever voor de watermeter maken met een Wemos D1 mini
In mijn huis is de Aquadis Itron TU1M15, geïnstalleerd. De watermeter bevat een rood ronddraaiend metertje met een stalen plaatje erop. Bij iedere liter water die je verbruikt, draait het metertje 1x rond. Wanneer je dus het aantal rondjes telt wat het plaatje draait, kun je je waterverbruik meten. Nu je dit weet, is het eigenlijk niet zo moeilijk meer, want we gaan gewoon pulsen tellen. Daar zijn legio voorbeelden en oplossingen voor binnen de Arduino wereld. Ik heb er twee geprobeerd, een optische sensor en de nabijheidssensor. Lees in mijn artikel Watermeter uitlezen met Domoticz meer over mijn bevindingen van beide oplossingen. Voor de watermeter integratie met Home Assistant ga ik in dit artikel verder met de beste oplossing; de nabijheidssensor.
Waterverbruik meten met een nabijheidssensor/proximity sensor
De beste oplossing heb ik gevonden in een “nabijheidssensor” ofwel een “proximity sensor”. Deze sensor geeft een puls af wanneer er metaal dichtbij het meetoppervlak komt. Het metalen plaatje op de rode wijzer van de watermeter is groot en dichtbij genoeg om waar te nemen door de sensor. Wanneer er detectie is, gaat de rode led op de sensor aan. Het betreft een LJ12A3-4-Z-BX. In de reacties onder het artikel Watermeter uitlezen met Domoticz hebben lezers gemeld dat ook andere type proximitysensors werken.
De werking van een nabijheidssensor/proximity sensor
De sensor werkt op 6 tot 36V DC. Omdat die spanning niet uit de Wemos D1 mini of een USB poort komt, moeten we die ook zien te maken. Dat kan door bijvoorbeeld een 12VDC adapter te gebruiken, of door een spanningsconverter toe te passen.
De nabijheidssensor zelf trekt 300mA, dus de adapter of spanningsconverter moet dat minimaal kunnen leveren. Omdat ik geen plek meer had voor een extra stekker in het stopcontact voor een adapter en een ‘sterke’ USB poort beschikbaar had, heb ik gebruik gemaakt van een MT3608 spanningsconverter. Deze spanningsconverter kan maximaal 2A leveren.
Ik ga het als volgt aansluiten:
230VAC -> Telefoonlader 5V 2A -> Spanningsconverter 5v/12vDC & Wemos D1 mini -> Sensor
Bij een adapter kun je het volgende doen:
230VAC -> Adapter …VDC ..A -> Sensor & Spanningsconverter …V/5V DC -> Wemos D1 mini
Aansluitschema van de nabijheidssensor op Wemos D1 mini
De nabijheidssensor, Wemos D1 mini en de spanningsconverter sluit ik aan op een USB poort van een apparaat wat in de meterkast hangt. Vervolgens voeg je alle GND draden van alle componenten samen. Tussen de 5V van de Wemos en zwarte kabel van de sensor plaatsen we een 10K ohm weerstand. De datadraad van de sensor kun je op een willekeurige GPIO pin aansluiten van de Wemos. Onthoud dit pinnummer wel, want die heb je straks nodig in de esphome software. Sluit als laatste de blauwe en bruine draad van de nabijheidssensor aan op de 12v aansluiting van de spanningsconverter.
Wanneer je alles goed aangesloten hebt en je houd de sensor tegen een stuk metaal, zie je de led op de sensor aan gaan. Dat betekend dat het werkt!
Sensor en Wemos D1 mini bevestigen op de watermeter
De nabijheidssensor op de watermeter bevestigen is nog wel een uitdaging. Een voorwaarde voor mij was dat ik altijd de waterstand moet kunnen lezen en dat ik de meter niet mag beschadigen. Met wat knutselen met plastic, hout en stalen beugels kom je een eind.
Zelf maken moeilijk?
Ben je niet zo handig, dan bestaat er ook een Impulsgever die je op de Itron Aquadis watermeter plaatst en kunt integreren in je domoticasysteem. Het apparaat is wel vrij prijzig, namelijk ongeveer 80 euro en de leverbaarheid is lastig.

S0 tool
Collega blogger Wobbe van huizebruin.nl wees mij erop dat hij een kant en klare software en hardware oplossing heeft ontwikkeld op basis van esphome. Het is vergelijkbaar met wat we in dit artikel gaan maken. Wil je het checken? Zie :
ESPhome en Home Assistant
De hardware werkt. We gaan over naar de software. We gaan code via esphome op de Wemos D1 mini flashen. Heb je nog nooit met esphome gewerkt? Installeer dan eerst de esphome addon.
Klik op New Device en geef je device een naam. Geef het bijvoorbeeld de naam Watermeter. Plak nu onderstaande code in het venster:
# voorbeeld: https://github.com/hugokernel/esphome-water-meter substitutions: name: watermeter friendly_name: "Watermeter" esphome: name: watermeter platform: ESP8266 board: d1_mini on_boot: priority: -10 then: - script.execute: publish_states # Enable logging logger: # Enable Home Assistant API api: ota: password: "59bfd5695775faaa05ef193e378d4cc2" wifi: ssid: "<<WIFI SSID>>" password: "<<WIFI PASSWORD>>" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Watermeter Fallback Hotspot" password: "4Ejkhjkhuixa4M" captive_portal: script: - id: reset_main_counter then: - lambda: |- id(main_counter_pulses) = 0; id(water_main_consumption).publish_state(id(main_counter_pulses)); - id: reset_secondary_counter then: - lambda: |- id(secondary_counter_pulses) = 0; id(water_secondary_consumption).publish_state(id(secondary_counter_pulses)); - id: publish_states then: - lambda: |- id(water_main_consumption).publish_state(id(main_counter_pulses)); id(water_secondary_consumption).publish_state(id(secondary_counter_pulses)); id(water_daily_consumption).publish_state(id(daily_counter_pulses)); id(water_weekly_consumption).publish_state(id(weekly_counter_pulses)); id(water_monthly_consumption).publish_state(id(monthly_counter_pulses)); id(water_yearly_consumption).publish_state(id(yearly_counter_pulses)); id(current_water_consumption).publish_state(id(event_quantity)); time: - platform: sntp on_time: - seconds: 0 minutes: 0 hours: 0 then: - globals.set: id: daily_counter_pulses value: '0' - lambda: id(water_daily_consumption).publish_state(id(daily_counter_pulses)); - seconds: 0 minutes: 0 hours: 0 days_of_week: MON then: - globals.set: id: weekly_counter_pulses value: '0' - lambda: id(water_weekly_consumption).publish_state(id(weekly_counter_pulses)); - seconds: 0 minutes: 0 hours: 0 days_of_month: 1 then: - globals.set: id: monthly_counter_pulses value: '0' - lambda: id(water_monthly_consumption).publish_state(id(monthly_counter_pulses)); - seconds: 0 minutes: 0 hours: 0 days_of_month: 1 months: JAN then: - globals.set: id: yearly_counter_pulses value: '0' - lambda: id(water_yearly_consumption).publish_state(id(yearly_counter_pulses)); sensor: - platform: pulse_counter id: water_pulse_counter pin: 4 name: "${friendly_name} water consumption" update_interval: 2sec internal_filter: 10us unit_of_measurement: "L/min" accuracy_decimals: 0 icon: "mdi:water" filters: # Divide by 60 - multiply: 0.0167 - lambda: return abs(x); - platform: template id: water_main_consumption name: "${friendly_name} main water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: water_secondary_consumption name: "${friendly_name} secondary water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: water_daily_consumption name: "${friendly_name} daily water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: water_weekly_consumption name: "${friendly_name} weekly water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: water_monthly_consumption name: "${friendly_name} monthly water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: water_yearly_consumption name: "${friendly_name} yearly water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: current_water_consumption name: "${friendly_name} current water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" - platform: template id: last_water_consumption name: "${friendly_name} last water consumption" unit_of_measurement: "L" accuracy_decimals: 0 icon: "mdi:water" binary_sensor: # Nabijheidssensor - platform: gpio id: water_pulse pin: 4 internal: true filters: - delayed_on_off: 50ms - lambda: |- id(main_counter_pulses) += x; id(secondary_counter_pulses) += x; id(daily_counter_pulses) += x; id(weekly_counter_pulses) += x; id(monthly_counter_pulses) += x; id(yearly_counter_pulses) += x; id(event_quantity) += x; return x; on_state: - script.execute: publish_states switch: - platform: template name: "${friendly_name} reset main counter button" icon: "mdi:restart" turn_on_action: - script.execute: reset_main_counter - platform: template name: "${friendly_name} reset secondary counter button" icon: "mdi:restart" turn_on_action: - script.execute: reset_secondary_counter - platform: restart name: "${friendly_name} restart" interval: # Save the last consumption # # An event is published when a water flow (>= 1L / 15 seconds) is # detected and followed by a stop of consumption for a defined time. - interval: 15sec then: - lambda: |- if (id(event_quantity) != id(last_event_quantity)) { // Water continues to flow // Reset event counter id(event_counter) = 0; } else { // Water no longer flows if (id(event_quantity)) { // 4 * 15 * 5 = 5min if (id(event_counter) < 4 * 5) { // Timeout is not reaches id(event_counter)++; } else { // Timeout is reaches id(last_water_consumption).publish_state(id(event_quantity)); // Send event to Home Assistant api::HomeAssistantServiceCallAction<> *api; api = new api::HomeAssistantServiceCallAction<>(api_apiserver, true); // Event id length limit is 32 characters api->set_service("esphome.last_consumption_changes"); api->play(); id(event_quantity) = 0; } } } id(last_event_quantity) = id(event_quantity); # Track the current consumption - interval: 2sec then: - lambda: |- if (id(event_quantity) != id(current_event_quantity)) { id(current_water_consumption).publish_state(id(event_quantity)); } id(current_event_quantity) = id(event_quantity); globals: - id: main_counter_pulses type: int restore_value: yes initial_value: '0' - id: secondary_counter_pulses type: int restore_value: yes initial_value: '0' - id: daily_counter_pulses type: int restore_value: yes initial_value: '0' - id: weekly_counter_pulses type: int restore_value: yes initial_value: '0' - id: monthly_counter_pulses type: int restore_value: yes initial_value: '0' - id: yearly_counter_pulses type: int restore_value: yes initial_value: '0' - id: event_quantity type: int restore_value: no initial_value: '0' - id: last_event_quantity type: int restore_value: no initial_value: '0' - id: event_counter type: int restore_value: no initial_value: '0' - id: current_event_quantity type: int restore_value: no initial_value: '0' - id: higher_resistance type: float restore_value: yes initial_value: '0'
Pas de volgende waarden aan naar je eigen situatie: Wifi SSID, Wifi Password en de pin van de sensor onder binairy_sensor.

Deze code maakt een aantal sensors aan die je inzicht geven in je waterverbruik. Er is een ‘huidig verbruik’ teller, welke het aantal liters van de huidige tapactie telt. Het dag, week, maand en jaar verbruik kun je inzichtelijk maken voor deze periodes met de specifieke sensors. Er is ook een tweede teller aanwezig die je kunt resetten voor je eigen bepaalde periode.

esphome watermeter code flashen naar Wemos D1 mini
Flash de code naar de Wemos D1 mini. Dit moet de eerste keer via een USB kabel tussen de Wemos en de PC waar je mee werkt, of de host machine van Home Assistant. Ikzelf maak de USB verbinding altijd op de PC waarmee ik werk dus klik ik op Plug into this computer.

De browser maakt verbinding met je COM poorten en vraagt welke COM poort je Wemos is. Klik op de juiste en het flashen begint.

Als je na het flashen nog aanpassingen wilt maken aan de code kan dat, en kun je de code draadloos op je Wemos D1 mini flashen. Kies dan voor Wirelessly in het keuze menu. Home Assistant maakt dan verbinding met de Wemos via WiFi en werkt de software OTA bij.
Watermeter toevoegen aan Energy Dashboard
Vanaf Home Assistant 2022.11 is het mogelijk om ook de watermeter toe te voegen aan het Energy dashboard. Dit dashboard geeft dan nu echt een compleet beeld van je Gas/Water/Licht verbruik.
De code uit dit artikel werkt nog niet met het Energy dashboard. Ik vermoed omdat de units in liters is in plaats van kuubs. Ik wilde snel aan de slag en heb besloten de code van S0 tool te gebruiken. Op de pagina van S0 tool kun je op install klikken waarna je door de installatie wordt geleid. De pulsen komen ook in S0 tool op D2 binnen dus dat was makkelijk.



Het werkt! Je watermeter is toegevoegd aan Home Assistant!
Nu je je waterverbruik inzichtelijk hebt in Home Assistant kun je onderzoeken welke apparaten en activiteiten veel water gebruiken. Misschien kun je hierop wel heel simpel besparen!
Je wasmachine en vaatwasser verbruiken vaak het meeste water maar ook stroom, naast de keukenkraan en douche. Je kunt goed inzicht krijgen met slimme stekkers. Met goedkope Hombli smart plugs uit de lokale bouwmarkt of Shelly smart plugs heb je dat zo geregeld. Zelfs op de Tuya apparaten flash je zo ESPHome!

Wil je meer inzicht in je energieverbruik via het Energy dashboard? Kijk dan eens naar Powercalc om verbruiksmetingen te doen ook bij apparaten die daar geen ondersteuning voor hebben.
Wist je dat het heel makkelijk is om een melding te krijgen als de wasmachine of vaatwasser klaar is? Je meet dat niet via het waterverbuik maar op een andere manier. Lees meer over notificaties krijgen van je normale wasmachine, droger of ander apparaat in Is de wasmachine klaar? notificatie.
Kom je er niet uit? Laat een reactie achter!
Wat vond je van dit artikel?
Geef hieronder je stem via de sterren. Laat weten wat je vindt van het artikel en stel je vragen in de reacties!
Hi Wouter, bedankt voor de uitgebreide uitleg! ik heb sinds gisteren succesvol een watermeter in homeassistant en gebruik daarbij de configuratie die je hierboven hebt gedeeld.
ik ben ook al tegen het eerste probleem aangelopen; als het meetwiel half onder de sensor stil komt te staan gaat de sensor knipperen en wordt er een absurd hoog aantal pulses geregistreerd; heb je wellicht een tip om dit in de software eruit te filteren?
Beste Laurens,
Leuk dat je aan de slag bent gegaan! Ik weet van het probleem wat je omschrijft. Ik heb er zelf eigenlijk geen last van. Ik kan mij niet voorstellen dat het bij mij niet voorkomt. Toch zie ik geen pieken in mijn verbruik.
Heeft het misschien te maken met de weerstand die je gebruikt? Anders wellicht de waarde van
internal_filter: 10us verhogen?
Succes en groet Wouter
Hallo Wouter.
Ook wederom een leuk artikel.
Bedankt dat je een link hebt geplaatst.
Wobbe van Huizebruin.nl
Maker van de S0tool.
Dag Wouter
Ik zou jouw programma willen gebruiken om mijn stookolieverbruik te monitoren
De teller die ik bezit geeft echter 20 pulsen per liter , hoe kan ik dit aanpassen ?
Hoi marnix,
Dat kan! Volgens mij is het het eenvoudigst om in de code onder de filters van de binary sensor een multiply toevoegen.
– multiply: 0.05
0.05 = 1/20
Alles blijft werken zoals nu alleen iedere puls wordt vermenigvuldigd met 0.05 waardoor na 20 pulsen de teller op 1 staat.
Omdat je nu ook met decimalen werkt kun je de accuracy nog aanpassen naar 0.00
Succes en groet Wouter
Dag wouter
binary_sensor blijkt geen filter multiply toe te staan
de accuracy is aangepast naar 0.05 maar heeft geen effect in HA
Hoi Marnix,
Oh ja ik zie het. De code voor esphome is voor mij ook nog een beetje nieuw…
Wat je ook kunt doen is in home assistant een template sensor maken die de waarde van de watermeter vermenigvuldigd met 0.05.
De accuracy_decimals moet je aanpassen naar 2 zodat esphome snapt dat je 2 decimalen wilt. Maar als je de omrekening doet in home assistant zelf hoeft dat niet.
Zoals gezegd esphome is voor mij ook wat nieuw.
Groet Wouter
Dag wouter,
Dat werkt inderdaad prima , zodoende heb ik mijn eerste template gemaakt
Is er een manier om de geschiedenis te verwijderen zodat ik met een propere meting kan herbeginnen ?
Groetjes
Marnix
Hoi Marnix,
Goeie vraag. Ik heb dat eigenlijk nog nooit gedaan.
Je kunt zoals ik het lees, een bepaalde entity purgen. Zie:
https://www.home-assistant.io/integrations/recorder/#service-purge_entities
Voor de zekerheid eerst ff een back up maken 😉
Groet Wouter
Bedankt voor je artikel! De watermeter is nu ook onderdeel van mijn home Assistant.
Ik gebruik de sensor met 8 mm bereik en heb dat op een stukje triplex geschroefd. Daar zitten ook twee 3mm pinnen op gelijmd die precies in de gaten van de watermeter passen. Zo blijft alles netjes op z’n plek en kan ik het er zo weer afhalen.
Heb je ook ergens een mogelijkheid om je huidige meterstand erbij te zetten?
Beste Jan,
Bedankt voor je reactie. Mooi dat het werkt. Je kunt nu ook de watermeter toevoegen aan het energy dashboard. Ik heb het artikel hierop wat aangepast. Door het gebruik van de S0 tool code kun je ook je watermeterstand invoeren. Win-win 😉
Groet Wouter
Is het al iemand gelukt om de watermeter aan het nieuwe energy dashboard van versie 2022.11 te koppelen? Het zou mooi zijn om deze gegevens ook in het overzicht te kunnen zien.
Beste Jan-Willem,
Ja het is mij gelukt. Ik heb de S0tool code van HuizeBruin op mijn Wemos geflashed en kon zo de watermeter toevoegen aan het energy dashboard. Via de link https://huizebruin.github.io/s0tool/ onder het kopje Installation staat de knop install for watermeter only. Sluit je Wemos aan op je USB poort van je PC en je wordt door de installatie heen geloosd. Hardwarematig heb ik niets aangepast aangezien de S0 tool software ook luistert op poort D2 naar de pulsen. Ik gebruik dus de code in mijn artikel nu niet meer. Er is in de code van HuizeBruin ook een mogelijkheid tot het ingeven van een meterstand. Nadeel is wel dat je nieuwe sensoren aanmaakt en dus de geschiedenis ‘verliest’.
Je kunt ook een poging doen de bestaande code aan te passen, volgens mij is het niets meer dan de units van de lifetime sensor aan te passen naar m³.
Groet Wouter
Hoi Wouter,
Goed om te horen. Ik ga dat nu ook proberen maar moet wel even de hardware aanpassen omdat ik D5 gebruik en ook nog een paar meer sensoren. Maar als het gelukt is laat ik het zeker even weten wat mijn ervaringen zijn…
Hi Wouter,
Dank voor deze oplossing hij werkt perfect!
Ik heb hem overigens ook op het dashboard gekregen door het toevoegen van twee extra attributen op de water_main_consumption:
– platform: template
id: water_main_consumption
name: “${friendly_name} main water consumption”
unit_of_measurement: “L”
accuracy_decimals: 0
icon: “mdi:water”
device_class: water
state_class: total
Voor Home Assistant is dit inderdaad het enige wat nodig is, de hele So tool is nergens voor nodig. Dank voor het delen Ferdinand.
Een aanvulling op de code: als je een vast ip gebruikt werkt het stuk van
time:
– platform: sntp
niet. Daardoor werken ook de resets niet. Dat kan je vervangen door
time:
– platform: homeassistant
id: homeassistant_time
zodat de tijd direct van Home Assistant wordt uitgelezen. Dat voorkomt uiteraard ook eventuele synchronisatieproblemen.
Hi Wouter,
ik heb de water meter (jouw versie) draaien op een HA. De uitlezing met een nabijheidssensor had ik al wat langer in gebruik op mijn watermeter. Werkt probleem loos eerst in Domoticz.
Maar, hoe stop ik de meetuitlezing van de watermeter in het programma. ben begonnen met 0 en het verbruik staat op 4261 liter. Mijn water meter staat op 626324 liter.
Ik kijk er waarschijnlijk overheen, dat heb je soms met een vastgeroeste hobby programeur van 1956 🙂
Hoi Wouter ik krijg in HA in het dashboard overal ${friendly_name} te zien, weet je hoe ik dat weg krijg
Hoi Richard,
Dat is gek! ${friendly_name} moet automatisch worden vervangen door wat er bij
substitutions:
name: watermeter
friendly_name: “Watermeter”
staat. Heb je dit juist overgenomen in de yaml van je esphome device?
Succes!
Groet Wouter
Hoi Wouter,
Dank voor de instructie voor het maken van een watermeter, ik heb er 2 gemaakt voor koud en warm water.
Alles werkt, maar als ik de voeding van de ESP8266 haal dan gaan de tellers weer naar 0 liter, heb je enig idee waar ik dit kan vinden en oplossen
Vriendelijke groet Ron
Hi Wouter,
Het is opgelost.
Hoi Ron,
Excuses voor het niet antwoorden. Welke esphome code heb je gebruikt? De code uit mijn artikel of die van de s0tool? Hoe heb je het opgelost? Zou je dat willen delen, dan hebben andere lezers er ook iets aan!
Groet Wouter
Hoi,
Ik heb de code uit het artikel hier boven gebruikt.
Ik heb op advies van “TheFes” op Tweakers gebruik gemaakt van de nutsmeters die in HA aanwezig zijn.
Hier van 8 stuks aangemaakt wel was het even zoeken naar de juiste instelling.
De nutsmeter zijn te vinden in “ helpers “