annotate service/theaterArduino/watchpins.py @ 1063:295d20307b81

try a speedup for raspi Ignore-this: 9cdbabb99c9888792c167866f06d65eb darcs-hash:a10ec9fb5dc728c876e236137bce904f1d190414
author drewp <drewp@bigasterisk.com>
date Mon, 21 Mar 2016 04:23:59 -0700
parents 0ce7cd91111a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
920
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
1 """
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
2 listener to the POST messages sent by theaterArduino.py when a pin changes.
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
3 records interesting events to mongodb, sends further messages.
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
4
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
5 Will also serve activity stream.
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
6 """
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
7 import sys, os, datetime, cyclone.web, simplejson, time
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
8 from twisted.internet import reactor
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
9 from twisted.internet.error import ConnectError
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
10 from twisted.internet.defer import inlineCallbacks, returnValue
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
11 from twisted.web.client import getPage
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
12 from dateutil.tz import tzutc
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
13 from pymongo import Connection
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
14 from rdflib import Namespace, Literal, Graph
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
15 from rdflib.parser import StringInputSource
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
16 sys.path.append("/my/site/magma")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
17 from activitystream import ActivityStream
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
18 from stategraph import StateGraph
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
19
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
20 sys.path.append("/my/proj/homeauto/lib")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
21 from cycloneerr import PrettyErrorHandler
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
22 from logsetup import log
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
23
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
24 DEV = Namespace("http://projects.bigasterisk.com/device/")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
25 ROOM = Namespace("http://projects.bigasterisk.com/room/")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
26 zeroTime = datetime.datetime.fromtimestamp(0, tzutc())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
27
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
28 class PinChange(PrettyErrorHandler, cyclone.web.RequestHandler):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
29 def post(self):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
30 # there should be per-pin debounce settings so we don't log
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
31 # all the noise of a transition change
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
32
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
33 msg = simplejson.loads(self.request.body)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
34 msg['t'] = datetime.datetime.now(tzutc())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
35 msg['name'] = {9: 'downstairsDoorOpen',
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
36 10: 'downstairsDoorMotion',
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
37 }[msg['pin']]
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
38 log.info("pinchange post %r", msg)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
39 self.settings.mongo.insert(msg)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
40
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
41 history = self.settings.history
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
42 if msg['pin'] == 10:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
43 history['motionHistory'] = (history.get('motionHistory', []) + [(msg['t'], msg['level'])])[-50:]
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
44 if msg['level'] == 1:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
45 if history.get('prevMotion', 0) == 0:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
46 history['motionStart'] = msg['t']
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
47
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
48 history['prevMotion'] = msg['level']
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
49
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
50
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
51 class InputChange(PrettyErrorHandler, cyclone.web.RequestHandler):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
52 """
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
53 several other inputs post to here to get their events recorded,
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
54 too. This file shouldn't be in theaterArduino. See bedroomArduino,
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
55 frontDoorArduino, garageArduino.
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
56 """
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
57 def post(self):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
58 msg = simplejson.loads(self.request.body)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
59 msg['t'] = datetime.datetime.now(tzutc())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
60 log.info(msg)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
61 self.settings.mongo.insert(msg)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
62
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
63 # trigger to entrancemusic? rdf graph change PSHB?
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
64
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
65 class GraphHandler(PrettyErrorHandler, cyclone.web.RequestHandler):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
66 """
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
67 fetch the pins from drv right now (so we don't have stale data),
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
68 and return an rdf graph describing what we know about the world
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
69 """
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
70 @inlineCallbacks
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
71 def get(self):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
72 g = StateGraph(ctx=DEV['houseSensors'])
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
73
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
74 frontDoorDefer = getPage("http://slash:9080/door", timeout=2) # head start?
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
75
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
76 doorOpen = int((yield getPage("http://bang:9056/pin/d9", timeout=1)))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
77 g.add((DEV['theaterDoorOpen'], ROOM['state'],
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
78 ROOM['open'] if doorOpen else ROOM['closed']))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
79
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
80 for s in self.motionStatements(
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
81 currentMotion=int((yield getPage("http://bang:9056/pin/d10",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
82 timeout=1)))):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
83 g.add(s)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
84
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
85 try:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
86 for s in (yield self.getBedroomStatements()):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
87 g.add(s)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
88 except ConnectError, e:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
89 g.add((ROOM['bedroomStatementFetch'], ROOM['error'],
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
90 Literal("getBedroomStatements: %s" % e)))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
91
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
92 try:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
93 frontDoor = yield frontDoorDefer
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
94 g.add((DEV['frontDoorOpen'], ROOM['state'],
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
95 ROOM[frontDoor] if frontDoor in ['open', 'closed'] else
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
96 ROOM['error']))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
97 except Exception, e:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
98 g.add((DEV['frontDoorOpen'], ROOM['error'], Literal(str(e))))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
99
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
100 self.set_header('Content-type', 'application/x-trig')
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
101 self.write(g.asTrig())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
102
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
103 def motionStatements(self, currentMotion):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
104 uri = DEV['theaterDoorOutsideMotion']
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
105
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
106 yield (uri, ROOM['state'], ROOM['motion'] if currentMotion else ROOM['noMotion'])
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
107
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
108 now = datetime.datetime.now(tzutc())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
109 if currentMotion:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
110 try:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
111 dt = now - self.settings.history['motionStart']
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
112 yield (uri, ROOM['motionDurationSec'], Literal(dt.total_seconds()))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
113 if dt > datetime.timedelta(seconds=4):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
114 yield (uri, ROOM['state'], ROOM['sustainedMotion'])
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
115 except KeyError:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
116 pass
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
117
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
118 # this is history without the db, which means the window is
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
119 # limited and it could reset any time
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
120 if 'motionHistory' in self.settings.history:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
121 yield ((uri, ROOM['history'],
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
122 Literal(simplejson.dumps(
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
123 [(round((t - now).total_seconds(), ndigits=2), v)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
124 for t,v in self.settings.history['motionHistory']]))))
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
125
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
126 @inlineCallbacks
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
127 def getBedroomStatements(self):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
128 trig = yield getPage("http://bang:9088/graph", timeout=1)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
129 stmts = set()
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
130 for line in trig.splitlines():
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
131 if "http://projects.bigasterisk.com/device/bedroomMotion" in line:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
132 g = Graph()
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
133 g.parse(StringInputSource(line+"\n"), format="nt")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
134 for s in g:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
135 stmts.add(s)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
136 returnValue(stmts)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
137
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
138 class Activity(PrettyErrorHandler, cyclone.web.RequestHandler):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
139 def get(self):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
140 a = ActivityStream()
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
141 self.settings.mongo.ensure_index('t')
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
142 remaining = {'downstairsDoorMotion':10, 'downstairsDoorOpen':10,
1009
0ce7cd91111a old edits
drewp <drewp@bigasterisk.com>
parents: 920
diff changeset
143 'frontDoorMotion':30, 'frontDoor':50, 'bedroomMotion': 10}
920
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
144 recent = {}
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
145 toAdd = []
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
146 for row in list(self.settings.mongo.find(sort=[('t', -1)],
1009
0ce7cd91111a old edits
drewp <drewp@bigasterisk.com>
parents: 920
diff changeset
147 limit=10000)):
920
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
148 try:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
149 r = remaining[row['name']]
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
150 if r < 1:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
151 continue
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
152 remaining[row['name']] = r - 1
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
153 except KeyError:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
154 pass
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
155
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
156 # lots todo
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
157 if row['name'] == 'downstairsDoorMotion':
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
158 if row['level'] == 0:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
159 continue
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
160 kw = dict(
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
161 actorUri="http://...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
162 actorName="downstairs door",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
163 verbUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
164 verbEnglish="sees",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
165 objectUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
166 objectName="backyard motion",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
167 objectIcon="/magma/static/backyardMotion.png")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
168 elif row['name'] == 'downstairsDoorOpen':
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
169 kw = dict(actorUri="http://bigasterisk.com/foaf/someone",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
170 actorName="someone",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
171 verbUri="op",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
172 verbEnglish="opens" if row['level'] else "closes",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
173 objectUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
174 objectName="downstairs door",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
175 objectIcon="/magma/static/downstairsDoor.png")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
176 elif row['name'] == 'frontDoor':
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
177 kw = dict(actorUri="http://bigasterisk.com/foaf/someone",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
178 actorName="someone",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
179 verbUri="op",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
180 verbEnglish="opens" if row['state']=='open' else "closes",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
181 objectUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
182 objectName="front door",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
183 objectIcon="/magma/static/frontDoor.png")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
184 elif row['name'] == 'frontDoorMotion':
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
185 if row['state'] == False:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
186 continue
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
187 if 'frontDoorMotion' in recent:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
188 pass#if row['t'
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
189 kw = dict(
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
190 actorUri="http://...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
191 actorName="front door",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
192 verbUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
193 verbEnglish="sees",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
194 objectUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
195 objectName="front yard motion",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
196 objectIcon="/magma/static/frontYardMotion.png")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
197 recent['frontDoorMotion'] = kw
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
198 elif row['name'] == 'bedroomMotion':
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
199 if not row['state']:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
200 continue
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
201 kw = dict(
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
202 actorUri="http://...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
203 actorName="bedroom",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
204 verbUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
205 verbEnglish="sees",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
206 objectUri="...",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
207 objectName="bedroom motion",
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
208 objectIcon="/magma/static/bedroomMotion.png")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
209 recent['bedroomMotion'] = kw
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
210 else:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
211 raise NotImplementedError(row)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
212
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
213 kw.update({'published' : row['t'],
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
214 'entryUriComponents' : ('sensor', row['board'])})
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
215 toAdd.append(kw)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
216
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
217 toAdd.reverse()
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
218 for kw in toAdd:
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
219 a.addEntry(**kw)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
220
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
221 self.set_header("Content-type", "application/atom+xml")
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
222 self.write(a.makeAtom())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
223
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
224 class Application(cyclone.web.Application):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
225 def __init__(self):
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
226 handlers = [
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
227 (r'/()', cyclone.web.StaticFileHandler,
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
228 {"path" : ".", "default_filename" : "watchpins.html"}),
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
229 (r'/pinChange', PinChange),
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
230 (r'/inputChange', InputChange),
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
231 (r'/activity', Activity),
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
232 (r'/graph', GraphHandler),
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
233 ]
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
234 settings = {
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
235 'mongo' : Connection('bang', 27017,
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
236 tz_aware=True)['house']['sensor'],
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
237 'history' : {
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
238 },
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
239 }
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
240 cyclone.web.Application.__init__(self, handlers, **settings)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
241
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
242 if __name__ == '__main__':
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
243 #from twisted.python import log as twlog
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
244 #twlog.startLogging(sys.stdout)
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
245 reactor.listenTCP(9069, Application())
94b99b50814b move watchpins from /room, add a graph
drewp <drewp@bigasterisk.com>
parents:
diff changeset
246 reactor.run()