Mercurial > code > home > repos > homeauto
comparison service/arduinoNode/devices.py @ 1062:6ab7a933c2a8
button :press oneshot
Ignore-this: 683ebd47640eb29f6af4da4b352e304f
darcs-hash:a6ef95d08deccb78307cc06e642755be24ee0c3e
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Mon, 21 Mar 2016 04:22:39 -0700 |
parents | d2007482aec5 |
children | 6103688dce6d |
comparison
equal
deleted
inserted
replaced
1061:ef635e9b9dce | 1062:6ab7a933c2a8 |
---|---|
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 ] |