Browse Source

Added support for old-style messages in the LRRSystem.

pyserial_fix
Scott Petersen 6 years ago
parent
commit
e8913be789
4 changed files with 47 additions and 28 deletions
  1. +1
    -0
      .gitignore
  2. +0
    -10
      alarmdecoder/decoder.py
  3. +23
    -5
      alarmdecoder/messages/lrr/message.py
  4. +23
    -13
      alarmdecoder/messages/lrr/system.py

+ 1
- 0
.gitignore View File

@@ -8,3 +8,4 @@ tmp
*.egg-info
bin/ad2-test
*~
.vscode

+ 0
- 10
alarmdecoder/decoder.py View File

@@ -458,17 +458,7 @@ class AlarmDecoder(object):
"""
msg = LRRMessage(data)

# if msg.event_type == 'ALARM_PANIC':
# self._panic_status = True
# self.on_panic(status=True)
#
# elif msg.event_type == 'CANCEL':
# if self._panic_status is True:
# self._panic_status = False
# self.on_panic(status=False)

self._lrr_system.update(msg)

self.on_lrr_message(message=msg)

return msg


+ 23
- 5
alarmdecoder/messages/lrr/message.py View File

@@ -14,6 +14,7 @@ from ...util import InvalidMessageError

from .events import LRR_EVENT_TYPE


class LRRMessage(BaseMessage):
"""
Represent a message from a Long Range Radio or emulated Long Range Radio.
@@ -25,12 +26,14 @@ class LRRMessage(BaseMessage):
"""The partition that this message applies to."""
event_type = None
"""The type of the event that occurred."""
version = 0
"""LRR message version"""

report_code = 0xFF
"""The report code used to override the last two digits of the event type."""
event_prefix = ''
"""Extracted prefix for the event_type."""
event_source = 0
event_source = LRR_EVENT_TYPE.UNKNOWN
"""Extracted event type source."""
event_status = 0
"""Event status flag that represents triggered or restored events."""
@@ -65,21 +68,21 @@ class LRRMessage(BaseMessage):
values = values.split(',')
if len(values) <= 3:
self.event_data, self.partition, self.event_type = values
self.version = 1
else:
self.event_data, self.partition, self.event_type, self.report_code = values
self.version = 2

event_type_data = self.event_type.split('_')
self.event_prefix = event_type_data[0]
if self.event_prefix == 'CID':
self.event_source = LRR_EVENT_TYPE.CID
self.event_source = _get_event_source(self.event_prefix)
self.event_status = int(event_type_data[1][0])
self.event_code = int(event_type_data[1][1:], 16)

self.partition = int(self.partition)

except ValueError:
raise InvalidMessageError('Received invalid message: {0}'.format(data))


def dict(self, **kwargs):
"""
Dictionary representation.
@@ -96,3 +99,18 @@ class LRRMessage(BaseMessage):
event_code = hex(self.event_code),
**kwargs
)


def _get_event_source(prefix):
source = LRR_EVENT_TYPE.UNKNOWN

if prefix == 'CID':
source = LRR_EVENT_TYPE.CID
elif prefix == 'DSC':
source = LRR_EVENT_TYPE.DSC
elif prefix == 'AD2':
source = LRR_EVENT_TYPE.ALARMDECODER
elif prefix == 'ADEMCO':
source = LRR_EVENT_TYPE.ADEMCO

return source

+ 23
- 13
alarmdecoder/messages/lrr/system.py View File

@@ -13,19 +13,29 @@ class LRRSystem(object):

print("LRR Message: {0}".format(message.dict()))

source = message.event_source
if source == LRR_EVENT_TYPE.CID:
handled = self._handle_cid_message(message)
elif source == LRR_EVENT_TYPE.DSC:
handled = self._handle_dsc_message(message)
elif source == LRR_EVENT_TYPE.ADEMCO:
handled = self._handle_ademco_message(message)
elif source == LRR_EVENT_TYPE.ALARMDECODER:
handled = self._handle_alarmdecoder_message(message)
elif source == LRR_EVENT_TYPE.UNKNOWN:
handled = self._handle_unknown_message(message)
else:
pass
if message.version == 1:
if msg.event_type == 'ALARM_PANIC':
self._alarmdecoder._update_panic_status(True)
handled = True
elif msg.event_type == 'CANCEL':
self._alarmdecoder._update_panic_status(False)
handled = True

elif message.version == 2:
source = message.event_source
if source == LRR_EVENT_TYPE.CID:
handled = self._handle_cid_message(message)
elif source == LRR_EVENT_TYPE.DSC:
handled = self._handle_dsc_message(message)
elif source == LRR_EVENT_TYPE.ADEMCO:
handled = self._handle_ademco_message(message)
elif source == LRR_EVENT_TYPE.ALARMDECODER:
handled = self._handle_alarmdecoder_message(message)
elif source == LRR_EVENT_TYPE.UNKNOWN:
handled = self._handle_unknown_message(message)
else:
pass

return handled



Loading…
Cancel
Save