Watermeter uitlezen in Domoticz met een LUA script

Een paar weken geleden heb je hier kunnen lezen hoe je de watermeter uit kunt lezen met een Python script. De watermeter kun je ook uitlezen met een LUA-script. Hoe? dat leggen we hieronder stap voor stap uit.

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!

Watermeter sensor

Eerst gaan de de Raspberry Pi updaten met onderstaande commando’s:

sudo apt-get update
sudo apt-get upgrade

Mocht je Domoticz nog niet geïnstalleerd hebben kijk dan hier.

Om ervoor te zorgen dat er liters i.p.v. m3 geregistreerd worden ga je naar SETUP > SETTINGS > METERS/COUNTERS en wijzig RFXMeter/Counter Dividers : Water naar 1000. Eventueel kun je “Sensor Timout” op 10000 zetten (dit voorkomt dat je time-outs en log-errors krijg indien je bv. op vakantie bent en gedurende langere tijd geen water verbruikt).

Maak een utility (watermeter) sensor aan in Domoticz door onderstaande regel in je browser in te geven:

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

Nadat je op Enter hebt gedrukt krijg je onderstaande te zien:

{
   "idx" : "328",
   "status" : "OK",
   "title" : "CreateVirtualSensor"
}

Onthou het idx-nummer goed, dat heb je bij de volgende stap nodig. Geef onderstaande regel in in je browser (wijzig wel het IP-adres, de poort en de IDX-nummer):

http://192.168.2.70:8080/json.htm?type=setused&idx=328_HERE&name=Waterverbruik&switchtype=2&used=true

Ga in Domoticz naar SETUP > MORE > USER VARIABLES en maak een gebruikersvariabele aan met de naam “WaterMeter” (let op de hoofdletters!), het type is “integer” en de waarde is de stand van de fysieke watermeter. Vul de waarde in liter is (171,91 m3 op de meter is dus 171910). Maak nog een gebruikersvariabele aan met de naam “WaterVerbruik” (let op de hoofdletters!), het type is “integer”en de waarde is “0”.

GPIO

De NPN-sensor heb ik op pin 21 (board 40) aangesloten, mocht je de sensor op een andere pin aangesloten hebben dan moet je daar rekening mee houden met onderstaande stappen. Open een SSH-verbinding met de Rasperrby Pi, bijvoorbeeld met PuTTY, en geef onderstaande commando’s in:

sudo -i
sudo apt-get install raspi-gpio
echo 21 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio21/direction
echo 0 > /sys/class/gpio/gpio21/active_low
echo both > /sys/class/gpio/gpio21/edge
raspi-gpio set 21 pd

Let op! Bovenstaande commando’s gaan verloren met een reboot van de Raspberry Pi. Later zullen we de code toevoegen aan het domoticz.sh bestand in /etc/init.d

Test de GPIO pulse met het commando:

sudo raspi-gpio get 21

Level=0 betekent dat er geen verbinding is, Level=1 betekent dat er wel verbinding is. Je kunt een schroevendraaier gebruiken om de NPN-sensor te testen (doe dit!).

Ga in Domoticz naar SETUP > HARDWARE en voeg te hardware “Generic sysfs GPIO” toe met de naam “GPIO”. In de log moet je het volgende terugvinden: “Sysfs GPIO: Startup - polling:no interrupts:yes debounce:50msec inputs:1 outputs:0“. Mocht je dit niet in je log terugvinden herhaal dan bovenstaande stappen.

Bij SETUP > DEVICES klik je op het groene pijltje om de sensor toe te voegen, geef deze sensor “GPIO Watermeter” als naam.

Ga nu in Domoticz naar de tab SWITCHES en wijzig de GPIO Watermeter. Het switchtype moet “On/Off” worden en verander het icoontje naar “Water”.

Go to SETUP > MORE > EVENTS en maak een niet LUA-script aan, triggered door DEVICE. Haal alle code weg en plak dit script erin. Uiteraard moet je iIDX = 328 wijzigen naar de IDX van jouw virtuele watersensor.

Maak het script actief en klik op save. Zodra je de kraan aanzet zal je zien dat het waterverbruik geregistreerd wordt. Nog wel één probleempje: het script denk dat je al het water dat je ooit gebruikt hebt vandáág gebruikt hebt. Dit kunnen we simpel oplossen. Wacht tenminste vijf minuten. Klik op “Log” bij je virtuele Waterverbruik device. Bij de grafiek van “Day” houd je de Shift-toets ingedrukt en klik je met de linkermuisknop op de grafiek. Er wordt nu gevraagd of je de waarde wilt verwijderen. Klik op “Ok”. Nu is wel de juiste meterstand geregistreerd, maar het dag-verbruik staat weer op 0 liter.

