diff --git a/pyad2usb/ad2usb.py b/pyad2usb/ad2usb.py index 132bced..acdcd24 100644 --- a/pyad2usb/ad2usb.py +++ b/pyad2usb/ad2usb.py @@ -195,6 +195,7 @@ class AD2USB(object): # Mid-level Events on_message = event.Event('Called when a message has been received from the device.') on_lrr_message = event.Event('Called when an LRR message is received.') + on_rfx_message = event.Event('Called when an RFX message is received.') # Low-level Events on_open = event.Event('Called when the device has been opened.') @@ -388,7 +389,7 @@ class AD2USB(object): msg = messages.ExpanderMessage(data) self._update_internal_states(msg) elif header == '!RFX': - msg = messages.RFMessage(data) + msg = self._handle_rfx(data) elif header == '!LRR': msg = self._handle_lrr(data) elif data.startswith('!Ready'): @@ -398,6 +399,13 @@ class AD2USB(object): return msg + def _handle_rfx(self, data): + msg = messages.RFMessage(data) + + self.on_rfx_message(msg) + + return msg + def _handle_lrr(self, data): """ Handle Long Range Radio messages. diff --git a/pyad2usb/messages.py b/pyad2usb/messages.py index 21f6f84..5ea834e 100644 --- a/pyad2usb/messages.py +++ b/pyad2usb/messages.py @@ -162,6 +162,9 @@ class RFMessage(object): self.raw = None self.serial_number = None self.value = None + self.battery = None + self.supervision = None + self.loop = dict() if data is not None: self._parse_message(data) @@ -183,6 +186,18 @@ class RFMessage(object): _, values = data.split(':') self.serial_number, self.value = values.split(',') + self.value = int(self.value, 16) + + test_bit = lambda v, b: v & (1 << b) > 0 + + # Bit 1 = unknown + self.battery = test_bit(self.value, 2) + self.supervision = test_bit(self.value, 3) + # Bit 8 = unknown + self.loop[0] = test_bit(self.value, 5) + self.loop[1] = test_bit(self.value, 6) + self.loop[2] = test_bit(self.value, 7) + self.loop[3] = test_bit(self.value, 8) class LRRMessage(object): """ diff --git a/test.py b/test.py index 8339ad4..eaf1488 100755 --- a/test.py +++ b/test.py @@ -103,6 +103,9 @@ def handle_lrr(sender, args): def handle_panic(sender, args): print 'PANIC!', args +def handle_rfx(sender, args): + print 'RFX', args + def upload_usb(): dev = pyad2usb.ad2usb.devices.USBDevice() @@ -248,8 +251,9 @@ def test_socket(): #a2u.on_config_received += handle_config #a2u.on_arm += handle_arm #a2u.on_disarm += handle_disarm - #a2u.on_zone_fault += handle_fault - #a2u.on_zone_restore += handle_restore + a2u.on_zone_fault += handle_fault + a2u.on_zone_restore += handle_restore + a2u.on_rfx_message += handle_rfx # #a2u.on_fire += handle_fire #a2u.on_low_battery += handle_battery