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()