Watermeter toevoegen aan Domoticz

De meterstanden van stroom en gas kunnen we eenvoudig met Domoticz uitlezen. Hoe mooi zou het zijn als dit ook met de watermeter zou kunnen. Er zijn dure aanvullingen voor de watermeter te bestellen die de pulsen uitlezen, maar met een simpele inductieve sensor kom je een heel eind.

Hoe werkt het
Op de watermeter zit een schijfje dat bij iedere liter water éénmaal rond draait. Op dat schijfje zit een half maantje van metaal. De inductieve sensor wordt boven het draaischijfje gemonteerd 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 (type: LJ12A3-4-Z/BX-5V)

Inductieve NPN sensor
De inductieve sensor, hierna te noemen als NPN-sensor, heeft 3 aansluitdraden (bruin/zwart/blauw). Deze moeten met de GPIO header pins van de Raspberry Pi verbonden worden. Voor deze montage kun je het beste Dupont female connectoren aan de 3 draden monteren/solderen.

Dupont female header pins

Sensor aansluiten op GPIO header pinnen
– De blauwe draad wordt op een GND-pin (bv. pin 39) aangesloten,
– De zwarte draad op een GPIO (bv. GPIO 21 = pin 40) en
– De bruine draad op een 5V-pin (pin 2).

Aansluittabel

De NPN-sensor (type: LJ12A3-4-Z/BX-5V) heeft een detectie afstand van 4mm en werkt op een spanning van 6 – 36 Volt. Op de 5 Volt van de Raspberry Pi blijkt de sensor ook prima te werken.

Afstand te groot
Mocht het met de bovengenoemde sensor niet lukken, de NPN-sensor is ook een beschikbaar met een 8mm detectie afstand. De specificaties van de LJ18A3-8-Z/BX-5V sensor zijn hetzelfde als de hierboven beschreven sensor.

Pull-down weerstand
De sensor geeft na het detecteren een 5V signaal af. Er zal een pull-down weerstand (10K) in het circuit opgenomen moeten worden om de stroom (5V/10.000Ω=0.5mA) te minimaliseren. Daarmee staat er wel 5V (HOOG) spanning, maar nauwelijks stroom op de GPIO poort.

Deze schakeling werkt prima om tijdelijk de sensor te testen, maar wordt afgeraden om deze permanent te gebruiken. Er is een kans dat de GPIO poort op den duur beschadigd raakt.

Sensor waarbij 5V via een pull-down weerstand op GPIO 21 is aangesloten

Level shifter (voorkeur!)
Zoals gezegd geeft de sensor na het detecteren een 5V signaal af. Zoals hierboven aangegeven kan deze in principe niet rechtstreeks op de GPIO poort van de Raspberry aangesloten worden omdat de kans op beschadiging groot is.

De GPIO-poort dient een HOOG logisch signaal van maximaal 3.3V te ontvangen. De beste manier om de sensor op de GPIO pin aan te sluiten is het gebruik van een level-shifter waarbij het logische 5V niveau naar 3.3V wordt omgezet. Voor de volledigheid wordt er nog een 10KΩ pull-down weerstand in het circuit opgenomen.

Klik hier voor meer informatie over de level shifter.

Sensor aangesloten via een level shifter en een pull-down weerstand

Sensortest 1- hardware
Zodra de NPN-sensor op de Raspberry Pi aangesloten is houd je het blauwe uiteinde van de sensor tegen een stukje metaal aan. Als de sensor qua voeding goed is aangesloten zal de led bovenop de sensor oplichten.

Vervolgens houd je de sensor boven het draaischijfje van de watermeter, bij het halve metalen maantje. Ook nu zou de led op de sensor moeten oplichten zodra het metalen gedeelte van het draaischijfje exact onder de sensor zit.

Mocht de sensor op de watermeter niet reageren, kan het zijn dat het glas van de watermeter te dik is om de draaischijf te detecteren. Dit komt voornamelijk voor bij de wat oude watermeters. Het alternatief is om een sensor met een grotere afstandsdetectie te nemen. Ook kun je het blauwe uiteinde van de sensor iets inkorten door wat plastic weg te schuren als het glas iets te dik blijkt (praktische tip van bouwers).

Sensortest 2 – software
Om er zeker van te zijn dat het signaal van de sensor via GPIO-pin door de software gedetecteerd wordt, kun je het volgende programma gebruiken. Aangezien dit een autonoom testprogramma is, hoef je hiervoor geen Domoticz geïnstalleerd te hebben.

