Browse Source

Relay changed events. Cleanup.

pyserial_fix
Scott Petersen 12 years ago
parent
commit
9f8ec53987
4 changed files with 25 additions and 7 deletions
  1. +13
    -0
      pyad2usb/ad2usb.py
  2. +4
    -4
      pyad2usb/messages.py
  3. +4
    -3
      pyad2usb/zonetracking.py
  4. +4
    -0
      test.py

+ 13
- 0
pyad2usb/ad2usb.py View File

@@ -191,6 +191,7 @@ class AD2USB(object):
on_zone_restore = event.Event('Called when the device detects that a fault is restored.') 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_low_battery = event.Event('Called when the device detects a low battery.')
on_panic = event.Event('Called when the device detects a panic.') on_panic = event.Event('Called when the device detects a panic.')
on_relay_changed = event.Event('Called when a relay is opened or closed on an expander board.')


# 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.')
@@ -235,6 +236,7 @@ class AD2USB(object):
self._fire_status = (False, 0) self._fire_status = (False, 0)
self._battery_status = (False, 0) self._battery_status = (False, 0)
self._panic_status = None self._panic_status = None
self._relay_status = dict()


self.address = 18 self.address = 18
self.configbits = 0xFF00 self.configbits = 0xFF00
@@ -387,13 +389,18 @@ class AD2USB(object):


if header == '!EXP' or header == '!REL': if header == '!EXP' or header == '!REL':
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 = self._handle_rfx(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'):
self.on_boot() self.on_boot()

elif data.startswith('!CONFIG'): elif data.startswith('!CONFIG'):
self._handle_config(data) self._handle_config(data)


@@ -510,6 +517,12 @@ class AD2USB(object):
self._fire_status = (message.fire_alarm, time.time()) self._fire_status = (message.fire_alarm, time.time())
self.on_fire(self._fire_status) self.on_fire(self._fire_status)


elif isinstance(message, messages.ExpanderMessage):
if message.type == messages.ExpanderMessage.RELAY:
self._relay_status[(message.address, message.channel)] = message.value

self.on_relay_changed(message)

self._update_zone_tracker(message) self._update_zone_tracker(message)


def _update_zone_tracker(self, message): def _update_zone_tracker(self, message):


+ 4
- 4
pyad2usb/messages.py View File

@@ -138,9 +138,9 @@ class ExpanderMessage(object):
address, channel, value = values.split(',') address, channel, value = values.split(',')


self.raw = data self.raw = data
self.address = address
self.channel = channel
self.value = value
self.address = int(address)
self.channel = int(channel)
self.value = int(value)


if header == '!EXP': if header == '!EXP':
self.type = ExpanderMessage.ZONE self.type = ExpanderMessage.ZONE
@@ -173,7 +173,7 @@ class RFMessage(object):
""" """
String conversion operator. String conversion operator.
""" """
return 'rf > {0}: {1}'.format(self.serial_number, self.value)
return 'rf > {0}: {1:x}'.format(self.serial_number, self.value)


def _parse_message(self, data): def _parse_message(self, data):
""" """


+ 4
- 3
pyad2usb/zonetracking.py View File

@@ -82,13 +82,14 @@ class Zonetracker(object):
zone = self._expander_to_zone(int(message.address), int(message.channel)) zone = self._expander_to_zone(int(message.address), int(message.channel))


status = Zone.CLEAR status = Zone.CLEAR
if int(message.value) == 1:
if message.value == 1:
status = Zone.FAULT status = Zone.FAULT
elif int(message.value) == 2:
elif message.value == 2:
status = Zone.CHECK status = Zone.CHECK


try: try:
self._update_zone(zone, status=status) self._update_zone(zone, status=status)

except IndexError: except IndexError:
self._add_zone(zone, status=status) self._add_zone(zone, status=status)


@@ -114,7 +115,6 @@ class Zonetracker(object):
# of whether or not the 3-digit mode is enabled... so we have to pull it out of the # of whether or not the 3-digit mode is enabled... so we have to pull it out of the
# alpha message. # alpha message.
if zone == 191: if zone == 191:
# TODO: parse message text.
zone_regex = re.compile('^CHECK (\d+).*$') zone_regex = re.compile('^CHECK (\d+).*$')


m = zone_regex.match(message.text) m = zone_regex.match(message.text)
@@ -127,6 +127,7 @@ class Zonetracker(object):
if zone in self._zones_faulted: if zone in self._zones_faulted:
self._update_zone(zone) self._update_zone(zone)
self._clear_zones(zone) self._clear_zones(zone)

else: else:
status = Zone.FAULT status = Zone.FAULT
if message.check_zone: if message.check_zone:


+ 4
- 0
test.py View File

@@ -106,6 +106,9 @@ def handle_panic(sender, args):
def handle_rfx(sender, args): def handle_rfx(sender, args):
print 'RFX', args print 'RFX', args


def handle_relay(sender, args):
print 'RELAY', args

def upload_usb(): def upload_usb():
dev = pyad2usb.ad2usb.devices.USBDevice() dev = pyad2usb.ad2usb.devices.USBDevice()


@@ -254,6 +257,7 @@ def test_socket():
a2u.on_zone_fault += handle_fault a2u.on_zone_fault += handle_fault
a2u.on_zone_restore += handle_restore a2u.on_zone_restore += handle_restore
a2u.on_rfx_message += handle_rfx a2u.on_rfx_message += handle_rfx
a2u.on_relay_changed += handle_relay
# #
#a2u.on_fire += handle_fire #a2u.on_fire += handle_fire
#a2u.on_low_battery += handle_battery #a2u.on_low_battery += handle_battery


Loading…
Cancel
Save