annotate service/arduinoNode/devices.py @ 164:49c1756b2edb

start arduinonode Ignore-this: 6ddc4d3af9ab8468e25b346bddf15835
author drewp@bigasterisk.com
date Mon, 06 Apr 2015 02:13:39 -0700
parents
children c0180bd2b33a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
164
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
1 from rdflib import Namespace, RDF, URIRef
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
2
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
3 ROOM = Namespace('http://projects.bigasterisk.com/room/')
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
4
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
5 class BoardInput(object):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
6 """
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
7 one device that gives us input. this includes processing to make
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
8 statements, but this object doesn't store state
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
9 """
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
10 def __init__(self, graph, uri):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
11 self.graph, self.uri = graph, uri
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
12
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
13 def readFromPoll(self, read):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
14 """
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
15 read an update message returned as part of a poll bundle. This may
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
16 consume a varying number of bytes depending on the type of
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
17 input (e.g. IR receiver).
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
18 Returns rdf statements.
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
19 """
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
20 raise NotImplementedError
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
21
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
22 def generateSetupCode(self):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
23 return ''
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
24
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
25 def generatePollCode(self):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
26 return ''
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
27
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
28 def pinNumber(self, pred=ROOM['pin']):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
29 pinUri = self.graph.value(self.uri, pred)
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
30 return int(self.graph.value(pinUri, ROOM['pinNumber']))
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
31
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
32 _inputForType = {}
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
33 def registerInput(deviceType):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
34 def newcls(cls):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
35 _inputForType[deviceType] = cls
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
36 return cls
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
37 return newcls
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
38
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
39 class PingInput(BoardInput):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
40 def generatePollCode(self):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
41 return "Serial.write('k');"
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
42 def readFromPoll(self, read):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
43 if read(1) != 'k':
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
44 raise ValueError('invalid ping response')
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
45 return [(self.uri, ROOM['ping'], ROOM['ok'])]
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
46
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
47 @registerInput(deviceType=ROOM['MotionSensor'])
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
48 class MotionSensorInput(BoardInput):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
49 def generateSetupCode(self):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
50 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, LOW);' % {
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
51 'pin': self.pinNumber(),
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
52 }
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
53
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
54 def generatePollCode(self):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
55 return "Serial.write(digitalRead(%(pin)d) ? 'y' : 'n');" % {
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
56 'pin': self.pinNumber()
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
57 }
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
58
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
59 def readFromPoll(self, read):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
60 b = read(1)
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
61 if b not in 'yn':
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
62 raise ValueError('unexpected response %r' % b)
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
63 motion = b == 'y'
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
64 return [(self.uri, ROOM['sees'],
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
65 ROOM['motion'] if motion else ROOM['noMotion'])]
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
66
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
67 def makeBoardInput(graph, uri):
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
68 deviceType = graph.value(uri, RDF.type)
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
69 return _inputForType[deviceType](graph, uri)
49c1756b2edb start arduinonode
drewp@bigasterisk.com
parents:
diff changeset
70