Je heb alleen een sensor van b.v. Aliexpress of eBay nodig van rond de $2,00 een beugeltje en een paar avonden om het werkend te krijgen . En natuurlijk een watermeter met een klein draaiend metertje met een ijzeren plaatje.
zelf heb ik deze sensor van alie gebruikt
KSOL DC6-36V 300mA NPN GEEN 3-wire 4mm Tubular Inductieve Proximity Sensor Switch LJ12A3-4-Z-BX ===================================
Sensor aansluiten
===================================
Sensor met een beugeltje aan de watermeter bevestigen en aansluiten op de raspberry pi:
Blauw = GND (b.v. pin 39)
Bruin = 5V (b.v. pin 2 of 4)
Zwart = GPIO (b.v. GPIO 21 / Pin 40)
Het is een 6-36 volt sensor maar werkt bij mij perfect op 5v van de raspberry.
=================================
Domoticz Teller aanmaken
=================================
Ik heb niet kunnen vinden hoe je dit via Domoticz web kan doen. Het lukte mij alleen om via json de RFXmeter aan te maken.
1 = maak sensor =>> make hardware "Dummy (Does nothing, use for virtual switches only)"
2 = lees IDX =>> read idx of newly created dummy hardware
3 = maak RFXMeter aan met juiste hardware idx =>> in example below 29 was used but you will probably have another idx
Gebruik je eigen IP en poort nummer.
Let op dat je in domoticz settings, de deler van water op 1000 zet => RFXMeter/Meter delers water: 1000 1
Code: Select all
192.168.1.123:8080/json.htm?type=createvirtualsensor&idx=29&sensorname=Water&sensortype=113
"status" : "OK",
"title" : "CreateVirtualSensor"
}
2
Code: Select all
192.168.1.123:8080/json.htm?type=devices&filter=all&used=true&order=Name
"AddjMulti" : 1.0,
.....
"idx" : "321"
}
3
De IDX invullen in de JSON call
Code: Select all
192.168.1.123:8080/json.htm?type=setused&idx=321&name=RFXMeter&switchtype=2&used=true
"status" : "OK",
"title" : "SetUsed"
}
[/code]
====================================
Script watermeter.py
====================================
Met dit python script lees je de GPIO uit en schrijf je elke liter waterverbruik via JSON naar domoticz.
Plaats script in /home/pi/domoticz/scripts/
Vul watermeterstand in bij "Counter"
Ook de GPIO en de IDX met juiste waarde vullen.
Code: Select all
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import urllib2
import os
#Watermeter stand (wordt alleen initeel gebruikt als er geen bestand meterstand.txt is)
global Counter
Counter = 1154651
#Domoticz URL
domoticz_url = "http://192.168.1.123:8080"
#Domoticz IDX van de water sensor (RFXMeter)
idx = 321
#Open meterstand.txt file en lees meterstand
#Als meterstand.txt niet aanwezig is maakt script bestand aan en vult de meterstand
fn = "/home/pi/domoticz/scripts/meterstand.txt"
if os.path.exists(fn):
f = file(fn, "r+")
f = open(fn)
inhoud = f.readline()
a,b,c = inhoud.split()
Counter = int(c)
else:
f = open(fn, "w")
f.write( 'meterstand = ' + repr(Counter))
f.close()
#Board is pin nr, BMC is GPIO nr
#Read output from water meter op pin 40
GPIO.setmode(GPIO.BOARD)
# Set GPIO 21 (Pin 40) als Input aditioneel als Pullup-Weerstand aktiveren
GPIO.setup(40, GPIO.IN, pull_up_down = GPIO.PUD_UP)
#Functie callback
#Dit is de functie die aangeroepen wordt in de interrupt
def Interrupt(channel):
#Teller elke interupt uitlezen en met 1 liter verhogen
f = file(fn, "r+")
f = open(fn)
inhoud = f.readline()
a,b,c = inhoud.split()
Counter = int(c)
Counter = Counter + 1
f.close()
#Schrijf meterstand naar bestand
f = open( fn, 'w')
f.write( 'meterstand = ' + repr(Counter))
f.close()
#Send counter to domoticz JSON
url1 = domoticz_url+'/json.htm?type=command¶m=udevice&idx='+str(idx)+'&svalue='+str(Counter)
req1 = urllib2.Request(url1)
response1 = urllib2.urlopen(req1)
#Voor debug => print voorbeeld van de JSON aanroep en/of de counter
#print "JSON call = "+ str(url1)
#print "Watermeter Counter = " + str(Counter)
#Interrupt-Event toevoegen, bij een NPN off geeft sensor een 1 en en bij detectie een 0
#Bij detectie (LED on) een 0 daarom check dalende interrupt.
GPIO.add_event_detect(40, GPIO.FALLING, callback = Interrupt, bouncetime = 350)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"
=======================================
Meterstand.txt
=======================================
De meterstand wordt bijgehouden in dit bestand. Anders zou bij elke herstart van de raspberry de meter weer op nul starten. Als de meterstand in domoticz niet meer klopt kan het bestand meterstand.txt aangepast worden met de juiste meterstand. Bij de eerst volgende interrupt van de sensor zal de juiste meterstand aan domoticz doorgegeven worden.
=======================================
Crontab
=======================================
Crontab job aanmaken op raspberry (in de sudo crontab anders werkt het niet)
om bij het starten van de raspberry het Python script automatische te starten.
Code: Select all
sudo crontab -e
Code: Select all
@reboot /usr/bin/python /home/pi/domoticz/scripts/watermeter.py >/var/log/cronlog.log 2>&1
Code: Select all
sudo python /home/pi/domoticz/scripts/watermeter.py
Check of de cron het python script gestart heeft
=======================================
Code: Select all
grep cron /var/log/syslog
update na 1 maand
=======================================
Per dag registreer ik ongeveer 3 tot 7 liter te veel waterverbruik. Mijn meterstand in Domoticz is rond de 130 liter hoger dan mijn watermeter. Heb nog geen tijd gehad om te kijken hoe dit kan of hoe ik dit kan voorkomen.