hallo, ich habe ein python script auf einem Raspberrypi Laufen, mit einer Domotica sotware auf dem pi,
das script macht eigentlich nicht anderes als einen GPIO event überwachen, (ein NPN sensor auf dem Wasserzähler)
fuktioniert echt gut, und ich habe keine Abweichungen was das zählen angeht.
nun habe ich mehr ein "kosmetisches" problem, wenn mann länger als 1 stunde kein wasserr nutzt (sprich kein event mehr vom npn sensor kam) sehe ich das device bei domoticz als offline, klar es geht wieder online sobald ich den Wasserhahn aufdrehe aber dann sind die statistiken etwas blöde
was ich will, ob es möglich wäre in das script ein "keep alive" event einzufügen, sprich wurde das wasser länger als 5 min nicht genutzt soll einfach wieder der gleiche zählerstand übertragen werden an domoticz.
hier mal das script
ZitatAlles anzeigen#!/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.102.57:8081"
#Domoticz IDX van de water sensor (RFXMeter)
idx = 16
#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 10
GPIO.setmode(GPIO.BOARD)
# Set GPIO 15 (Pin 10) als Input aditioneel als Pulldown-Weerstand aktiveren
GPIO.setup(10, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
#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(10, GPIO.FALLING, callback = Interrupt, bouncetime = 500)
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()
print "\nBye"
wichtig wäre eigentlich dieser teil
Zitat#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)
das wird ausgeführt sobald ein event auf dem GPIO 15 erfolgt.
nun möchte ich aber das genau das gleiche ausgefürht wird wenn 5 min lang kein event vom GPIO 15 kam. sprich einen zähler der 300 secunden abzählt ab den letzten GPIO event, und wenn zwischenzeitlich wieder ein event vom GPIO kam das der zähler dann wieder bei 300 anfängt und nicht einfach weiter die 300 sec runter rattert ...
ist das irgendwie machbar ??
ob das jetzt mit nem zusätzlichen script realisiert wird oder in dieses oben genannte script mit übernommen wird ist mir eigenltich egal,
wie gesagt is mehr ein Schönheitsfehler, weill nachts (wo kein wasser verbraucht wird) habe ich in den 24h statistiken auf einmal ein CUT... sieht einfach kacke aus und bei domoticz sowieso alle sensoren nach max 5 min abgelesen werden (damit diese eben alive bleiben) wollt ich das auch mit meinem "virtuellen" sensor der im nachhinein vom oben genannten script mit dem meterstand gefüttert wird.