comparison 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
comparison
equal deleted inserted replaced
1055:e1693cc0b992 1056:d2007482aec5
175 return [(self.uri, ROOM['ping'])] 175 return [(self.uri, ROOM['ping'])]
176 176
177 @register 177 @register
178 class MotionSensorInput(DeviceType): 178 class MotionSensorInput(DeviceType):
179 deviceType = ROOM['MotionSensor'] 179 deviceType = ROOM['MotionSensor']
180 def __init__(self, graph, uri, pinNumber):
181 DeviceType.__init__(self, graph, uri, pinNumber)
182 self.lastRead = None
183
180 def generateSetupCode(self): 184 def generateSetupCode(self):
181 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, LOW);' % { 185 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, LOW);' % {
182 'pin': self.pinNumber, 186 'pin': self.pinNumber,
183 } 187 }
184 188
190 def readFromPoll(self, read): 194 def readFromPoll(self, read):
191 b = read(1) 195 b = read(1)
192 if b not in 'yn': 196 if b not in 'yn':
193 raise ValueError('unexpected response %r' % b) 197 raise ValueError('unexpected response %r' % b)
194 motion = b == 'y' 198 motion = b == 'y'
195 199
196 return [ 200 oneshot = []
201 if self.lastRead is not None and motion != self.lastRead:
202 oneshot = [(self.uri, ROOM['sees'], ROOM['motionStart'])]
203 self.lastRead = motion
204
205 return {'latest': [
197 (self.uri, ROOM['sees'], 206 (self.uri, ROOM['sees'],
198 ROOM['motion'] if motion else ROOM['noMotion']), 207 ROOM['motion'] if motion else ROOM['noMotion']),
199 self.recentMotionStatement(motion), 208 self.recentMotionStatement(motion),
200 ] 209 ], 'oneshot': oneshot}
201 210
202 def recentMotionStatement(self, motion): 211 def recentMotionStatement(self, motion):
203 if not hasattr(self, 'lastMotionTime'): 212 if not hasattr(self, 'lastMotionTime'):
204 self.lastMotionTime = 0 213 self.lastMotionTime = 0
205 now = time.time() 214 now = time.time()