@@ -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 | ||||