Mercurial > code > home > repos > homeauto
diff service/frontDoorMessage/frontDoorMessage.py @ 805:9e99114dde57
start
Ignore-this: e06ac598970a0d4750f588ab89f56996
darcs-hash:20110801103030-836b1-376453383c1b9c6daac50cc790aa98906846fe56.gz
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Mon, 01 Aug 2011 03:30:30 -0700 |
parents | |
children | 1444da5242d8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/frontDoorMessage/frontDoorMessage.py Mon Aug 01 03:30:30 2011 -0700 @@ -0,0 +1,80 @@ +""" +holds the current message on the front door lcd +""" +import cyclone.web, sys +import restkit +from twisted.python import log +from twisted.internet import reactor +from twisted.internet.defer import inlineCallbacks +sys.path.append("/my/proj/homeauto/lib") +from cycloneerr import PrettyErrorHandler + +class LcdParts(object): + def __init__(self, putUrl): + self.putUrl = putUrl + self.message = "" + self.lastLine = "" + + def updateLcd(self): + whole = "%-147s%-21s" % (self.message, self.lastLine) + restkit.request(url=self.putUrl, + method="PUT", + body=whole, + headers={"content-type":"text/plain"}) + +class Index(PrettyErrorHandler, cyclone.web.RequestHandler): + @inlineCallbacks + def get(self): + + # refresh output, and make an error if we can't talk to them + yield self.settings.lcdParts.updateLcd() + + self.set_header("Content-Type", "application/xhtml+xml") + self.write(open("index.html").read()) + +def getArg(s): + return s.request.body.encode("ascii") + +class Message(PrettyErrorHandler, cyclone.web.RequestHandler): + def get(self): + self.set_header("Content-Type", "text/plain") + self.write(self.settings.lcdParts.message) + + def put(self): + self.settings.lcdParts.message = getArg(self) + self.settings.lcdParts.updateLcd() + self.set_status(204) + +class LastLine(PrettyErrorHandler, cyclone.web.RequestHandler): + def get(self): + self.set_header("Content-Type", "text/plain") + self.write(self.settings.lcdParts.lastLine) + + def put(self): + self.settings.lcdParts.lastLine = getArg(self) + self.settings.lcdParts.updateLcd() + self.set_status(204) + +class Application(cyclone.web.Application): + def __init__(self, lcdParts): + handlers = [ + (r"/", Index), + (r"/message", Message), + (r'/lastLine', LastLine), + ] + settings = {"lcdParts" : lcdParts} + cyclone.web.Application.__init__(self, handlers, **settings) + +if __name__ == '__main__': + + config = { + 'frontDoorArduino': "http://space:9080/", + 'doorChangePost' : 'http://bang.bigasterisk.com:9069/inputChange', + 'servePort' : 9081, + } + + lcdParts = LcdParts(config['frontDoorArduino'] + 'lcd') + + log.startLogging(sys.stdout) + reactor.listenTCP(config['servePort'], Application(lcdParts)) + reactor.run()