annotate service/frontDoorMessage/frontDoorMessage.py @ 819:43b16f1a4e4a

moved frontdoor host Ignore-this: 767e18071e2b95e9aad123848e5c9a18 darcs-hash:20111204025921-312f9-4ba8b55a1420f2d14efc3ffa86d0dd1c0e821e9e.gz
author drewp <drewp@bigasterisk.com>
date Sat, 03 Dec 2011 18:59:21 -0800
parents 6d39131eca07
children 7e1036261453
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
805
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.internet import reactor
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
7 from twisted.internet.defer import inlineCallbacks
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
8 sys.path.append("/my/proj/homeauto/lib")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
9 from cycloneerr import PrettyErrorHandler
811
6d39131eca07 logging
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
10 from logsetup import log
805
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
811
6d39131eca07 logging
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
15 log.info("restarting- message is now empty")
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
16 self.message = ""
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
17 self.lastLine = ""
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
18
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
19 def updateLcd(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
20 whole = "%-147s%-21s" % (self.message, self.lastLine)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21 restkit.request(url=self.putUrl,
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
22 method="PUT",
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
23 body=whole,
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
24 headers={"content-type":"text/plain"})
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
25
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
26 class Index(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
27 @inlineCallbacks
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
28 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
29
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
30 # refresh output, and make an error if we can't talk to them
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
31 yield self.settings.lcdParts.updateLcd()
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
32
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
33 self.set_header("Content-Type", "application/xhtml+xml")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
34 self.write(open("index.html").read())
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
35
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
36 def getArg(s):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
37 return s.request.body.encode("ascii")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
38
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
39 class Message(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
40 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
41 self.set_header("Content-Type", "text/plain")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
42 self.write(self.settings.lcdParts.message)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
43
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
44 def put(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
45 self.settings.lcdParts.message = getArg(self)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
46 self.settings.lcdParts.updateLcd()
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
47 self.set_status(204)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
48
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
49 class LastLine(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
50 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
51 self.set_header("Content-Type", "text/plain")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
52 self.write(self.settings.lcdParts.lastLine)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
53
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
54 def put(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
55 self.settings.lcdParts.lastLine = getArg(self)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
56 self.settings.lcdParts.updateLcd()
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
57 self.set_status(204)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
58
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
59 class Application(cyclone.web.Application):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
60 def __init__(self, lcdParts):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61 handlers = [
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
62 (r"/", Index),
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
63 (r"/message", Message),
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
64 (r'/lastLine', LastLine),
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
65 ]
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
66 settings = {"lcdParts" : lcdParts}
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
67 cyclone.web.Application.__init__(self, handlers, **settings)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
68
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
69 if __name__ == '__main__':
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
70
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
71 config = {
819
43b16f1a4e4a moved frontdoor host
drewp <drewp@bigasterisk.com>
parents: 811
diff changeset
72 'frontDoorArduino': "http://slash:9080/",
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
73 'doorChangePost' : 'http://bang.bigasterisk.com:9069/inputChange',
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
74 'servePort' : 9081,
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
75 }
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
76
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
77 lcdParts = LcdParts(config['frontDoorArduino'] + 'lcd')
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
78
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()