Hoi allemaal
Ik ben bezig met het uitlezen van mijn watermeter.
Hiervoor heb ik het scribt watermeter.py wat aangepast.
Nu wil ik de tijden van laag hoog en hoog laag van elkaar aftrekken zodat ik te zien krijg hoelang de puls laag en de puls hoog is.
Callback function called!
Wachten op positive puls van water meter sensor
GPIO input = 0 op 2018-03-24 00:41:33.892119
Callback function called!
GPIO input = 1 op 2018-03-24 00:41:36.862196
Watermeter Counter = 474330
Callback function called!
Wachten op positive puls van water meter sensor
GPIO input = 0 op 2018-03-24 00:41:40.398372
Callback function called!
GPIO input = 1 op 2018-03-24 00:41:43.334820
Watermeter Counter = 474331
Callback function called!
GPIO input = 1 op 2018-03-24 00:41:44.718261
Watermeter Counter = 474332
Callback function called!
dit is mijn watermeter.py
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import datetime
import urllib2
import os
from datetime import datetime
i = datetime.now()
print str(i)
#Watermeter stand (wordt alleen initeel gebruikt als er geen bestand meterstand_water.txt is)
global Counter
Counter = 27273
#Domoticz URL
domoticz_url = "
http://192.168.0.187:8080"
#Domoticz IDX van de water sensor (RFXMeter)
idx = 1
#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_water.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 19
GPIO.setmode(GPIO.BOARD)
# Set GPIO 10 (Pin 19) als Input aditioneel als Pullup-Weerstand aktiveren
GPIO.setup(19, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
#Functie callback
#Dit is de functie die aangeroepen wordt in de interrupt
def Interrupt(channel):
print('Callback function called!')
time.sleep(0.03) # need to filter out the false positive of some power fluctuation
if GPIO.input(19) == 0:
print('Wachten op positive puls van water meter sensor')
laag = datetime.now()
print 'GPIO input =',GPIO.input(19),'op',str(laag) # Voor debug kijk naar waarde van de gpio poort
return
# Voor debug kijk naar waarde van de gpio poort
hoog = datetime.now()
print 'GPIO input =',GPIO.input(19),'op',str(hoog)
#Teller elke interrupt uitlezen en met 1 liter verhogen (deler watermeter op 1000 zetten)
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, sensor geeft een 0 en en bij detectie een 1
#Bij detectie een 1 daarom check stijgende interrupt.
#bouncetime=negeer detectie in miliseconde.
GPIO.add_event_detect(19, GPIO.RISING, callback = Interrupt, bouncetime = 200)
try:
while True:
time.sleep(0.2)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"
Sorry voor de verkeerde schrijfwijze van mijn uitleg.
Ben vandaag pas begonnen met forum.
mvg Frans