|
@@ -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 |