Mercurial > code > home > repos > homeauto
view service/frontDoorMessage/frontDoorMessage.py @ 6:1444da5242d8
logging
Ignore-this: dd7196722e79b696b606f7b6d9930990
author | drewp@bigasterisk.com |
---|---|
date | Sun, 14 Aug 2011 22:41:14 -0700 |
parents | 6fd208b97616 |
children | 875c973febe9 |
line wrap: on
line source
""" holds the current message on the front door lcd """ import cyclone.web, sys import restkit from twisted.internet import reactor from twisted.internet.defer import inlineCallbacks sys.path.append("/my/proj/homeauto/lib") from cycloneerr import PrettyErrorHandler from logsetup import log class LcdParts(object): def __init__(self, putUrl): self.putUrl = putUrl log.info("restarting- message is now empty") 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') reactor.listenTCP(config['servePort'], Application(lcdParts)) reactor.run()