| @@ -195,6 +195,7 @@ class AD2USB(object): | |||||
| # Mid-level Events | # Mid-level Events | ||||
| on_message = event.Event('Called when a message has been received from the device.') | 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_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 | # Low-level Events | ||||
| on_open = event.Event('Called when the device has been opened.') | on_open = event.Event('Called when the device has been opened.') | ||||
| @@ -388,7 +389,7 @@ class AD2USB(object): | |||||
| msg = messages.ExpanderMessage(data) | msg = messages.ExpanderMessage(data) | ||||
| self._update_internal_states(msg) | self._update_internal_states(msg) | ||||
| elif header == '!RFX': | elif header == '!RFX': | ||||
| msg = messages.RFMessage(data) | |||||
| msg = self._handle_rfx(data) | |||||
| elif header == '!LRR': | elif header == '!LRR': | ||||
| msg = self._handle_lrr(data) | msg = self._handle_lrr(data) | ||||
| elif data.startswith('!Ready'): | elif data.startswith('!Ready'): | ||||
| @@ -398,6 +399,13 @@ class AD2USB(object): | |||||
| return msg | return msg | ||||
| def _handle_rfx(self, data): | |||||
| msg = messages.RFMessage(data) | |||||
| self.on_rfx_message(msg) | |||||
| return msg | |||||
| def _handle_lrr(self, data): | def _handle_lrr(self, data): | ||||
| """ | """ | ||||
| Handle Long Range Radio messages. | Handle Long Range Radio messages. | ||||
| @@ -162,6 +162,9 @@ class RFMessage(object): | |||||
| self.raw = None | self.raw = None | ||||
| self.serial_number = None | self.serial_number = None | ||||
| self.value = None | self.value = None | ||||
| self.battery = None | |||||
| self.supervision = None | |||||
| self.loop = dict() | |||||
| if data is not None: | if data is not None: | ||||
| self._parse_message(data) | self._parse_message(data) | ||||
| @@ -183,6 +186,18 @@ class RFMessage(object): | |||||
| _, values = data.split(':') | _, values = data.split(':') | ||||
| self.serial_number, self.value = values.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): | class LRRMessage(object): | ||||
| """ | """ | ||||
| @@ -103,6 +103,9 @@ def handle_lrr(sender, args): | |||||
| def handle_panic(sender, args): | def handle_panic(sender, args): | ||||
| print 'PANIC!', args | print 'PANIC!', args | ||||
| def handle_rfx(sender, args): | |||||
| print 'RFX', args | |||||
| def upload_usb(): | def upload_usb(): | ||||
| dev = pyad2usb.ad2usb.devices.USBDevice() | dev = pyad2usb.ad2usb.devices.USBDevice() | ||||
| @@ -248,8 +251,9 @@ def test_socket(): | |||||
| #a2u.on_config_received += handle_config | #a2u.on_config_received += handle_config | ||||
| #a2u.on_arm += handle_arm | #a2u.on_arm += handle_arm | ||||
| #a2u.on_disarm += handle_disarm | #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_fire += handle_fire | ||||
| #a2u.on_low_battery += handle_battery | #a2u.on_low_battery += handle_battery | ||||