Mercurial > code > home > repos > homeauto
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 |
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 | 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 | 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() |