annotate service/frontDoorMessage/frontDoorMessage.py @ 24:deb1d9ef0a02

front door callbacks Ignore-this: 1b5a7c53b1e40a24328d055bf1b51f86
author drewp@bigasterisk.com
date Sun, 04 Mar 2012 03:44:26 -0800
parents 7e1036261453
children
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 """
15
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
4 import cyclone.web, sys, socket
0
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
6
1444da5242d8 logging
drewp@bigasterisk.com
parents: 0
diff changeset
10 from logsetup import log
0
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
11
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12 class LcdParts(object):
24
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
13 def __init__(self, putUrl, pingUrl):
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
14 self.putUrl, self.pingUrl = putUrl, pingUrl
6
1444da5242d8 logging
drewp@bigasterisk.com
parents: 0
diff changeset
15 log.info("restarting- message is now empty")
0
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)
15
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
21 try:
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
22 restkit.request(url=self.putUrl,
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
23 method="PUT",
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
24 body=whole,
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
25 headers={"content-type":"text/plain"})
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
26 except socket.error, e:
7e1036261453 error handling
drewp@bigasterisk.com
parents: 14
diff changeset
27 log.warn("update lcd failed, %s" % e)
24
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
28
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
29 try:
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
30 restkit.request(url=self.pingUrl, method="POST", body="")
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
31 except socket.error, e:
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
32 log.warn("ping failed, %s" % e)
0
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
33
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
34 class Index(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
35 @inlineCallbacks
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
36 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
37
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
38 # refresh output, and make an error if we can't talk to them
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
39 yield self.settings.lcdParts.updateLcd()
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
40
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
41 self.set_header("Content-Type", "application/xhtml+xml")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
42 self.write(open("index.html").read())
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
43
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
44 def getArg(s):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
45 return s.request.body.encode("ascii")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
46
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
47 class Message(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
48 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
49 self.set_header("Content-Type", "text/plain")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
50 self.write(self.settings.lcdParts.message)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
51
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
52 def put(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
53 self.settings.lcdParts.message = getArg(self)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
54 self.settings.lcdParts.updateLcd()
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
55 self.set_status(204)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
56
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
57 class LastLine(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
58 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
59 self.set_header("Content-Type", "text/plain")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
60 self.write(self.settings.lcdParts.lastLine)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
62 def put(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
63 self.settings.lcdParts.lastLine = getArg(self)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
64 self.settings.lcdParts.updateLcd()
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
65 self.set_status(204)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
66
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
67 class Application(cyclone.web.Application):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
68 def __init__(self, lcdParts):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
69 handlers = [
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
70 (r"/", Index),
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
71 (r"/message", Message),
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
72 (r'/lastLine', LastLine),
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
73 ]
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
74 settings = {"lcdParts" : lcdParts}
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
75 cyclone.web.Application.__init__(self, handlers, **settings)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
76
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
77 if __name__ == '__main__':
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
78
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
79 config = {
14
875c973febe9 moved frontdoor host
drewp@bigasterisk.com
parents: 6
diff changeset
80 'frontDoorArduino': "http://slash:9080/",
24
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
81 'doorChangePost' : 'http://bang:8014/frontDoorChange',
0
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
82 'servePort' : 9081,
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
83 }
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
84
24
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
85 lcdParts = LcdParts(config['frontDoorArduino'] + 'lcd',
deb1d9ef0a02 front door callbacks
drewp@bigasterisk.com
parents: 15
diff changeset
86 config['doorChangePost'])
0
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
87
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
88 reactor.listenTCP(config['servePort'], Application(lcdParts))
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
89 reactor.run()