Mercurial > code > home > repos > homeauto
comparison service/arduinoNode/devices.py @ 251:254df9f881a6
start sending oneshot events from some devices
Ignore-this: 2c98200e9bab1acca872f4cdcaf88e4d
author | drewp@bigasterisk.com |
---|---|
date | Fri, 12 Feb 2016 02:41:29 -0800 |
parents | 4ebb5cc30002 |
children | b97495befcab |
comparison
equal
deleted
inserted
replaced
250:c1287ab87add | 251:254df9f881a6 |
---|---|
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() |