Om ervoor te zorgen dat na een reboot van de Raspberry Pi het uitlezen van de watermeter nog steeds werk gaan we een wijziging aanbrengen in het bestand domoticz.sh:

sudo nano /etc/init.d/domoticz.sh

Voeg helemaal onderaan het bestand (na “:”) onderstaande regels toe:

sudo sh -c 'echo 21 > /sys/class/gpio/export'
sudo sh -c 'echo in > /sys/class/gpio/gpio21/direction'
sudo sh -c 'echo 0 > /sys/class/gpio/gpio21/active_low'
sudo sh -c 'echo both > /sys/class/gpio/gpio21/edge'
sudo sh -c 'raspi-gpio set 21 pd'

De GPIO is nu altijd goed ingesteld na een reboot van de Raspberry Pi.

Vanaf nu kun je het waterverbruik in Domoticz monitoren!

32 gedachten over “Watermeter uitlezen in Domoticz met een LUA script

  • 14 juli 2018 om 14:47
    Permalink

    Moet er nog iets aangepast worden indien de raspberry niet dichtbij de watermeter staat?
    Afstand is zon 5-7meter in mijn geval en ik kan de raspberry niet verplaatsen.

    Alvast bedankt.

    Beantwoorden
  • 28 juli 2018 om 22:43
    Permalink

    Erg duidelijk uitgelegd allemaal, dankjewel!
    Ik ben nog maar net begonnen met de Raspbarry.
    En ik dacht ik kies voor het gemak een Cyble sensor (2 draads).
    Dan hoef ik niet iets zelf in elkaar te knutselen.
    Ik moet tenslotte nog veel leren
    Maar hoe sluit ik deze nu aan?
    Moet ik deze dan op de GRN aansluiten en PIN 40?

    Alvast bedankt voor de reaktie.

    Marchel

    Beantwoorden
  • 10 augustus 2018 om 20:24
    Permalink

    Dank voor je goede uitleg.

    Ik heb wellicht een paar kleine verbetering:

    -Plaats een zener diode 3v3 tussen de zwarte draad en je pi gpio. Er komt nu 5V op je gpio die gemaakt is voor 3,3V. Te koop bij Ali. 100 diodes voor een euro.
    -Voordat ik raspi-gpio commando’s kon uitvoeren moest ik raspi-gpio installeren met het volgende commando: sudo apt-get install raspi-gpio
    -Ik kan je script niet downloaden. Er is geen link: plak dit script erin

    Beantwoorden
    • 17 augustus 2018 om 17:13
      Permalink

      Geen script zelfde probleem hier…

      Ook weet niet hoe ik het laatste gedeelte de

      “sudo sh -c ‘echo 21 > /sys/class/gpio/export’
      sudo sh -c ‘echo in > /sys/class/gpio/gpio21/direction’
      sudo sh -c ‘echo 0 > /sys/class/gpio/gpio21/active_low’
      sudo sh -c ‘echo both > /sys/class/gpio/gpio21/edge’
      sudo sh -c ‘raspi-gpio set 21 pd’ ”

      opslaat

      Beantwoorden
  • 23 september 2018 om 14:24
    Permalink

    Ik krijg een error in mijn domoticz log:
    2018-09-23 14:23:20.598 Error: EventSystem: in Watermeter: [string “commandArray = {}…”]:18: attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value)

    Wat kan hier het probleem zijn?

    Beantwoorden
    • 6 oktober 2018 om 08:32
      Permalink

      Dag Remko,
      heb jij het probleem kunnen oplossen?
      Ik heb namelijk juist dezelfde loggings fout…

      Groeten,
      Peter

      Beantwoorden
  • 29 september 2018 om 13:26
    Permalink

    Via Setup > More options > User variables even de juiste variable value ingeven, dan zou de foutmelding weg moeten zijn.

    Beantwoorden
  • 6 oktober 2018 om 01:30
    Permalink

    Ik krijg net zoals Remko een error melding in de logging bij Domoticz:
    EventSystem: in watermeter: [string “–…”]:43: attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value).
    Variable is integer en waarde is 0.
    Toch blijf ik deze fout hebben.
    Iemand een idee????

    Beantwoorden
    • 9 oktober 2018 om 11:50
      Permalink

      Ik heb precies het zelfde probleem.
      attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value)

      Beantwoorden
  • 9 oktober 2018 om 11:57
    Permalink

    ik krijg precies de zelfde melding.
    2018-10-09 11:56:34.712 Error: EventSystem: in watermeter: [string “commandArray = {}…”]:18: attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value)

    Beantwoorden
  • 9 oktober 2018 om 12:37
    Permalink

    Even mijn reactie van 29 september bekijken, dat lost het probleem op.

    Beantwoorden
  • 10 oktober 2018 om 12:00
    Permalink

    Beste Joost,
    zelfde foutmelding. Een waarde invullen bij user variabele WaterMeter lost het probleem niet op. Het lijkt ook wel alsof die waarde door het script meteen weer op 0 wordt gezet. Ik krijg er de vinger nog niet achter. Ik gebruik Domoticz V4.9700.

    Beantwoorden
  • 10 oktober 2018 om 12:42
    Permalink

    Ik gebruik zelf 4.10051 beta. Als ik de waarde invul is de foutmelding direct weg weg, maar denk niet dat het aan de domoticz versie ligt. Mogelijk is er iets anders nog niet helemaal goed bij jou.

    Beantwoorden
  • 10 oktober 2018 om 17:42
    Permalink

    IK kom er nog steeds niet uit, maar ik vind wel wat eigenaardigheden.
    Bij het stukje hierboven GPIO staat bij de commando’s een paar keer gpio21 en gpio22. Dat lijkt niet te kloppen.
    In het script staat 2x Waterverbruik (regel 15 en 48), moet dat niet Watermeter zijn?
    De punten hierboven lossen de foutmeldingen niet op overigens.

    Verder heb ik Jessie als besturingssysteem. Zou dat wat uit kunnen maken?

    Beantwoorden
  • 10 oktober 2018 om 19:43
    Permalink

    Joost bedankt voor je snelle reactie.
    Helaas je oplossing van 29 september biedt niet de oplossing

    Beantwoorden
  • 10 oktober 2018 om 21:33
    Permalink

    Hier ook steeds dezelfde problemen. Error: EventSystem: in Watermeter: [string “commandArray = {}…”]:18: attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value)

    Waterverbruik (regel 15 en 48), moet inderdaad Watermeter zijn.

    Als ik zelf de variabele Watermeter op 1 zet dan wordt deze automatisch weer terug gezet naar 0.
    De on/off switch ziet netjes de pulsjes. De RFXmeter blijft echter op 0 staan.

    Beantwoorden
  • 11 oktober 2018 om 20:54
    Permalink

    Waarvoor wordt dan de variabele WaterMeter aangemaakt in Domoticz? Deze wordt nergens meer in het script gebruikt. Of zit ik nu verkeerd te denken? 🙂

    Beantwoorden
  • 18 oktober 2018 om 20:55
    Permalink

    Hoi,

    Ik heb de stappen gevolgd, maar ik loop tegen het volgende aan:
    Bij Setup > Devices op het groene pijltje geklikt, en de naam GPIO Watermeter gegeven.
    Er wordt dan echter niets aangemaakt in het tabblad ‘Switches’. deze switch lijkt me wel essentieel omdat dit de puls is van de sensor, die ook in het script wordt gebruikt om de waarde op te hogen?
    Het gaat om dit stukje uit de uitleg:

    Ga nu in Domoticz naar de tab SWITCHES en wijzig de GPIO Watermeter. Het switchtype moet “On/Off” worden en verander het icoontje naar “Water”.

    Wie kan me hiermee helpen? bedankt!

    Beantwoorden
  • 20 oktober 2018 om 15:23
    Permalink

    Ik zit nog altijd met hetzelfde probleem (ook met het python script krijg ik geen goeie data door).
    Wat mij opviel bij het volgen van dit LUA-stappenplan:
    Bij het command ‘ echo 21 > /sys/class/gpio/export’ krijg ik een melding:
    ‘-bash: echo: write error: Device or resource busy’ . Lijkt me niet goed.
    Voor de rest valt mij op dat als de GPIO pulse test de standaard waarde level 1 (=verbinding) is en als ik met mijn schroevendraaier langs de sensor ga (en het lichtje erbovenop oplicht) de value verandert in o (geen verbinding). Gevoelsmatig lijkt mij dit niet te kloppen. Of juist wel?

    Beantwoorden
  • 21 oktober 2018 om 12:59
    Permalink

    Het klopt dat de sensor een 0 (off) weer geeft wanneer hij metaal detecteert. Het is namelijk een NPN sensor. Dus off bij detectie.

    Doe eens sudo voor het commando? Waarschijnlijk werkt hij dan wel.

    Verder krijg ik ook het LUA script en het Pyton script niet werkend. Nog steeds de foutmelding: global ‘sWaterUsage’ (a nil value)

    Beantwoorden
  • 26 oktober 2018 om 09:51
    Permalink

    ook hier de melding Error: EventSystem: in Waterverbruik: [string “commandArray = {} …”]:18: attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value)

    Het updaten van de variable lost het probleem inderdaad op, voor heel even. Daarna geeft ie gewoon weer de melding. Zolang die foutmelding in de log staat wordt de Waterverbruik ook niet bijgewerkt.

    Beantwoorden
  • 8 november 2018 om 18:42
    Permalink

    Dank je voor de duidelijke uitleg, het script werkt bij mij prima.

    Alleen zou ik mijn waterverbruik graag door willen sturen naar influxdb, helaas gaat dat niet lukken met het updatedevice commando weet jij hoe het script aangepast kan worden zodat de waarden via een JSON commando in domoticz terecht komen?

    Beantwoorden
  • 17 november 2018 om 10:35
    Permalink

    Sommige mensen kregen onderstaande melding:

    Error: EventSystem: in Waterverbruik: [string “commandArray = {} …”]:18: attempt to perform arithmetic on global ‘sWaterUsage’ (a nil value)

    Het script (en handleiding) is nu enigszins aangepast, waardoor deze error niet meer voor zal komen. Voor degenen die de foutmelding kregen: maak een gebruikersvariabele aan met de naam “WaterVerbruik” (let op de hoofdletters!), het type is “integer”en de waarde is “0” en maak gebruik van het nieuwe script (link vind je in het artikel).

    Beantwoorden
    • 19 november 2018 om 11:54
      Permalink

      heb de wijzigingen doorgevoerd en zojuist geplakt. Zodra er thuis water gepakt wordt, zal ik zien of het heeft gewerkt 🙂

      Beantwoorden
    • 19 november 2018 om 12:13
      Permalink

      jeej!!! 8 liter verbruikt. fantastisch! het werkt. dank je wel voor deze aanpassing. nu ff goed doortesten.

      Beantwoorden
  • 19 november 2018 om 21:29
    Permalink

    Hoi Joost,

    Op een of andere manier zit ik in een loop bij het downloaden van je script. Ik pak de RAR uit en daar zit een ZIP in die weer een RAR bevat en ga zo maar door.

    Zou je het script mij kunnen toe mailen?

    Beantwoorden
    • 20 november 2018 om 19:42
      Permalink

      Hoi Toppe,

      Het script is gewoon te downloaden en uit te pakken. Mocht het niet lukken probeer dan eens een andere browser (bv. Chrome) of een andere programma om het uit te pakken (bv. WinRar).

      Beantwoorden
  • 20 november 2018 om 09:13
    Permalink

    Beste Joost,

    Met het nieuwe lua script werkt het wel.
    Superbedankt.
    En ga vooral door met je tutorials.

    Beantwoorden
  • 20 november 2018 om 19:16
    Permalink

    Top het werkt!

    Er moeten dus 2 variabelen aangemaakt worden?
    1: WaterMeter met de huidige stand van de watermeter
    2: WaterVerbruik

    Dat staat boven in de tekst nog niet.
    Heel erg bedankt!

    Beantwoorden
    • 20 november 2018 om 19:44
      Permalink

      Hoi Jo,

      Ja, je moet inderdaad 2 variabelen aanmaken, zoals in het artikel vermeld staat:

      “Ga in Domoticz naar SETUP > MORE > USER VARIABLES en maak een gebruikersvariabele aan met de naam “WaterMeter” (let op de hoofdletters!), het type is “integer” en de waarde is de stand van de fysieke watermeter. Vul de waarde in liter is (171,91 m3 op de meter is dus 171910). Maak nog een gebruikersvariabele aan met de naam “WaterVerbruik” (let op de hoofdletters!), het type is “integer”en de waarde is “0”.”

      Beantwoorden

Geef een reactie

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