Browse Source

Relay changed events. Cleanup.

pyserial_fix
Scott Petersen 11 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_low_battery = event.Event('Called when the device detects a low battery.')
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
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._battery_status = (False, 0)
self._panic_status = None
self._relay_status = dict()

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

if header == '!EXP' or header == '!REL':
msg = messages.ExpanderMessage(data)

self._update_internal_states(msg)

elif header == '!RFX':
msg = self._handle_rfx(data)

elif header == '!LRR':
msg = self._handle_lrr(data)

elif data.startswith('!Ready'):
self.on_boot()

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

@@ -510,6 +517,12 @@ class AD2USB(object):
self._fire_status = (message.fire_alarm, time.time())
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)

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(',')

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':
self.type = ExpanderMessage.ZONE
@@ -173,7 +173,7 @@ class RFMessage(object):
"""
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):
"""


+ 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))

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

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

except IndexError:
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
# alpha message.
if zone == 191:
# TODO: parse message text.
zone_regex = re.compile('^CHECK (\d+).*$')

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

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


+ 4
- 0
test.py View File

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

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

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

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


Loading…
Cancel
Save