Browse Source

Separated out expander messages into their own event and limited on_message to just triggering off of keypad

pyserial_fix
Scott Petersen 11 years ago
parent
commit
8168d59af5
1 changed files with 41 additions and 13 deletions
  1. +41
    -13
      alarmdecoder/decoder.py

+ 41
- 13
alarmdecoder/decoder.py View File

@@ -35,7 +35,8 @@ class AlarmDecoder(object):
on_relay_changed = event.Event("This event is called when a relay is opened or closed on an expander board.\n\n**Callback definition:** *def callback(device, message)*")

# Mid-level Events
on_message = event.Event("This event is called when any message is received.\n\n**Callback definition:** *def callback(device, message)*")
on_message = event.Event("This event is called when standard panel :py:class:`~alarmdecoder.messages.Message` is received.\n\n**Callback definition:** *def callback(device, message)*")
on_expander_message = event.Event("This event is called when an :py:class:`~alarmdecoder.messages.ExpanderMessage` is received.\n\n**Callback definition:** *def callback(device, message)*")
on_lrr_message = event.Event("This event is called when an :py:class:`~alarmdecoder.messages.LRRMessage` is received.\n\n**Callback definition:** *def callback(device, message)*")
on_rfx_message = event.Event("This event is called when an :py:class:`~alarmdecoder.messages.RFMessage` is received.\n\n**Callback definition:** *def callback(device, message)*")

@@ -286,9 +287,9 @@ class AlarmDecoder(object):

def _handle_message(self, data):
"""
Parses messages from the panel.
Parses keypad messages from the panel.

:param data: panel data to parse
:param data: keypad data to parse
:type data: string

:returns: :py:class:`~alarmdecoder.messages.Message`
@@ -300,15 +301,10 @@ class AlarmDecoder(object):
header = data[0:4]

if header[0] != '!' or header == '!KPE':
msg = Message(data)

if self.address_mask & msg.mask > 0:
self._update_internal_states(msg)
msg = self._handle_keypad_message(data)

elif header == '!EXP' or header == '!REL':
msg = ExpanderMessage(data)

self._update_internal_states(msg)
msg = self._handle_expander_message(data)

elif header == '!RFX':
msg = self._handle_rfx(data)
@@ -324,6 +320,40 @@ class AlarmDecoder(object):

return msg

def _handle_keypad_message(self, data):
"""
Handle keypad messages.

:param data: keypad message to parse
:type data: string

:returns: :py:class:`~alarmdecoder.messages.Message`
"""
msg = Message(data)

if self.address_mask & msg.mask > 0:
self._update_internal_states(msg)

self.on_message(message=msg)

return msg

def _handle_expander_message(self, data):
"""
Handle expander messages.

:param data: expander message to parse
:type data: string

:returns: :py:class:`~alarmdecoder.messages.ExpanderMessage`
"""
msg = ExpanderMessage(data)

self._update_internal_states(msg)
self.on_expander_message(message=msg)

return msg

def _handle_rfx(self, data):
"""
Handle RF messages.
@@ -581,9 +611,7 @@ class AlarmDecoder(object):
data = kwargs.get('data', None)
self.on_read(data=data)

msg = self._handle_message(data)
if msg:
self.on_message(message=msg)
self._handle_message(data)

def _on_write(self, sender, *args, **kwargs):
"""


Loading…
Cancel
Save