X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=update-xmpp-status.py;h=7671300582a92b8c852a810deba80e2b8db78e44;hb=6c2af2c9c5122b663be6c92d4804497e4a926377;hp=a6d133132845eb1371e87c7704ed6d69c103ae1a;hpb=3ee5facd769b111061569c3047a63d33efaa2aef;p=svn42.git diff --git a/update-xmpp-status.py b/update-xmpp-status.py index a6d1331..7671300 100755 --- a/update-xmpp-status.py +++ b/update-xmpp-status.py @@ -31,8 +31,9 @@ class UWSConfig: self.config_parser.add_section('xmpp') self.config_parser.set('xmpp','recipients_debug','xro@jabber.tittelbach.at') self.config_parser.set('xmpp','recipients_normal','xro@jabber.tittelbach.at otti@wirdorange.org') - self.config_parser.set('xmpp','recipients_nooffline','the-equinox@jabber.org') + self.config_parser.set('xmpp','recipients_nooffline','the-equinox@jabber.org davrieb@jabber.ccc.de') self.config_parser.add_section('msg') + self.config_parser.set('msg','bored',"The Button has been pressed ! Maybe somebody want's company. Go Visit !") self.config_parser.set('msg','format',"${status_msg}${request_msg}${comment_msg}") self.config_parser.set('msg','status_opened_msg',"RealRaum door now open") self.config_parser.set('msg','status_closed_msg',"RealRaum door now closed") @@ -41,6 +42,8 @@ class UWSConfig: self.config_parser.set('msg','comment_msg',"\s(${comment})") self.config_parser.set('msg','status_still_opened_msg',"Door remains closed") self.config_parser.set('msg','status_still_closed_msg',"Door remains open") + self.config_parser.add_section('tracker') + self.config_parser.set('tracker','socket',"/var/run/tuer/presence.socket") self.config_parser.add_section('debug') self.config_parser.set('debug','enabled',"False") self.config_mtime=0 @@ -187,7 +190,13 @@ def distributeXmppMsg(msg,high_priority=False,debug=False): sendXmppMsg(uwscfg.xmpp_recipients_nooffline, msg, noofflinemsg=(not high_priority)) else: sendXmppMsg(uwscfg.xmpp_recipients_debug, "D: " + msg) - + +def formatAndDistributePresence(presence): + if presence == "yes": + distributeXmppMsg("Somebody is present right now") + else: + distributeXmppMsg("Nobody is here, everybody left") + current_status = (None, None, None) def filterAndFormatMessage(new_status): global current_status @@ -250,33 +259,31 @@ signal.signal(signal.SIGINT, exitHandler) signal.signal(signal.SIGQUIT, exitHandler) logging.info("Update-Xmpp-Status started") - + if len(sys.argv) > 1: - socketfile = sys.argv[1] -else: - socketfile = "/var/run/tuer/door_cmd.socket" - -if len(sys.argv) > 2: - uwscfg = UWSConfig(sys.argv[2]) + uwscfg = UWSConfig(sys.argv[1]) else: uwscfg = UWSConfig() distributeXmppMsg("update-xmpp-status.py started", debug=True) RE_STATUS = re.compile(r'Status: (\w+), idle') RE_REQUEST = re.compile(r'Request: (\w+) (?:Card )?(.+)') +RE_PRESENCE = re.compile(r'Presence: (yes|no)') +RE_BUTTON = re.compile(r'PanicButton|button\d?') RE_ERROR = re.compile(r'Error: (.+)') while True: try: - if not os.path.exists(socketfile): - logging.debug("Socketfile '%s' not found, waiting 5 secs" % socketfile) + if not os.path.exists(uwscfg.tracker_socket): + logging.debug("Socketfile '%s' not found, waiting 5 secs" % uwscfg.tracker_socket) time.sleep(5) continue sockhandle = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - sockhandle.connect(socketfile) + sockhandle.connect(uwscfg.tracker_socket) conn = os.fdopen(sockhandle.fileno()) - sockhandle.send("listen\n") - sockhandle.send("status\n") + #sockhandle.send("listen\n") + #sockhandle.send("status\n") last_request = (None, None) + not_initial_presence = False while True: line = conn.readline() logging.debug("Got Line: " + line) @@ -286,23 +293,38 @@ while True: if line == "": raise Exception("EOF on Socket, daemon seems to have quit") + m = RE_BUTTON.match(line) + if not m is None: + distributeXmppMsg(uwscfg.msg_bored) + continue + m = RE_PRESENCE.match(line) + if not m is None: + if not_initial_presence: + formatAndDistributePresence(m.group(1)) + else: + not_initial_presence=True + distributeXmppMsg("Initial Presence received: %s" % m.group(1) ,debug=True) + continue m = RE_STATUS.match(line) if not m is None: status = m.group(1) filterAndFormatMessage((status,) + last_request) + last_request = (None, None) + continue m = RE_REQUEST.match(line) if not m is None: last_request = m.group(1,2) - else: - last_request = (None, None) + continue m = RE_ERROR.match(line) if not m is None: errorstr = m.group(1) if "too long!" in errorstr: filterAndFormatMessage(("error",) + last_request) + last_request = (None, None) else: logging.error("Recieved Error: "+errorstr) distributeXmppMsg("Error: "+errorstr, debug=True) + last_request = (None, None) except Exception, ex: logging.error("main: "+str(ex)) try: @@ -312,4 +334,3 @@ while True: conn=None sockhandle=None time.sleep(5) -