Mercurial > code > home > repos > homeauto
annotate service/bedroomArduino/bedroomArduino.py @ 842:1f69e77411ba
add shiftbrites to bedroom arduino
Ignore-this: c0ce65f20b52679af58b9e31bcc3cf2e
darcs-hash:20120825212045-312f9-46f810a9229b60efb4db1200b17397c60c17c178
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Sat, 25 Aug 2012 14:20:45 -0700 |
parents | a87cae710556 |
children | 1fada3a61c5f |
rev | line source |
---|---|
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
1 #!bin/python |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
2 """ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
3 talks to bed.pde on an arduino |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
4 """ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
5 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
6 from __future__ import division |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
7 |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
8 import cyclone.web, json, traceback, os, sys, time, logging, bitstring |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
9 from twisted.internet import reactor, task |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
10 from twisted.web.client import getPage |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
11 sys.path.append("/my/proj/house/frontdoor") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
12 from loggingserial import LoggingSerial |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
13 sys.path.append("/my/proj/homeauto/lib") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
14 from cycloneerr import PrettyErrorHandler |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
15 from logsetup import log |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
16 |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
17 sys.path.append("/my/proj/pixel/shiftweb") |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
18 from shiftweb import hexFromRgb, rgbFromHex |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
19 |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
20 sys.path.append("/my/site/magma") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
21 from stategraph import StateGraph |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
22 from rdflib import Namespace |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
23 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
24 ROOM = Namespace("http://projects.bigasterisk.com/room/") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
25 DEV = Namespace("http://projects.bigasterisk.com/device/") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
26 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
27 class ArduinoBedroom(object): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
28 def __init__(self, port='/dev/ttyACM0'): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
29 self.ser = LoggingSerial(port=port, baudrate=115200, timeout=1) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
30 self.ser.flush() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
31 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
32 def ping(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
33 self.ser.write("\x60\x00\x00") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
34 msg = self.ser.readJson() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
35 assert msg == {"ok":True}, msg |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
36 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
37 def poll(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
38 self.ser.write("\x60\x01\x00") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
39 ret = self.ser.readJson() |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
40 ret['motion'] = int(ret['motion'] > 100) |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
41 return ret |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
42 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
43 def setSpeakerChoice(self, pillow): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
44 self.ser.write("\x60\x02" + chr(pillow)) |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
45 return self.ser.readJson() |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
46 |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
47 def setLeds(self, colors): |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
48 """ |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
49 shift out this sequence of (r,g,b) triples of 10-bit ints |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
50 The nearest led gets color[0], etc. |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
51 """ |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
52 resetCurrent = "".join(bitstring.pack("0b01, uint:10, uint:10, uint:10", |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
53 127, 127, 127).bytes |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
54 for loop in range(len(colors))) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
55 out = "".join(bitstring.pack("0b00, uint:10, uint:10, uint:10", |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
56 b, r, g).bytes |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
57 for r,g,b in reversed(colors)) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
58 out = resetCurrent + out |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
59 self.ser.write("\x60\x03" + chr(len(out)) + out) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
60 msg = self.ser.readJson() |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
61 assert msg == {"ok":1}, msg |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
62 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
63 class Index(PrettyErrorHandler, cyclone.web.RequestHandler): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
64 def get(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
65 """ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
66 this is an acceptable status check since it makes a round-trip |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
67 to the arduino before returning success |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
68 """ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
69 self.settings.arduino.ping() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
70 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
71 self.set_header("Content-Type", "application/xhtml+xml") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
72 self.write(open("index.html").read()) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
73 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
74 class SpeakerChoice(PrettyErrorHandler, cyclone.web.RequestHandler): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
75 def put(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
76 ret = self.settings.arduino.setSpeakerChoice(int(self.get_argument('pillow'))) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
77 self.write(ret) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
78 |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
79 class Brite(PrettyErrorHandler, cyclone.web.RequestHandler): |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
80 def put(self, which): |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
81 which = int(which) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
82 brites = self.settings.brites |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
83 if which + 1 > len(brites): |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
84 brites.extend([(0,0,0)] * (which + 1 - len(brites))) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
85 brites[which] = rgbFromHex(self.request.body) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
86 |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
87 self.settings.arduino.setLeds(brites) |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
88 self.set_header("Content-Type", "text/plain") |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
89 self.write("ok") |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
90 |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
91 class GraphPage(PrettyErrorHandler, cyclone.web.RequestHandler): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
92 def get(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
93 self.set_header("Content-Type", "application/x-trig") |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
94 g = StateGraph(ROOM['bedroomArduino']) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
95 self.settings.poller.assertIsCurrent() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
96 g.add((DEV['bedroomMotion'], ROOM['state'], |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
97 ROOM['motion'] if self.settings.poller.lastValues['motion'] else |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
98 ROOM['noMotion'])) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
99 self.write(g.asTrig()) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
100 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
101 class Poller(object): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
102 """ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
103 Watches sensor values |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
104 """ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
105 def __init__(self, config, ard, period): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
106 self.config, self.ard = config, ard |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
107 self.period = period |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
108 self.lastValues = None |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
109 self.lastPollTime = 0 |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
110 self.lastMotion = None |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
111 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
112 def assertIsCurrent(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
113 """raise an error if the poll data is not fresh""" |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
114 dt = time.time() - self.lastPollTime |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
115 if dt > period * 2: |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
116 raise ValueError("last poll time was too old: %.1f sec ago" % dt) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
117 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
118 def poll(self): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
119 now = time.time() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
120 try: |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
121 try: |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
122 newData = ard.poll() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
123 except ValueError, e: |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
124 print e |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
125 else: |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
126 #print newData # for testing |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
127 |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
128 self.lastPollTime = now |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
129 self.lastValues = newData # for other data besides the blinks |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
130 self.processMotion(newData['motion']) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
131 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
132 except (IOError, OSError): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
133 os.abort() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
134 except Exception, e: |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
135 print "poll error", e |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
136 traceback.print_exc() |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
137 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
138 def processMotion(self, state): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
139 if state == self.lastMotion: |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
140 return |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
141 self.lastMotion = state |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
142 msg = json.dumps(dict(board=self.config['boardName'], |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
143 name="bedroomMotion", state=state)) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
144 getPage('http://bang.bigasterisk.com:9069/inputChange', |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
145 method="POST", |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
146 postdata=msg, |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
147 headers={'Content-Type' : 'application/json'} |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
148 ).addErrback(self.reportError, msg) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
149 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
150 def reportError(self, msg, *args): |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
151 print "post error", msg, args |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
152 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
153 if __name__ == '__main__': |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
154 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
155 config = { # to be read from a file |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
156 'arduinoPort': '/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A4001nIu-if00-port0', |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
157 'servePort' : 9088, |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
158 'pollFrequency' : 6, |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
159 'boardName' : 'bedroom', # gets sent with updates |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
160 } |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
161 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
162 from twisted.python import log as twlog |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
163 #twlog.startLogging(sys.stdout) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
164 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
165 log.setLevel(logging.DEBUG) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
166 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
167 ard = ArduinoBedroom(port=config['arduinoPort']) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
168 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
169 period = 1/config['pollFrequency'] |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
170 p = Poller(config, ard, period) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
171 task.LoopingCall(p.poll).start(period) |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
172 |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
173 reactor.listenTCP(config['servePort'], cyclone.web.Application([ |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
174 (r"/", Index), |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
175 (r"/graph", GraphPage), |
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
176 (r'/speakerChoice', SpeakerChoice), |
842
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
177 (r'/brite/(\d+)', Brite), |
1f69e77411ba
add shiftbrites to bedroom arduino
drewp <drewp@bigasterisk.com>
parents:
834
diff
changeset
|
178 ], arduino=ard, poller=p, brites=[])) |
834
a87cae710556
bedroomarduino project started. web server isn't ready
drewp <drewp@bigasterisk.com>
parents:
diff
changeset
|
179 reactor.run() |