|
import unittest
|
|
|
|
from decimal import Decimal
|
|
|
|
from dsmr_parser.objects import MBusObject, CosemObject
|
|
from dsmr_parser.parsers import TelegramParser
|
|
from dsmr_parser import telegram_specifications
|
|
from dsmr_parser import obis_references as obis
|
|
from test.example_telegrams import TELEGRAM_V2_2
|
|
|
|
|
|
class TelegramParserV2_2Test(unittest.TestCase):
|
|
""" Test parsing of a DSMR v2.2 telegram. """
|
|
|
|
def test_parse(self):
|
|
parser = TelegramParser(telegram_specifications.V2_2)
|
|
result = parser.parse(TELEGRAM_V2_2)
|
|
|
|
# ELECTRICITY_USED_TARIFF_1 (1-0:1.8.1)
|
|
assert isinstance(result[obis.ELECTRICITY_USED_TARIFF_1], CosemObject)
|
|
assert result[obis.ELECTRICITY_USED_TARIFF_1].unit == 'kWh'
|
|
assert isinstance(result[obis.ELECTRICITY_USED_TARIFF_1].value, Decimal)
|
|
assert result[obis.ELECTRICITY_USED_TARIFF_1].value == Decimal('1.001')
|
|
|
|
# ELECTRICITY_USED_TARIFF_2 (1-0:1.8.2)
|
|
assert isinstance(result[obis.ELECTRICITY_USED_TARIFF_2], CosemObject)
|
|
assert result[obis.ELECTRICITY_USED_TARIFF_2].unit == 'kWh'
|
|
assert isinstance(result[obis.ELECTRICITY_USED_TARIFF_2].value, Decimal)
|
|
assert result[obis.ELECTRICITY_USED_TARIFF_2].value == Decimal('1.001')
|
|
|
|
# ELECTRICITY_DELIVERED_TARIFF_1 (1-0:2.8.1)
|
|
assert isinstance(result[obis.ELECTRICITY_DELIVERED_TARIFF_1], CosemObject)
|
|
assert result[obis.ELECTRICITY_DELIVERED_TARIFF_1].unit == 'kWh'
|
|
assert isinstance(result[obis.ELECTRICITY_DELIVERED_TARIFF_1].value, Decimal)
|
|
assert result[obis.ELECTRICITY_DELIVERED_TARIFF_1].value == Decimal('1.001')
|
|
|
|
# ELECTRICITY_DELIVERED_TARIFF_2 (1-0:2.8.2)
|
|
assert isinstance(result[obis.ELECTRICITY_DELIVERED_TARIFF_2], CosemObject)
|
|
assert result[obis.ELECTRICITY_DELIVERED_TARIFF_2].unit == 'kWh'
|
|
assert isinstance(result[obis.ELECTRICITY_DELIVERED_TARIFF_2].value, Decimal)
|
|
assert result[obis.ELECTRICITY_DELIVERED_TARIFF_2].value == Decimal('1.001')
|
|
|
|
# ELECTRICITY_ACTIVE_TARIFF (0-0:96.14.0)
|
|
assert isinstance(result[obis.ELECTRICITY_ACTIVE_TARIFF], CosemObject)
|
|
assert result[obis.ELECTRICITY_ACTIVE_TARIFF].unit is None
|
|
assert isinstance(result[obis.ELECTRICITY_ACTIVE_TARIFF].value, str)
|
|
assert result[obis.ELECTRICITY_ACTIVE_TARIFF].value == '0001'
|
|
|
|
# EQUIPMENT_IDENTIFIER (0-0:96.1.1)
|
|
assert isinstance(result[obis.EQUIPMENT_IDENTIFIER], CosemObject)
|
|
assert result[obis.EQUIPMENT_IDENTIFIER].unit is None
|
|
assert isinstance(result[obis.EQUIPMENT_IDENTIFIER].value, str)
|
|
assert result[obis.EQUIPMENT_IDENTIFIER].value == '00000000000000'
|
|
|
|
# CURRENT_ELECTRICITY_USAGE (1-0:1.7.0)
|
|
assert isinstance(result[obis.CURRENT_ELECTRICITY_USAGE], CosemObject)
|
|
assert result[obis.CURRENT_ELECTRICITY_USAGE].unit == 'kW'
|
|
assert isinstance(result[obis.CURRENT_ELECTRICITY_USAGE].value, Decimal)
|
|
assert result[obis.CURRENT_ELECTRICITY_USAGE].value == Decimal('1.01')
|
|
|
|
# CURRENT_ELECTRICITY_DELIVERY (1-0:2.7.0)
|
|
assert isinstance(result[obis.CURRENT_ELECTRICITY_DELIVERY], CosemObject)
|
|
assert result[obis.CURRENT_ELECTRICITY_DELIVERY].unit == 'kW'
|
|
assert isinstance(result[obis.CURRENT_ELECTRICITY_DELIVERY].value, Decimal)
|
|
assert result[obis.CURRENT_ELECTRICITY_DELIVERY].value == Decimal('0')
|
|
|
|
# TEXT_MESSAGE_CODE (0-0:96.13.1)
|
|
assert isinstance(result[obis.TEXT_MESSAGE_CODE], CosemObject)
|
|
assert result[obis.TEXT_MESSAGE_CODE].unit is None
|
|
|
|
# TEXT_MESSAGE (0-0:96.13.0)
|
|
assert isinstance(result[obis.TEXT_MESSAGE], CosemObject)
|
|
assert result[obis.TEXT_MESSAGE].unit is None
|
|
assert result[obis.TEXT_MESSAGE].value is None
|
|
|
|
# DEVICE_TYPE (0-x:24.1.0)
|
|
assert isinstance(result[obis.TEXT_MESSAGE], CosemObject)
|
|
assert result[obis.DEVICE_TYPE].unit is None
|
|
assert isinstance(result[obis.DEVICE_TYPE].value, str)
|
|
assert result[obis.DEVICE_TYPE].value == '3'
|
|
|
|
# EQUIPMENT_IDENTIFIER_GAS (0-x:96.1.0)
|
|
assert isinstance(result[obis.EQUIPMENT_IDENTIFIER_GAS], CosemObject)
|
|
assert result[obis.EQUIPMENT_IDENTIFIER_GAS].unit is None
|
|
assert isinstance(result[obis.EQUIPMENT_IDENTIFIER_GAS].value, str)
|
|
assert result[obis.EQUIPMENT_IDENTIFIER_GAS].value == '000000000000'
|
|
|
|
# GAS_METER_READING (0-1:24.3.0)
|
|
assert isinstance(result[obis.GAS_METER_READING], MBusObject)
|
|
assert result[obis.GAS_METER_READING].unit == 'm3'
|
|
assert isinstance(result[obis.GAS_METER_READING].value, Decimal)
|
|
assert result[obis.GAS_METER_READING].value == Decimal('1.001')
|