Mercurial > code > home > repos > homeauto
changeset 257:b97495befcab
button :press oneshot
Ignore-this: 683ebd47640eb29f6af4da4b352e304f
author | drewp@bigasterisk.com |
---|---|
date | Mon, 21 Mar 2016 04:22:39 -0700 |
parents | d2c60552fb13 |
children | 0c4ec87d4498 |
files | service/arduinoNode/devices.py |
diffstat | 1 files changed, 18 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/service/arduinoNode/devices.py Mon Mar 21 04:21:35 2016 -0700 +++ b/service/arduinoNode/devices.py Mon Mar 21 04:22:39 2016 -0700 @@ -228,6 +228,10 @@ class PushbuttonInput(DeviceType): """add a switch to ground; we'll turn on pullup""" deviceType = ROOM['Pushbutton'] + def __init__(self, graph, uri, pinNumber): + DeviceType.__init__(self, graph, uri, pinNumber) + self.lastClosed = None + def generateSetupCode(self): return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, HIGH);' % { 'pin': self.pinNumber, @@ -243,13 +247,22 @@ b = read(1) if b not in '01': raise ValueError('unexpected response %r' % b) - motion = b == '1' + closed = b == '0' - #and exactly once for the transition - return [ + if self.lastClosed is not None and closed != self.lastClosed: + oneshot = [ + (self.uri, ROOM['buttonState'], + ROOM['press'] if closed else ROOM['release']), + ] + else: + oneshot = [] + self.lastClosed = closed + + return {'latest': [ (self.uri, ROOM['buttonState'], - ROOM['pressed'] if motion else ROOM['notPressed']), - ] + ROOM['pressed'] if closed else ROOM['notPressed']), + ], + 'oneshot': oneshot} def watchPrefixes(self): return [