-
Notifications
You must be signed in to change notification settings - Fork 1
/
pirmanager.py
52 lines (37 loc) · 1.46 KB
/
pirmanager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#! /usr/bin/python3
from config import *
from utils import *
import RPi.GPIO as GPIO
import time
"""
Author : Quentin Bouvet
"""
class PIRManager :
def __init__(self, cyclePeriod) :
#try :
# GPIO.cleanup()
# time.sleep(0.5)
#except :
# print("")
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PIR_pin, GPIO.IN)
self.callbacks = []
self.cyclePeriod = int(cyclePeriod);
self.lastCallbackTimestamp = int(time.perf_counter());
GPIO.add_event_detect(PIR_pin, GPIO.RISING, callback=self.global_callback)
debug("PIR GPIO : init lastCallbackTimestamp to "+str(self.lastCallbackTimestamp))
debug("PIR GPIO : init cyclePeriod to "+str(self.cyclePeriod))
def add_callback(self, callbackFunction) :
self.callbacks.append(callbackFunction)
debug("PIR GPIO : adding callback : "+str(self.callbacks))
def global_callback(self, pin) :
if (int(time.perf_counter()) < int(self.lastCallbackTimestamp) + self.cyclePeriod) :
debug("PIR GPIO : Skipping callbacks, not enough time since last callbacks ... ")
else :
debug("PIR GPIO : Running callbacks ... ")
for f in self.callbacks :
f(pin)
debug("PIR GPIO : callbacks done")
self.lastCallbackTimestamp = int(time.perf_counter());
def cleanup(self) :
GPIO.cleanup()