From bf98aae391565c4683a93fa47c83bb940a5b6f04 Mon Sep 17 00:00:00 2001 From: Scott Petersen Date: Wed, 19 Jun 2013 12:45:38 -0700 Subject: [PATCH] Added basic lrr/panic handling. --- pyad2usb/ad2usb.py | 25 +++++++++++++++++++++++-- test.py | 8 ++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pyad2usb/ad2usb.py b/pyad2usb/ad2usb.py index a4c2235..2e7211f 100644 --- a/pyad2usb/ad2usb.py +++ b/pyad2usb/ad2usb.py @@ -164,9 +164,11 @@ class AD2USB(object): on_zone_fault = event.Event('Called when the device detects a zone fault.') on_zone_restore = event.Event('Called when the device detects that a fault is restored.') on_low_battery = event.Event('Called when the device detects a low battery.') + on_panic = event.Event('Called when the device detects a panic.') # 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.') # Low-level Events on_open = event.Event('Called when the device has been opened.') @@ -193,6 +195,7 @@ class AD2USB(object): self._armed_status = None self._fire_status = None self._battery_status = None + self._panic_status = None self.address = 18 self.configbits = 0xFF00 @@ -321,7 +324,7 @@ class AD2USB(object): elif header == '!RFX': msg = messages.RFMessage(data) elif header == '!LRR': - msg = messages.LRRMessage(data) + msg = self._handle_lrr(data) elif data.startswith('!Ready'): self.on_boot() elif data.startswith('!CONFIG'): @@ -329,6 +332,25 @@ class AD2USB(object): return msg + def _handle_lrr(self, data): + """ + """ + msg = messages.LRRMessage(data) + + args = (msg._partition, msg._event_type, msg._event_data) + if msg._event_type == 'ALARM_PANIC': + self._panic_status = True + self.on_panic(args + (True,)) + + elif msg._event_type == 'CANCEL': + if self._panic_status == True: + self._panic_status = False + self.on_panic(args + (False,)) + + self.on_lrr_message(args) + + return msg + def _handle_config(self, data): """ Handles received configuration data. @@ -405,7 +427,6 @@ class AD2USB(object): self._update_zone_tracker(message) - def _update_zone_tracker(self, message): # Retrieve a list of faults. # NOTE: This only happens on first boot or after exiting programming mode. diff --git a/test.py b/test.py index d855d61..f71fbfc 100755 --- a/test.py +++ b/test.py @@ -96,6 +96,12 @@ def handle_battery(sender, args): def handle_fire(sender, args): print 'FIRE!', args +def handle_lrr(sender, args): + print 'LRR', args + +def handle_panic(sender, args): + print 'PANIC!', args + def upload_usb(): dev = pyad2usb.ad2usb.devices.USBDevice() @@ -246,6 +252,8 @@ def test_socket(): # a2u.on_fire += handle_fire a2u.on_low_battery += handle_battery + a2u.on_lrr_message += handle_lrr + a2u.on_panic += handle_panic a2u.open()