diff service/arduinoNode/devices.py @ 1056:d2007482aec5

start sending oneshot events from some devices Ignore-this: 2c98200e9bab1acca872f4cdcaf88e4d darcs-hash:b2f012ddfc31f4800c4c1c34ebb6243169b70a67
author drewp <drewp@bigasterisk.com>
date Fri, 12 Feb 2016 02:41:29 -0800
parents ffe6a00c6cef
children b97495befcab
line wrap: on
line diff
--- a/service/arduinoNode/devices.py	Tue Feb 09 22:10:38 2016 -0800
+++ b/service/arduinoNode/devices.py	Fri Feb 12 02:41:29 2016 -0800
@@ -177,6 +177,10 @@
 @register
 class MotionSensorInput(DeviceType):
     deviceType = ROOM['MotionSensor']
+    def __init__(self, graph, uri, pinNumber):
+        DeviceType.__init__(self, graph, uri, pinNumber)
+        self.lastRead = None
+        
     def generateSetupCode(self):
         return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, LOW);' % {
             'pin': self.pinNumber,
@@ -192,12 +196,17 @@
         if b not in 'yn':
             raise ValueError('unexpected response %r' % b)
         motion = b == 'y'
-                
-        return [
+
+        oneshot = []
+        if self.lastRead is not None and motion != self.lastRead:
+            oneshot = [(self.uri, ROOM['sees'], ROOM['motionStart'])]
+        self.lastRead = motion
+        
+        return {'latest': [
             (self.uri, ROOM['sees'],
              ROOM['motion'] if motion else ROOM['noMotion']),
             self.recentMotionStatement(motion),
-        ]
+        ], 'oneshot': oneshot}
 
     def recentMotionStatement(self, motion):
         if not hasattr(self, 'lastMotionTime'):