Watermeter uitlezen in Domoticz met een Python script

De meterstanden van stroom en gas kan ik eenvoudig naar Domoticz halen door Eneco’s Toon thermostaat te koppelen aan Domoticz. Het volgende idee was: Hoe kan ik de watermeter uitlezen in Domoticz? Als je onderstaande stappen volgt is dat eenvoudig te doen. Kosten? Een euro of 2 en een half uurtje vrije tijd!

Benodigdheden

Voorbereiding

Het idee is vrij simpel: op de watermeter zit een draaischijfje die bij iedere liter water éénmaal rond draait. Op dat draaischijfje zit een half maantje van metaal. De inductieve NPN sensor wordt boven het draaischijfje bevestigd en iedere keer als er een rondje gedraaid is wordt er een signaal naar Domoticz gestuurd dat er één liter water verbruikt is.

 

Inductieve NPN sensor

De NPN sensor heeft 3 draden (bruin/zwart/blauw). Het beste kunt je dupont female connectors aan de 3 draden maken. Ik had zelf geen losse connectors liggen, dus heb ik maar dupont kabeltjes aan de 3 draden gesoldeerd. De blauw draad moet op een GROUND-pin (bv. pin 39) aangesloten worden, de zwarte draad op een GPIO (bv. GPIO 21 = pin 40) en de bruine draad op een 5V-pin (pin 2 of 4). Hoewel het een 6-36 Volt sensor is werkt deze prima op 5 Volt op een Raspberry Pi. Zodra de NPN sensor op de Raspberry Pi aangesloten is hou je het blauwe uiteinde tegen een stukje metaal (bv. schroevendraaier) aan.

Als je alles goed aangesloten hebt moet de led bovenop de sensor gaan branden. Indien dat het geval is hou je de sensor boven het draaischijfje met het halve maantje (van metaal). Ook nu moet de led op de sensor branden, zodra het metalen gedeelte van het draaischijfje exact onder de sensor zit. Bij mij was dat laatste niet het geval. Het bleek dat de plastic kap van de watermeter te dik was om de draaischijf te detecteren. Wat nu?? De watermeter slopen is geen oplossing, aangezien deze eigendom is van het waterbedrijf. Op goed geluk heb ik een stuk schuurpapier gepakt en ben ik het blauwe uiteinde van de sensor gaan schuren. Stukje schuren, kijken of de led nu wel gaat branden, stukje schuren, etc., net zo lang totdat de sensor het draaischijfje kan detecteren.

Zodra de NPN sensor het draaischijf goed detecteert is het tijd om de NPN sensor definitief op de watermeter de plaatsen. In eerste instantie zat ik te denken hoe ik een beugeltje ergens aan vast kon maken, maar de beste oplossing was nog veel eenvoudiger: een gaatje boren in de deksel van de watermeter, de sensor er doorheen halen en aan beide kanten vast draaien met twee moertjes. Zorg er uiteraard wel voor dat je het gaat je exact op de juiste plek in de deksel boort, dus precies boven het draaiende schijfje met een metalen halve maantje. Dit komt erg nauwkeurig!

 

Sensor in Domoticz

Uiteraard wil je in Domoticz zien hoeveel water je dagelijks verbruikt. Hiervoor moeten we een RFXMeter sensor aanmaken. Dit doe je door middel van JSON:

192.168.2.152:8080/json.htm?type=createvirtualsensor&idx=29&sensorname=Water&sensortype=113

Uiteraard moet je het IP adres en het poort nummer aanpassen naar de waarde van jouw Raspberry Pi (handig is het om de Pi een vast IP adres te geven). Je krijgt nu een melding in de browser te zien dat de sensor aangemaakt is en welk idx de sensor heeft gekregen. Het idx-nummer hebben we bij de volgende stap nodig:

192.168.2.152:8080/json.htm?type=setused&idx=178&name=RFXMeter&switchtype=2&used=true

Mijn sensor had idx 178 gekregen, maar dit moet je dus aanpassen naar de waarde die je bij de vorige stap hebt gezien. Als het allemaal goed gegaan is krijg je onderstaande sensor (uiteraard met 0 liter) te zien onder Utility-tabblad:

 

 

Python script

Download hier het Python script en pak het uit met een extractor als WinRar. Met dit Python script lees je de GPIO uit en schrijf je iedere verbruikte liter water via JSON naar Domoticz. Je huidige stand van de watermeter kun je invullen regel 9 bij “Counter”. Op regel 12 vul je het IP adres en het poort nummer van je Raspberry Pi in en op regel 14 het idx-nummer van de zojuist aangemaakte RFXMeter sensor. Indien je de sensor op GPIO 21 (pin 40) hebt aangesloten dan hoef je verder niets meer aan te passen in het Python script. Mocht je een andere GPIO gebruiken dan moet je overal waar “40” staat de waarde vervangen door de door jou gebruikte pin. Plaats het script in de folder /home/pi/domoticz/scripts/.

 

Meterstand

De meterstand wordt bijgehouden in het bestand meterstand.txt. Hierdoor blijft de meterstand behouden bij een herstart van de Raspberry Pi (zonder dit bestand zou de meterstand telkens op 0 springen). Mocht de meterstand in Domoticz een keer, om wat voor reden dan ook, niet meer juist zijn dan kun je het bestand meterstand.txt aanpassen naar de juiste waarde. Bij de eerstvolgende update van de sensor is dit in Domoticz zichtbaar.

 

Crontab

Om het script automatisch te laten draaien gaan we een cronjob aanmaken in de crontab. Open de crontab met onderstaand commando:

sudo crontab -e

Nu de crontab van de root-user geopend is voeg je onderstaande regel toen:

