Browse Source

Added support for old-style messages in the LRRSystem.

pyserial_fix
Scott Petersen 7 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 *.egg-info
bin/ad2-test bin/ad2-test
*~ *~
.vscode

+ 0
- 10
alarmdecoder/decoder.py View File

@@ -458,17 +458,7 @@ class AlarmDecoder(object):
""" """
msg = LRRMessage(data) 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._lrr_system.update(msg)

self.on_lrr_message(message=msg) self.on_lrr_message(message=msg)


return 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 from .events import LRR_EVENT_TYPE



class LRRMessage(BaseMessage): class LRRMessage(BaseMessage):
""" """
Represent a message from a Long Range Radio or emulated Long Range Radio. 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.""" """The partition that this message applies to."""
event_type = None event_type = None
"""The type of the event that occurred.""" """The type of the event that occurred."""
version = 0
"""LRR message version"""


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


event_type_data = self.event_type.split('_') event_type_data = self.event_type.split('_')
self.event_prefix = event_type_data[0] 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_status = int(event_type_data[1][0])
self.event_code = int(event_type_data[1][1:], 16) self.event_code = int(event_type_data[1][1:], 16)


self.partition = int(self.partition)

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



def dict(self, **kwargs): def dict(self, **kwargs):
""" """
Dictionary representation. Dictionary representation.
@@ -96,3 +99,18 @@ class LRRMessage(BaseMessage):
event_code = hex(self.event_code), event_code = hex(self.event_code),
**kwargs **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())) 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 return handled




Loading…
Cancel
Save