comparison service/frontDoorMessage/frontDoorMessage.py @ 0:6fd208b97616

start Ignore-this: e06ac598970a0d4750f588ab89f56996
author Drew Perttula <drewp@bigasterisk.com>
date Mon, 01 Aug 2011 03:30:30 -0700
parents
children 1444da5242d8
comparison
equal deleted inserted replaced
-1:000000000000 0:6fd208b97616
1 """
2 holds the current message on the front door lcd
3 """
4 import cyclone.web, sys
5 import restkit
6 from twisted.python import log
7 from twisted.internet import reactor
8 from twisted.internet.defer import inlineCallbacks
9 sys.path.append("/my/proj/homeauto/lib")
10 from cycloneerr import PrettyErrorHandler
11
12 class LcdParts(object):
13 def __init__(self, putUrl):
14 self.putUrl = putUrl
15 self.message = ""
16 self.lastLine = ""
17
18 def updateLcd(self):
19 whole = "%-147s%-21s" % (self.message, self.lastLine)
20 restkit.request(url=self.putUrl,
21 method="PUT",
22 body=whole,
23 headers={"content-type":"text/plain"})
24
25 class Index(PrettyErrorHandler, cyclone.web.RequestHandler):
26 @inlineCallbacks
27 def get(self):
28
29 # refresh output, and make an error if we can't talk to them
30 yield self.settings.lcdParts.updateLcd()
31
32 self.set_header("Content-Type", "application/xhtml+xml")
33 self.write(open("index.html").read())
34
35 def getArg(s):
36 return s.request.body.encode("ascii")
37
38 class Message(PrettyErrorHandler, cyclone.web.RequestHandler):
39 def get(self):
40 self.set_header("Content-Type", "text/plain")
41 self.write(self.settings.lcdParts.message)
42
43 def put(self):
44 self.settings.lcdParts.message = getArg(self)
45 self.settings.lcdParts.updateLcd()
46 self.set_status(204)
47
48 class LastLine(PrettyErrorHandler, cyclone.web.RequestHandler):
49 def get(self):
50 self.set_header("Content-Type", "text/plain")
51 self.write(self.settings.lcdParts.lastLine)
52
53 def put(self):
54 self.settings.lcdParts.lastLine = getArg(self)
55 self.settings.lcdParts.updateLcd()
56 self.set_status(204)
57
58 class Application(cyclone.web.Application):
59 def __init__(self, lcdParts):
60 handlers = [
61 (r"/", Index),
62 (r"/message", Message),
63 (r'/lastLine', LastLine),
64 ]
65 settings = {"lcdParts" : lcdParts}
66 cyclone.web.Application.__init__(self, handlers, **settings)
67
68 if __name__ == '__main__':
69
70 config = {
71 'frontDoorArduino': "http://space:9080/",
72 'doorChangePost' : 'http://bang.bigasterisk.com:9069/inputChange',
73 'servePort' : 9081,
74 }
75
76 lcdParts = LcdParts(config['frontDoorArduino'] + 'lcd')
77
78 log.startLogging(sys.stdout)
79 reactor.listenTCP(config['servePort'], Application(lcdParts))
80 reactor.run()