Mercurial > code > home > repos > homeauto
diff service/piNode/devices.py @ 1038:ffe6a00c6cef
server/browser graph sync. cut dependency on the WS version. merge some changes between arduino/pi code.
Ignore-this: cf7d20d54e134e8ff33a9ee405610846
darcs-hash:b4350a6308480857b2846a8518190b956981eef4
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sat, 30 Jan 2016 06:40:00 -0800 |
parents | 8d1a8a96e895 |
children | 141079644c45 |
line wrap: on
line diff
--- a/service/piNode/devices.py Thu Jan 28 02:48:54 2016 -0800 +++ b/service/piNode/devices.py Sat Jan 30 06:40:00 2016 -0800 @@ -40,7 +40,14 @@ def __init__(self, graph, uri, pi, pinNumber): self.graph, self.uri, self.pi = graph, uri, pi self.pinNumber = pinNumber + self.hostStateInit() + def hostStateInit(self): + """ + If you don't want to use __init__, you can use this to set up + whatever storage you might need for hostStatements + """ + def description(self): return { 'uri': self.uri, @@ -51,6 +58,16 @@ 'outputWidgets': self.outputWidgets(), } + def hostStatements(self): + """ + Like readFromPoll but these statements come from the host-side + python code, not the connected device. Include output state + (e.g. light brightness) if its master version is in this + object. This method is called on /graph requests so it should + be fast. + """ + return [] + def watchPrefixes(self): """ subj,pred pairs of the statements that might be returned from @@ -159,13 +176,17 @@ def __init__(self, graph, uri, pi, r, g, b): self.graph, self.uri, self.pi = graph, uri, pi self.rgb = map(int, [r, g, b]) + self.value = '#000000' def setup(self): for i in self.rgb: self.pi.set_mode(i, pigpio.OUTPUT) self.pi.set_PWM_frequency(i, 200) self.pi.set_PWM_dutycycle(i, 0) - + + def hostStatements(self): + return [(self.uri, ROOM['color'], Literal(self.value))] + def outputPatterns(self): return [(self.uri, ROOM['color'], None)] @@ -178,6 +199,7 @@ assert statements[0][:2] == (self.uri, ROOM['color']) rgb = self._rgbFromHex(statements[0][2]) + self.value = statements[0][2] for (i, v) in zip(self.rgb, rgb): self.pi.set_PWM_dutycycle(i, v) @@ -271,7 +293,10 @@ @register class LedOutput(DeviceType): deviceType = ROOM['LedOutput'] - + + def hostStateInit(self): + self.value = 0 + def setup(self): self.pi.set_mode(self.pinNumber, pigpio.OUTPUT) self.pi.set_PWM_frequency(self.pinNumber, 200) @@ -283,8 +308,12 @@ def sendOutput(self, statements): assert len(statements) == 1 assert statements[0][:2] == (self.uri, ROOM['brightness']) - v = int(float(statements[0][2]) * 255) + self.value = float(statements[0][2]) + v = int(self.value * 255) self.pi.set_PWM_dutycycle(self.pinNumber, v) + + def hostStatements(self): + return [(self.uri, ROOM['brightness'], Literal(self.value))] def outputWidgets(self): return [{