@reboot /usr/bin/python /home/pi/domoticz/scripts/watermeter.py >/var/log/cronlog.log 2>&1

Sluit de crontab met “CTRL X” en bevestig dat je de wijziging wilt opslaan. Vanaf nu wordt het script automatisch na iedere reboot gestart. Om te controleren of het script daadwerkelijk gestart is kun je onderstaand commando ingeven:

grep cron /var/log/syslog

In het overzicht wat je te zien krijgt moet de regel staan die je toegevoegd hebt aan de crontab. Mocht dat niet het geval zijn, dan kun je het script eventueel handmatig start, om te zien of het goed draait:

sudo python /home/pi/domoticz/scripts/watermeter.py

 

Vanaf nu kun je het waterverbruik in Domoticz monitoren!

 

Bron: pgangorp, domoticz forum

13 gedachten over “Watermeter uitlezen in Domoticz met een Python script

  • 27 mei 2018 om 18:00
    Permalink

    Hoi,

    wat een fijne beschrijving, heb de boel aan elkaar geklust en het draait gelijk!
    Ik heb alleen 1 vraag, ik heb momenteel zowel op de dag teller als op de totaal teller mijn totale verbuiks staan.
    De meter staat b.v. op: 990.555 liter, dus dat heb ik ingevuld bij counter in de .py file.
    Als ik nu in het dashboard kijk staat er bij het totaal en het dag verbruik hetzelfde getal, en dat staat ook in het txt file.
    Als ik in de log kijk schrijft hij netjes per uur het aantal liters, en dat klopt ook.
    Moet ik gewoon 24uur geduld hebben, of moet ik toch ergens nog iets anders invullen?
    Ik heb al vanalles geprobeerd met anders invullen, maar mis net de gouden tip nog….
    Alvast bedankt!

    Groeten, Sander

    Beantwoorden
  • 27 mei 2018 om 18:16
    Permalink

    Hoi Sander, vannacht na 0.00 uur zal het dag-verbruik weer goed staan.

    Beantwoorden
    • 27 mei 2018 om 19:25
      Permalink

      Hoi Joost,

      ik verwachte al zoiets toen ik er een poosje over zat te denken, mede omdat op uur dat ik heb hem goed gezet, er 990 kuub was verbruikt, aha, prima.
      Dan zal het morgen goed staan.
      Ik heb overigens een Cyntech breakout bordje met flat cable besteld, kan ik er nog eens wat bij knopen… 🙂 Dat werkt erg netjes. Keurig bordje, moet er alleen nog een kastje bij maken.
      Heb de benadering schakelaar besteld M12, 6-# volt voldoende range en werkte in 1 keer.
      Bedankt voor de heldere uitleg, ben handig genoeg, met wat hulp snap ik code en wat het doet maar zelf schrijven is tijdrovend, en eigenlijk nog niet te doen.

      Beantwoorden
  • 30 juli 2018 om 21:36
    Permalink

    Kun je de kabel ook verlengen naar bijvoorbeeld 7-8meter of moet deze tussendoor versterkt worden?

    Beantwoorden
  • 22 augustus 2018 om 00:44
    Permalink

    Hoe of waar vul je het eerste JSON-commando in?

    Ben helemaal niet bekend met de raspberry pi, maar gebruik PUTTY om deze te benaderen.

    Beantwoorden
  • 6 september 2018 om 16:47
    Permalink

    Hi, ik ben geen python specialist maar heb met “2to3” en een paar andere kleine aanpassingen dit werkend gekregen! 🙂

    Alleen zit met de waarde die de sensor aangeeft in Domoticz. Als ik 1 liter verbruik, spingt de sensor 10 liter omhoog. Hij zit er dus een factor 10 naast. Ik heb de sensor exact aangemaakt volgens jouw JSON.

    Enig idee wat dat zou kunnen zijn?

    Beantwoorden
  • 13 september 2018 om 19:39
    Permalink

    Hi Joost, Super dit Python script. Werkt perfect en ook na reboot van de Pi.
    In de “schakelaars” Tab goed terug te zien.
    Maar mijn layout is op het dashboard als plattegrond voor alle verdiepingen en tuin en schuur.
    Aangezien dit een “overige” sensor is en in apparaten als een “Unknown?” wordt weer gegeven kan ik hem niet toevoegen.
    Heb jij een suggestie?

    Thanks, Ray

    Beantwoorden
  • 21 september 2018 om 18:03
    Permalink

    Goede avond,

    Bij het invoeren van het eerste JSON-commando krijg ik de volgende melding op mijn scherm.
    ‘401 Unauthorized’ Een andere browser gaf de zelfde melding. Enig idee wat er fout gaat en wat er aan gepast zou kunnen worden?

    Bvd. Niek

    Beantwoorden
  • 8 november 2018 om 21:51
    Permalink

    Hi Joost,
    Ik ben zeker niet goed in python maar ik krijg steeds dezelfde foutmelding:
    File “/home/pi/Domoticz/scripts/watermeter.py”, line 61
    print “JSON call = “+ str(url1)
    ^
    SyntaxError: Invalid syntax

    maar ik weet niet hoe ik dit moet oplossen enig idee wat ik zou kunnen doen?
    Met Vriendelijke Groet,
    Leon

    Beantwoorden
    • 11 november 2018 om 23:39
      Permalink

      Hallo Peter, in het script hoeft dan niets gewijzigd te worden.
      Bij Setup > Settings > Local Networks moet je wel even de juiste ip-range zetten. Ik heb deze range erin gezet:

      192.168.2.*;127.0.0.*;10.8.0.*

      Dit betreft de LAN, Local en VPN range.

      Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *