Mercurial > code > home > repos > homeauto
changeset 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 | ef635e9b9dce |
children | 295d20307b81 |
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 [