Mercurial > code > home > repos > homeauto
comparison service/arduinoNode/devices.py @ 257:b97495befcab
button :press oneshot
Ignore-this: 683ebd47640eb29f6af4da4b352e304f
author | drewp@bigasterisk.com |
---|---|
date | Mon, 21 Mar 2016 04:22:39 -0700 |
parents | 254df9f881a6 |
children | 6103688dce6d |
comparison
equal
deleted
inserted
replaced
256:d2c60552fb13 | 257:b97495befcab |
---|---|
226 | 226 |
227 @register | 227 @register |
228 class PushbuttonInput(DeviceType): | 228 class PushbuttonInput(DeviceType): |
229 """add a switch to ground; we'll turn on pullup""" | 229 """add a switch to ground; we'll turn on pullup""" |
230 deviceType = ROOM['Pushbutton'] | 230 deviceType = ROOM['Pushbutton'] |
231 def __init__(self, graph, uri, pinNumber): | |
232 DeviceType.__init__(self, graph, uri, pinNumber) | |
233 self.lastClosed = None | |
234 | |
231 def generateSetupCode(self): | 235 def generateSetupCode(self): |
232 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, HIGH);' % { | 236 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, HIGH);' % { |
233 'pin': self.pinNumber, | 237 'pin': self.pinNumber, |
234 } | 238 } |
235 | 239 |
241 | 245 |
242 def readFromPoll(self, read): | 246 def readFromPoll(self, read): |
243 b = read(1) | 247 b = read(1) |
244 if b not in '01': | 248 if b not in '01': |
245 raise ValueError('unexpected response %r' % b) | 249 raise ValueError('unexpected response %r' % b) |
246 motion = b == '1' | 250 closed = b == '0' |
247 | 251 |
248 #and exactly once for the transition | 252 if self.lastClosed is not None and closed != self.lastClosed: |
249 return [ | 253 oneshot = [ |
254 (self.uri, ROOM['buttonState'], | |
255 ROOM['press'] if closed else ROOM['release']), | |
256 ] | |
257 else: | |
258 oneshot = [] | |
259 self.lastClosed = closed | |
260 | |
261 return {'latest': [ | |
250 (self.uri, ROOM['buttonState'], | 262 (self.uri, ROOM['buttonState'], |
251 ROOM['pressed'] if motion else ROOM['notPressed']), | 263 ROOM['pressed'] if closed else ROOM['notPressed']), |
252 ] | 264 ], |
265 'oneshot': oneshot} | |
253 | 266 |
254 def watchPrefixes(self): | 267 def watchPrefixes(self): |
255 return [ | 268 return [ |
256 (self.uri, ROOM['buttonState']), | 269 (self.uri, ROOM['buttonState']), |
257 ] | 270 ] |