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