Mercurial > code > home > repos > homeauto
view 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 |
line wrap: on
line source
""" 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()