Mercurial > code > home > repos > homeauto
diff service/arduinoNode/devices.py @ 1056:d2007482aec5
start sending oneshot events from some devices
Ignore-this: 2c98200e9bab1acca872f4cdcaf88e4d
darcs-hash:b2f012ddfc31f4800c4c1c34ebb6243169b70a67
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Fri, 12 Feb 2016 02:41:29 -0800 |
parents | ffe6a00c6cef |
children | b97495befcab |
line wrap: on
line diff
--- a/service/arduinoNode/devices.py Tue Feb 09 22:10:38 2016 -0800 +++ b/service/arduinoNode/devices.py Fri Feb 12 02:41:29 2016 -0800 @@ -177,6 +177,10 @@ @register class MotionSensorInput(DeviceType): deviceType = ROOM['MotionSensor'] + def __init__(self, graph, uri, pinNumber): + DeviceType.__init__(self, graph, uri, pinNumber) + self.lastRead = None + def generateSetupCode(self): return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, LOW);' % { 'pin': self.pinNumber, @@ -192,12 +196,17 @@ if b not in 'yn': raise ValueError('unexpected response %r' % b) motion = b == 'y' - - return [ + + oneshot = [] + if self.lastRead is not None and motion != self.lastRead: + oneshot = [(self.uri, ROOM['sees'], ROOM['motionStart'])] + self.lastRead = motion + + return {'latest': [ (self.uri, ROOM['sees'], ROOM['motion'] if motion else ROOM['noMotion']), self.recentMotionStatement(motion), - ] + ], 'oneshot': oneshot} def recentMotionStatement(self, motion): if not hasattr(self, 'lastMotionTime'):