2 # UCC Door Server - Jabber/XMPP door client
4 # Released under an MIT-style license; see COPYING for details.
12 password = open(os.environ['HOME']+ '/.jabberpw', 'r').readline().strip()
15 # XXX: if the server process is not running, this client will terminate
16 # XXX: if the server process stops, there is not notification, and old
17 # statuses will be persisted until it is restarted
19 def __init__(self, doorname):
20 self.presences = {-1: {'show': 'dnd', 'status': 'busted'},
21 0: {'show': 'away', 'status': 'closed'},
22 1: {'show': 'chat', 'status': 'open'},}
25 self.presences = {-1: {'show': 'dnd', 'status': 'busted'},
26 0: {'show': 'away', 'status': 'nothing moves'},
27 1: {'show': 'chat', 'status': 'there is movement'},}
31 # connect to hardware server over D-BUS
32 self.remoteobj = system_bus.get_object('au.asn.ucc.DoorServer',
33 '/au/asn/ucc/doors/' + doorname)
34 self.remoteobj.connect_to_signal('status_changed', self.state_changed,
35 dbus_interface='au.asn.ucc.DoorInterface')
37 # connect to the Jabber server
38 self.jabberclient = xmpp.Client(server, debug=None)
39 self.jabberclient.connect()
40 self.jabberclient.auth(doorname, password)
41 # make self available via jabber, don't bother getting the contact list
42 self.jabberclient.sendInitPresence(requestRoster = 0)
45 new_state = self.remoteobj.get_status(dbus_interface='au.asn.ucc.DoorInterface')
49 self.state_changed(new_state)
51 def state_changed(self, new_state):
52 self.state = new_state
53 # look up the dictionary object for the current state, then construct
54 # a presence object using that as a keyword argument
55 new_presence = xmpp.dispatcher.Presence(**self.presences[new_state])
56 self.jabberclient.send(new_presence)
58 if __name__ == '__main__':
60 from dbus.mainloop.glib import DBusGMainLoop
61 DBusGMainLoop(set_as_default=True)
63 system_bus = dbus.SystemBus()
65 # dictionary to hold door names and objects
66 doors = {'uccdoor': None, 'unisfadoor': None, 'chdoor': None, 'mrdoor': None, 'uccpir': None}
68 # create and save door objects
69 for doorname in doors.keys():
70 doors[doorname] = Door(doorname)
73 loop = gobject.MainLoop()
76 except KeyboardInterrupt: