diff --git a/alarmdecoder/decoder.py b/alarmdecoder/decoder.py index 6345c50..6312f61 100644 --- a/alarmdecoder/decoder.py +++ b/alarmdecoder/decoder.py @@ -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): """