Mercurial > code > home > repos > homeauto
comparison service/starArduino/starArduino.py @ 4:be855a111619
move a bunch of services into this tree, give them all web status pages
Ignore-this: a11e90f9d2cd9470565c743f54943c4b
author | drewp@bigasterisk.com |
---|---|
date | Mon, 08 Aug 2011 00:31:31 -0700 |
parents | |
children | 4bf2be19c6c4 |
comparison
equal
deleted
inserted
replaced
3:6c2e83a0c85b | 4:be855a111619 |
---|---|
1 """ | |
2 arduino driver for the nightlight+buttons+temp setup running on star | |
3 | |
4 """ | |
5 from __future__ import division | |
6 | |
7 import sys, jsonlib | |
8 from twisted.internet import reactor, task | |
9 import cyclone.web | |
10 | |
11 sys.path.append("/my/proj/pixel/shiftweb") | |
12 from drvarduino import ShiftbriteArduino | |
13 from shiftweb import hexFromRgb, rgbFromHex | |
14 | |
15 sys.path.append("/my/proj/homeauto/lib") | |
16 from cycloneerr import PrettyErrorHandler | |
17 from logsetup import log | |
18 | |
19 sys.path.append("/my/proj/ariremote") | |
20 from oscserver import ArduinoWatcher | |
21 | |
22 class Index(PrettyErrorHandler, cyclone.web.RequestHandler): | |
23 def get(self): | |
24 self.settings.arduino.ping() | |
25 | |
26 self.set_header("Content-Type", "application/xhtml+xml") | |
27 self.write(open("index.html").read()) | |
28 | |
29 class Temperature(PrettyErrorHandler, cyclone.web.RequestHandler): | |
30 def get(self): | |
31 f = self.settings.arduino.getTemperature() | |
32 self.set_header("Content-Type", "application/json") | |
33 self.write(jsonlib.write({"temp" : f})) | |
34 | |
35 class Brite(PrettyErrorHandler, cyclone.web.RequestHandler): | |
36 def get(self, pos): | |
37 self.set_header("Content-Type", "text/plain") | |
38 self.write(hexFromRgb(self.settings.colors[int(pos)])) | |
39 | |
40 def put(self, pos): | |
41 channel = int(pos) | |
42 colors = self.settings.colors | |
43 colors[channel] = rgbFromHex(self.request.body) | |
44 self.settings.arduino.update(colors) | |
45 self.set_header("Content-Type", "text/plain") | |
46 self.write("updated %r" % colors) | |
47 | |
48 class Graph(PrettyErrorHandler, cyclone.web.RequestHandler): | |
49 def get(self): | |
50 raise NotImplementedError | |
51 | |
52 if __name__ == '__main__': | |
53 sb = ShiftbriteArduino(numChannels=3) | |
54 | |
55 colors = [(0,0,0)] * sb.numChannels | |
56 | |
57 aw = ArduinoWatcher(sb) | |
58 task.LoopingCall(aw.poll).start(1.0/20) | |
59 | |
60 reactor.listenTCP(9014, cyclone.web.Application([ | |
61 (r'/', Index), | |
62 (r'/temperature', Temperature), | |
63 (r'/brite/(\d+)', Brite), | |
64 (r'/graph', Graph), | |
65 ], arduino=sb, colors=colors)) | |
66 reactor.run() |