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