annotate service/frontDoorMessage/frontDoorMessage.py @ 1147:ef494fe0499f

forgot devices_shared.py Ignore-this: 210e7777d9d4d11f148bb7e63f5de65a darcs-hash:8dd34afc9d00fe796f94da254519e22ca1fa7d03
author drewp <drewp@bigasterisk.com>
date Wed, 04 Apr 2018 14:58:27 -0700
parents 772b2065fca8
children
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 """
820
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
4 import cyclone.web, sys, socket
805
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):
829
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
13 def __init__(self, putUrl, pingUrl):
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
14 self.putUrl, self.pingUrl = putUrl, pingUrl
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)
820
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
21 try:
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
22 restkit.request(url=self.putUrl,
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
23 method="PUT",
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
24 body=whole,
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
25 headers={"content-type":"text/plain"})
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
26 except socket.error, e:
bc9ac10032f7 error handling
drewp <drewp@bigasterisk.com>
parents: 819
diff changeset
27 log.warn("update lcd failed, %s" % e)
829
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
28
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
29 try:
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
30 restkit.request(url=self.pingUrl, method="POST", body="")
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
31 except socket.error, e:
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
32 log.warn("ping failed, %s" % e)
805
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 = {
819
43b16f1a4e4a moved frontdoor host
drewp <drewp@bigasterisk.com>
parents: 811
diff changeset
80 'frontDoorArduino': "http://slash:9080/",
829
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
81 'doorChangePost' : 'http://bang:8014/frontDoorChange',
805
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
829
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
85 lcdParts = LcdParts(config['frontDoorArduino'] + 'lcd',
772b2065fca8 front door callbacks
drewp <drewp@bigasterisk.com>
parents: 820
diff changeset
86 config['doorChangePost'])
805
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()