initial import of D-BUS server
[uccdoor.git] / server.py
1 #! /usr/bin/env python
2 # UCC Door Server - hardware interface server
3 # reads status of reed switches and provides a D-BUS interface to read them
4 # David Adam <zanchey@ucc.gu.uwa.edu.au>
5 # Released under an MIT-style license; see COPYING for details.
6
7 # statuses: 1 means open circuit, 0 means closed circuit, -1 means error
8
9 import dbus, dbus.service
10 import gobject
11
12 class Door(dbus.service.Object):
13     
14     def __init__(self, doorname, bus):
15         self.interval = 10 # seconds
16         self.service = doorname
17         self.status = -1
18         
19         # set up D-BUS service name
20         object_path = '/au/asn/ucc/doors/%s' % doorname
21         dbus.service.Object.__init__(self, bus, object_path)
22         
23         # get initial state
24         self.poll()
25     
26     def poll(self):
27         # check LAT
28         # XXX to be added
29         
30         newstatus = -1
31         if newstatus != self.status:
32             self.status = newstatus
33             # emit signal
34             # XXX to be added
35         
36         # set up timeout again
37         gobject.timeout_add_seconds(self.interval, self.poll)
38     
39     @dbus.service.method('au.asn.ucc.DoorInterface', in_signature='',
40                          out_signature='n')
41     def get_status(self):
42         return self.status
43
44 if __name__ == '__main__':
45     doors = ('uccdoor', 'unisfadoor', 'chdoor', 'mrdoor', 'uccpir')
46     
47     from dbus.mainloop.glib import DBusGMainLoop
48     DBusGMainLoop(set_as_default=True)
49     # get on the bus
50     system_bus = dbus.SystemBus()
51     system_bus.request_name('au.asn.ucc.DoorServer')
52     
53     door_objects = []
54
55     for door in doors:
56         door_objects.append(Door(door, system_bus))
57
58     # engage!
59     loop = gobject.MainLoop()
60     try:
61         loop.run()
62     except KeyboardInterrupt:
63         loop.quit()
64     except:
65         pass

UCC git Repository :: git.ucc.asn.au