Nadat je het unzipt hebt, start je het programma (Python2) met:

python gpioStatus.py

In rust is het signaal HOOG. Bij detectie van metaal wordt het signaal LAAG.

Sensor plaatsen
Zodra de NPN sensor het draaischijfje goed detecteert is het tijd om de NPN-sensor definitief op de watermeter de plaatsen. Belangrijk is dat de sensor recht boven het metalen draaischijf geplaatst wordt en zich zo dicht mogelijk boven het schijfje bevindt. Hieronder zie je mijn montage met een bevestigingsbeugel die je zelf eenvoudig kan maken. Het voordeel is dat dit een zgn. non-destructieve (zonder de meter aan te tasten) manier is om de sensor te plaatsen. Misschien is deze montage niet de charmantste, maar het heeft wel mijn voorkeur.

Goede manier om de sensor boven de watermeter te plaatsen

Sensor in Domoticz
Je kunt de sensor in Domoticz opnemen en zien hoeveel water je dagelijks verbruikt. Hiervoor moet je in Domoticz een RFXMeter sensor aanmaken. Dit doe je door middel van een JSON (Java-script). Geef de volgende regel in de adresbalk van je browser op een apparaat dat in hetzelfde netwerk zit als de Raspberry Pi-Domoticz server:

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

Uiteraard moet je het bovenstaande IP adres en het poort nummer aanpassen naar de waarde van jouw Raspberry Pi zoals je deze vanuit de Domoticz installatie teruggekoppeld hebt gekregen. Het is daarom handig om de Pi een vast IP-adres te geven.

Idx 29 wordt gebruikt om een virtuele sensor te creëren. Als een niet-bestaande hardware-IDX wordt gebruikt, wordt het gemaakte apparaat grijs weergegeven in de gebruikersinterface. Op zich niet erg, het apparaat zal het prima doen. Klik hier om te zien hoe je het apparaat wit weergeeft. Het wordt aangeraden om dit na deze tutorial te doen.

Sensortype 113 is het sensorid voor de RFXMeter.

Als het goed is krijg je nu een melding in de Domoticz 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. Mijn sensor heeft idx 15 gekregen, deze moet je in de volgende link invullen. Dit doe je door in de link achter idx= de verkregen waarde in te vullen. Zoals je ziet staat deze nu op 15. In de opdrachtregel wordt aan de RFXMeter switchtype=2 toegevoegd, ofwel wordt daarmee sensortype ‘Water‘ toegekend.

http://192.168.0.14:8080/json.htm?type=setused&idx=15&name=RFXMeter&switchtype=2&used=true

Als het allemaal goed gegaan is krijg je in Domoticz onderstaande sensor (uiteraard met 0 liter) te zien in het Utility-tabblad.

Naslagwerk
Wil je nog eens nalezen hoe een virtuele sensor in domoticz aangemaakt wordt en wat de waarden betekenen, kijk dan hier.

Python script
Met het Python script ‘watermeter.py‘ lees je de GPIO (21) uit en wordt de waarde bijgeschreven aan meterstand_water.txt. Vervolgens wordt de opgeslagen totaalwaarde via JSON (java) aan Domoticz doorgezet.

Plaats het script in de folder /home/pi/domoticz/scripts/.

Je huidige stand van de watermeter kun je in het script op regel 9 invullen bij “Counter”. Op regel 12 vul je het IP adres en het poort nummer van de 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.

Meterstand
De meterstand wordt bijgehouden in het bestand meterstand_water.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_water.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, maar allereerst moet het script de juiste permissies hiervoor hebben. Ga naar de map scripts waarin het script watermeter.py staat en geef je het commando:

chmod 777 watermeter.py

Open nu 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. Reboot de Raspberry Pi met:

sudo reboot

Draait het script?
Dit is het eerste dat je moet controleren als er geen verbruik in het Domoticz venster zichtbaar is, maar de LED op de sensor wel pulst . 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 script zijn werk doet (tellerstand ophogen als sensor activeert en puls opslaan in meterstand_water.txt bestand):

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

Verbruik wat water door bijvoorbeeld het toilet door te trekken of de waterkraan te openen, je zult dan een terugkoppeling van het programma zien met de nieuwe meterstand.

Vanaf nu kun je het waterverbruik in Domoticz monitoren!

Meetwaarden configureren
Afhankelijk van de meting kan er een factorcorrectie nodig zijn omdat er een verkeerde waarde getoond wordt. Klik dan in Domotics op het waterdevice en aanpassen. Vul hier de juiste waarde in bij Meter deler. Zo nodig kun je ook een Meter Offset meegegeven zoals de stand van de watermeter. Ik heb het device Water genoemd.

~2% afwijking
De dagelijkse waarden geven een goed beeld van het waterverbruik. De afwijking van de Domoticz waarde in relatie tot de watermeter bedraagt zo’n 2%. Deze kun je eenvoudig meten door op het begin en eind van de dag (00:00 uur) de waterstand op de mechanische meter af te lezen en deze te vergelijken met de Domoticz waarde. De 2% afwijking kun je in het python script ‘watermeter.py‘ verwerken door de variabele Counter met 0.98 te vermenigvuldigen om een nog nauwkeurige waarde in Domoticz te krijgen.

De waterstanden. Je kunt goed zien wanneer de tuin besproeid is en de (vaat)was gedraaid heeft.

Domoticz de-installeren
Wil je Domoticz de-installeren, gebruik dan: sudo rm -r /home/pi/domoticz

Watersensor wordt grijs weergegeven
De sensor doet het prima, maar het viel me direct op dat na het aanmaken van de watermeter m.b.v. de JSON commando’s de sensor grijsachtig wordt weergegeven. Hoe je dit oplost wordt hier beschreven.

Watersensor label wordt donker weergegeven

Beugel voor sensor
Voor de volledigheid beschrijf ik hier hoe je een passende beugel voor de sensor maakt.

Have A Nice Day!

5 Reacties

  1. Als ik de opdracht
    sudo python /home/pi/domoticz/scripts/watermeter.py
    Invoer dan gebeurt er verder niets mijn raspberry komt niet meer bij de beginstand
    Ik heb het idee dat er wat niet goed is maar ik kom hier niet verder mee
    Wat zou er mis kunnen zijn

    • Dag Koen, laten we het stapsgewijs natrekken. Ik ga er even vanuit dat je dezelfde sensor hebt als ik in de tutorial gebruik.
      1. Zet 5V (blauw = GND, bruin is +5V) op de sensor. Breng de blauwe voorkant in aanraking met metaal. Licht dan de led op de sensor op?
      2. De zwarte draad van de sensor moet op pin 40 (GPIO 21) van de Raspberry Pi aangesloten worden. Je kunt een andere pin gebruiken, pas dan wel even het script hiervoor aan. Vergeet het bestand niet de juiste permissies te geven met het commando: chmod 777 watermeter.py
      3. Hoe heb je de zwarte draad met de Raspberry Pi verbonden? (rechtstreeks/met pull-up weerstand/met level shifter). Rechtstreeks wordt afgeraden, maar is om te testen prima.
      4. Je kunt een led (met serieweerstand ~330 ohm) met de zwarte draad verbinden om te testen of deze 5V afgeeft als er metaal gedetecteerd wordt.
      5. Ga naar de map /home/pi/domoticz/scripts/ en start het script watermeter.py op. Pas wel eerst de variabelen aan in dit script die je volgens de tutorial had moeten doen.
      6. Het script maakt een bestand aan waarin de tellerstand opgeslagen wordt. Wil je bij 0 (nul) beginnen, gooi dan het bestand weg. Het script maakt een nieuwe aan. Later kun je de actuele stand van je watermeter in Domotics (Apparaat aanpassen – Meter Offset) opgeven. Deze waarde zet je in principe niet in het bestand dat het script aanmaakt, deze is alleen voor de sensor.
      Na het opstarten van het script moet nu de teller zichtbaar zijn als je metaal voor de sensor houdt. Mocht niet het geval zijn of heb je nog vragen, laat het dan weten.

      • Ik heb de levelshifter ertussen zitten het ledje gaat aan als ik er metaal voor hou.
        Als ik het prog watermeter.py wil starten dan blijft hij staan en krijg ik de prompt van de raspberry niet terug en moet ik de terminal afsluiten.
        als ik watermeter.py in de editor heb staan en ik doe run dan krijg ik een foutmelding op regel 61

1 Trackback / Pingback

  1. Domoticz – Grijs label watersensor – Picademie.nl

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*