Read values from Landis + Gyr E360 SMR 5.0 by DSMR
Hardware
Counter
img from: https://eu.landisgyr.com/blog/european-utility-week-2016/advanced-metering-infrastructure/e360
Counter has P1 port for read parameters by DSMR protocol
UART FTDI Adapter for connect to P1 port
I buy adapler on aliexpress
Software
Library
I use https://github.com/ndokter/dsmr_parser library for read values and use example from README
Example
from dsmr_parser import telegram_specifications
from dsmr_parser.clients import SerialReader, SERIAL_SETTINGS_V5
serial_reader = SerialReader(
device='/dev/ttyUSB0',
serial_settings=SERIAL_SETTINGS_V5,
telegram_specification=telegram_specifications.V5
)
for telegram in serial_reader.read():
print(telegram) # see 'Telegram object' docs below
run it and get log in telegram format
P1_MESSAGE_HEADER: 50 [None]
P1_MESSAGE_TIMESTAMP: 2025-08-30T16:33:58+00:00 [None]
EQUIPMENT_IDENTIFIER: 45303035313030353533363736******** [None]
ELECTRICITY_USED_TARIFF_1: 4400.065 [kWh]
ELECTRICITY_USED_TARIFF_2: 3889.624 [kWh]
ELECTRICITY_DELIVERED_TARIFF_1: 3714.178 [kWh]
ELECTRICITY_DELIVERED_TARIFF_2: 8656.318 [kWh]
ELECTRICITY_ACTIVE_TARIFF: 0001 [None]
CURRENT_ELECTRICITY_USAGE: 0.026 [kW]
CURRENT_ELECTRICITY_DELIVERY: 0.000 [kW]
LONG_POWER_FAILURE_COUNT: 2 [None]
SHORT_POWER_FAILURE_COUNT: 16 [None]
POWER_EVENT_FAILURE_LOG: buffer length: 1
buffer type: 0-0:96.7.19
event occured at: 2020-01-01T08:15:55+00:00 for: 1599 [s]
VOLTAGE_SAG_L1_COUNT: 20 [None]
VOLTAGE_SWELL_L1_COUNT: 2 [None]
INSTANTANEOUS_VOLTAGE_L1: 229.9 [V]
INSTANTANEOUS_CURRENT_L1: 1 [A]
TEXT_MESSAGE: None [None]
INSTANTANEOUS_ACTIVE_POWER_L1_POSITIVE: 0.026 [kW]
INSTANTANEOUS_ACTIVE_POWER_L1_NEGATIVE: 0.000 [kW]
MBUS DEVICE (channel 1)
MBUS_DEVICE_TYPE: 3 [None]
MBUS_EQUIPMENT_IDENTIFIER: 47303036343030323031373031******** [None]
MBUS_METER_READING: 3333.555 [m3] at 2025-08-30T16:30:08+00:00
You can get single values or units:
# Print contents of all available values
# See dsmr_parser.obis_name_mapping for all readable telegram values.
# The available values differ per DSMR version and meter.
print(telegram)
# P1_MESSAGE_HEADER: 42 [None]
# P1_MESSAGE_TIMESTAMP: 2016-11-13 19:57:57+00:00 [None]
# EQUIPMENT_IDENTIFIER: 3960221976967177082151037881335713 [None]
# ELECTRICITY_USED_TARIFF_1: 1581.123 [kWh]
# etc.
# Example to get current electricity usage
print(telegram.CURRENT_ELECTRICITY_USAGE) # <dsmr_parser.objects.CosemObject at 0x7f5e98ae5ac8>
print(telegram.CURRENT_ELECTRICITY_USAGE.value) # Decimal('2.027')
print(telegram.CURRENT_ELECTRICITY_USAGE.unit) # 'kW'
# All Mbus device readings like gas meters and water meters can be retrieved as follows. This
# returns a list of MbusDevice objects:
mbus_devices = telegram.MBUS_DEVICES
# A specific MbusDevice based on the channel it's connected to, can be retrieved as follows:
mbus_device = telegram.get_mbus_device_by_channel(1)
print(mbus_device.MBUS_DEVICE_TYPE.value) # 3
print(mbus_device.MBUS_EQUIPMENT_IDENTIFIER.value) # '4730303339303031393336393930363139'
print(mbus_device.MBUS_METER_READING.value) # Decimal('246.138')
print(mbus_device.MBUS_METER_READING.unit) # m3
# DEPRECATED: the dictionary approach of getting the values by key or `.items()' or '.get() is deprecated
telegram[obis_references.CURRENT_ELECTRICITY_USAGE]
My script
from dsmr_parser import telegram_specifications
from dsmr_parser.clients import SerialReader, SERIAL_SETTINGS_V5
serial_reader = SerialReader(
device='/dev/ttyUSB0',
serial_settings=SERIAL_SETTINGS_V5,
telegram_specification=telegram_specifications.V5
)
for telegram in serial_reader.read():
# Example to get current electricity usage
# print(telegram) # <dsmr_parser.objects.CosemObject at 0x7f5e98ae5ac8>
print(telegram.CURRENT_ELECTRICITY_USAGE.value) # Decimal('2.027')
print(telegram.CURRENT_ELECTRICITY_USAGE.unit) # 'kW'
print(telegram.CURRENT_ELECTRICITY_DELIVERY.value) # Decimal('2.027')
print(telegram.CURRENT_ELECTRICITY_DELIVERY.unit) # 'kW'
# All Mbus device readings like gas meters and water meters can be retrieved as follows. This
# returns a list of MbusDevice objects:
# mbus_devices = telegram.MBUS_DEVICES
# A specific MbusDevice based on the channel it's connected to, can be retrieved as follows:
mbus_device = telegram.get_mbus_device_by_channel(1)
#print(mbus_device.MBUS_DEVICE_TYPE.value) # 3
#print(mbus_device.MBUS_EQUIPMENT_IDENTIFIER.value) # '4730303339303031393336393930363139'
print(mbus_device.MBUS_METER_READING.value) # Decimal('246.138')
print(mbus_device.MBUS_METER_READING.unit)
0.000
kW
0.630
kW
3229.407
m3