X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=door_daemon.py;h=f17083b3093131dad2270af0d896cb57218ff0cb;hb=d73860aa0723724aa86640c099a8e5a925865c93;hp=8df07611fcecc566cf3357f2d34a4cbf9216dd17;hpb=8a0646b11b10d1aeb930fec838b825e917ba6cc9;p=svn42.git diff --git a/door_daemon.py b/door_daemon.py index 8df0761..f17083b 100755 --- a/door_daemon.py +++ b/door_daemon.py @@ -9,32 +9,38 @@ import time import signal import re import socket +import serial -logging.basicConfig(level=logging.INFO,filename='/var/log/tuer.log',format="%(asctime)s %(message)s",datefmt="%Y-%m-%d %H:%M") +logging.basicConfig(level=logging.INFO,filename='/var/log/tmp/tuer.log',format="%(asctime)s %(message)s",datefmt="%Y-%m-%d %H:%M") class StatusDisplay(): def __init__(self): - self.url_open = 'https://www.realraum.at/cgi/status.cgi?pass=jako16&set=%3Chtml%3E%3Cbody%20bgcolor=%22lime%22%3E%3Ch3%3E%3Ccenter%3ETuer%20ist%20Offen%3C/center%3E%3C/h3%3E%3C/body%3E%3C/html%3E'; - self.url_closed = 'https://www.realraum.at/cgi/status.cgi?pass=jako16&set=%3Chtml%3E%3Cbody%20bgcolor=%22red%22%3E%3Ch3%3E%3Ccenter%3ETuer%20ist%20Geschlossen%3C/center%3E%3C/h3%3E%3C/body%3E%3C/html%3E'; + self.url_open = 'https://www.realraum.at/cgi/status.cgi?pass=jako16&set=%3Chtml%3E%3Cbody%20bgcolor=%22lime%22%3E%3Ccenter%3E%3Cb%3ET%26uuml%3Br%20ist%20Offen%3C/b%3E%3C/center%3E%3C/body%3E%3C/html%3E' + self.url_closed = 'https://www.realraum.at/cgi/status.cgi?pass=jako16&set=%3Chtml%3E%3Cbody%20bgcolor=%22red%22%3E%3Cb%3E%3Ccenter%3ET%26uuml%3Br%20ist%20Geschlossen%3C/center%3E%3C/b%3E%3C/body%3E%3C/html%3E' self.last_status_set="" #object.__init__(self) def display_open(self): if self.last_status_set != self.url_open: self.last_status_set=self.url_open - #print "accessing %s\n" % self.last_status_set - f = urllib.urlopen(self.last_status_set) - f.read() - f.close() - + try: + #print "accessing %s\n" % self.last_status_set + f = urllib.urlopen(self.last_status_set) + f.read() + f.close() + except: + pass + def display_closed(self): if self.last_status_set != self.url_closed: self.last_status_set=self.url_closed - #print "accessing %s\n" % self.last_status_set - f = urllib.urlopen(self.last_status_set) - f.read() - f.close() - + try: + #print "accessing %s\n" % self.last_status_set + f = urllib.urlopen(self.last_status_set) + f.read() + f.close() + except: + pass class ArduinoUSBThread ( threading.Thread ): def __init__(self, file_dev_ttyusb): @@ -47,28 +53,25 @@ class ArduinoUSBThread ( threading.Thread ): self.running=True self.lastline="" self.last_status=None + self.shortsleep = 0 self.cv_updatestatus = threading.Condition(); #lock ist automatically created withing condition self.file_dev_ttyusb=file_dev_ttyusb - #self.fh = open(self.file_dev_ttyusb,"w+") - self.fh = os.fdopen(os.open(self.file_dev_ttyusb, os.O_RDWR | os.O_NONBLOCK),"r+") + self.dev = serial.Serial(port=file_dev_ttyusb, baudrate=9600,timeout=60) #pythons sucks just like perl: we need nonblock or we can't write to FileHandle while we block reading on same filehandle self.statusdisplay = StatusDisplay() threading.Thread.__init__(self) def stop(self): self.running=False - self.fh.close() - if (self.fh): - self.fh.close() + if (self.dev.isOpen()): + self.dev.close() def send_open(self): self.send_statusrequest() self.cv_updatestatus.acquire() if self.re_isidle.search(self.lastline): logging.info("Opening Door") - print("\nSending o..") - self.fh.write("o"); - print("done\n") + self.dev.write("o"); self.cv_updatestatus.release() def send_close(self): @@ -76,43 +79,35 @@ class ArduinoUSBThread ( threading.Thread ): self.cv_updatestatus.acquire() if self.re_isidle.search(self.lastline): logging.info("Closing Door") - print("\nSending c..") - self.fh.write("c"); - print("done\n") + self.dev.write("c"); self.cv_updatestatus.release() def send_toggle(self): self.send_statusrequest() self.cv_updatestatus.acquire() - if self.last_status == "open": - self.cv_updatestatus.release() - self.send_close() - elif self.last_status == "closed": - self.cv_updatestatus.release() - self.send_open() - else: - self.cv_updatestatus.release() - + if self.re_isidle.search(self.lastline): + logging.info("Toggling Door") + self.dev.write("t"); + self.cv_updatestatus.release() + def send_reset(self): - logging.info("Resetting Door") - print("\nSending r..") - self.fh.write("r"); - print("done\n") + self.shortsleep = 20 + logging.info("Resetting Door") + self.dev.write("r"); def send_statusrequest(self): - print("\nSending s..") - self.fh.write("s"); - print("done\n") + self.shortsleep = 20 + self.dev.write("s"); self.cv_updatestatus.acquire() self.cv_updatestatus.wait(5.0) self.cv_updatestatus.release() def run (self): - while (self.running and self.fh): - try: - line = self.fh.readline(); - except IOError, e: - time.sleep(0.5) + if not self.dev.isOpen(): + self.dev.open() + while (self.running and self.dev.isOpen()): + line = self.dev.readline() + if len(line) == 0: continue self.cv_updatestatus.acquire() self.lastline=line.strip() @@ -130,8 +125,8 @@ class ArduinoUSBThread ( threading.Thread ): self.send_reset() self.cv_updatestatus.notifyAll() self.cv_updatestatus.release() - if self.fh: - self.fh.close() + if self.dev.isOpen(): + self.dev.close() class ControlFIFOThread ( threading.Thread ): def __init__(self, file_fifo, arduino): @@ -143,7 +138,7 @@ class ControlFIFOThread ( threading.Thread ): def stop(self): self.running=False - self.fh.close() + self.dev.close() def run (self): self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) @@ -156,7 +151,6 @@ class ControlFIFOThread ( threading.Thread ): while (self.running): self.socketconn, addr = self.socket.accept() self.conn = os.fdopen(self.socketconn.fileno()) - print "a" while 1: #~ line="" #~ while 1: @@ -169,7 +163,6 @@ class ControlFIFOThread ( threading.Thread ): line=self.conn.readline() if not line: break - print "f" m = self.re_cmd.match(line) if not m is None: (cmd,who) = m.group(1,2) @@ -192,7 +185,6 @@ class ControlFIFOThread ( threading.Thread ): logging.info(who) else: logging.info("Invalid Command %s %s" % (cmd,who)) - print "c" self.conn.close() self.socketconn.close() if self.socket: @@ -224,4 +216,4 @@ signal.signal(signal.SIGQUIT, exit_handler) logging.info("Door Daemon started") arduino.join() -ctrlfifo.join() \ No newline at end of file +ctrlfifo.join()