- Notifications
You must be signed in to change notification settings - Fork2
Подключение EspHome к счетчикам электроэнергии по протоколу СПОДЭС ГОСТ Р 58940-202 (Энергомера ce207, ce208, CE307, CE308, Меркурий, Пульсар, Милур, Мир, Нартис, РиМ и другие). Supports DLMS/Cosem IEC IEC 62056 Mode E (Hdlc)
License
latonita/esphome-dlms-cosem
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Подключение EspHome к счетчикам электроэнергии по протоколу DLMS/COSEM/СПОДЭС (Энергомера CE207/CE307/CE308, Милур 107S, Мир, Нартис, РиМ, Пульсар и многие другие) через RS-485 интерфейст или через оптопорт(*).
Инструкции по подключению esp32/esp8266 к счётчику можно увидеть в соседнем компонентеhttps://github.com/latonita/esphome-energomera-iec
(*) Через оптопорт можно работать с приборами, которые сразу работают на скорости 9600. Вариант, когда необходимо сначала подключаться на скорости 300, а потом выходить на рабочую скорость - пока не поддерживается (но, по факту, нужно только найти жертву и протестировать).
- Функции
- Настройка основного компонента (хаба)
- Настройка сенсоров
- Lambda
- Несколько счетчиков
- Особенности счетчиков
- Примеры конфигураций
- Подключение без аутентификации (NONE) и с низким уровнем (LOW - доступ с паролем).
- Поддержка базовых цифровых типов данных (int/float)
- Поддержка базовых текстовых данных (octet-string)
- Поддержка русских символов в ответах от счетчиков (Нартис И100-W112, РиМ 489 , ... )
- Задание логического и физического адресов
- Работа с несколькими счетчиками на одной шине
- Работа с данными типа datetime
- Синхронизация времени
- Управление реле
- Подключение через оптопорт согласно стандарта - выбор скорости 300 и далее выбор 9600
- .. предлагайте ваши варианты
Для будущей разработки требуется наличие счетчика для проверки
Простейшая конфигурация выглядит вот так:
dlms_cosem:
По-сложнее вот так:
dlms_cosem:client_address:32server_address:logical_device:1physical_device:576address_length:2auth:truepassword:"12345678"update_interval:60sreceive_timeout:500msdelay_between_requests:50msflow_control_pin:GPIO12
client_address (Optional) см.документацию на счетчик. от этого зависит уровень доступа. по-умолчанию 16
server_address (Optional) HDLC адрес :) можно попробовать не указывать. Энергомеры, например, это едят. по-умолчанию 1. а вообще, адрес расчитывается по алгоритму, на основе логического и физического адресов, а также размера адреса. см. инструкцию на счетчик. либо рассчитываем сами ручками, либо указываем параметры ниже:
- logical_device (Optional) номер логического устройста. по стандарту СПОДЭС должно быть как минимум устройсво номер 1. по-умолчанию 1.
- physcial_device (Required) номер физического устройства. см. документацию на счетчик. может быть как фиксированной величиной, так и зависящей от серийного номера счетчика (как правило несколько последних цифр + число). может отличаться для разных интерфейсов (RS-485/Оптопорт/и т.д.)
- address_length (Optional) длина адреса, 1, 2 или 4 байта. по-умолчанию 2.
auth (Optional) необходимость авторизации.true если требуется указать пароль. по-умолчаниюfalse
password (Optional) пароль. используется вместе с параметром
auth
update_interval (Optional) периодичность опроса счетчика и публикации результатов. по-умолчанию
60s
receive_timeout (Optional) как долго ждем на наш запрос мы ждем ответ от счетчика. по-умолчанию
500ms
delay_between_requests (Optional) размер паузы между последовательными запросами к счетчику. по-умолчанию
50ms
flow_control_pin (Optional) указываем, если 485 модуль требует сигнал направления передачи RE/DE
id (Optional) Задать, если приборов больше одного. Этот идентификатор указывать в сенсорах в поле
dlms_cosem_id
cp1251 (Optional) Включить преобразование русских символов CP1251 -> UTF-8 для правильного отображения в home assistant. по-умолчаниюtrue
Ряд счетчиков выдают свои названия или некоторые другие поля на русском языке в кодировке cp1251, которую требуется перевести в UTF-8 для правильного отображения в Home Assistant. Например, РиМ выдает значение 0.0.96.1.1.255 (Тип ПУ) как "РиМ489.38". Аналогично, Нартис выдает название на русском.Можно отключить целиком на уровне компонента,Если конверсия начнет вызывать сложности с какими-то текстовыми полями, то эту опцию можно отключить либо целиком на уровне компонентаcp1251:false
, либо на уровне конкретного текстового сенсора.
Для ряда счетчиков можно попробовать не указывать адреса, тогда будут использованы значения по-умолчанию (16, 1)Необходимо в каждом случае смотреть инструкцию к счетчику. Клиентский адрес выбирается, как правило, 32, а серверный - 1. При этом практически во всех счетчиках для уровня 32 требуется указать пароль.
СПОДЭС говорит нам:
Код | Уровень доступа | Разрешенные операции | Защита |
---|---|---|---|
16 | Публичный клиент | чтение | нет |
32 | Считыватель показаний | чтение, селективная выборка, выполнение определенных действий | пароль |
48 | Конфигуратор | чтение, запись, селективная выборка, выполнение определенных действий | пароль или шифрование (*) |
На данный момент поддерживается только чтение данных, выбор уровня зависит от счетчика.
(*) Шифрование не подддерживается.
Как правило это двухбайтный адрес, верхний байт - логический адрес, нижний - физический адрес. Берем из инструкции к счетчику.
Пример для Милур 107S
В инструкции указано:
Параметр | Значение |
---|---|
Логический адрес | 1 |
Физический адрес | К четырем последним цифрам серийного номера прибавить 16 и результат перевести в HEX |
Про HEX забываем, это для их родного конфигуратора. Например, серийный номер счетчика241100010880560
, т.е. последние цифры =0560
. Добавляем16
и получаем576
.
text_sensor
- текстовые данные в формате "как пришли от счетчика"sensor
- числовые данные, int/float
OBIS коды берем из стандарта СПОДЭС и из инструкций к счетчику
Если приборов больше одного, то необходимо в каждом сенсоре указыватьdlms_cosem_id
.
sensor:# 2 Current - Iph Ток фазы 1.0.11.7.0.255 -platform:dlms_cosemname:Phase Currentobis_code:1.0.11.7.0.255multiplier:1.0# предварительная мультипликация значения (до отработки filters:) по-умолчанию 1dont_publish:false# не публиковать значение, будет видно только в логах. по-умолчанию false# далее идут стандартные параметры сенсоровunit_of_measurement:Aaccuracy_decimals:1device_class:currentstate_class:measurement
text_sensor: -platform:dlms_cosemname:Typeobis_code:0.0.96.1.1.255dont_publish:false# не публиковать значение, будет видно только в логах. по-умолчанию false#cp1251: false# далее идут стандартные параметры сенсоровentity_category:diagnostic
- cp1251 - если значение указано, то оно имеет приоритет и используется вместо значения из основного компонента. по-умолчанию значение не указано, настройка берется из основного компонента
binary_sensor: -platform:dlms_cosemconnection:name:Connectionsession:name:Sessiontransmission:name:Transmission
Connection включается в случае доступности соединения с прибором. выключается в случае ошибки соединения.Session включается в начале сессии связи с прибором, отключается по окончанию.Transmission включается на период каждого отдельного запроса. можно подключить, например, к светодиоду для индикации активности
binary_sensor: -platform:dlms_cosemtransmission:name:Transmissionon_press:output.turn_on:transmission_ledon_release:output.turn_off:transmission_ledoutput: -platform:gpioid:transmission_ledpin:GPIO04inverted:true
update_server_address(logical_device, physical_device, addr_len)
- обновление адреса и внеочередной запуск опроса.
Данную функцию, например, можно использовать в lambda для сканирования адресов устройства совместно с вышеупомянутым бинарным сенсоромConnection
:
globals: -id:logaddrtype:uint16_tinitial_value:'1' -id:phyaddrtype:uint16_tinitial_value:'1' -id:servaddrtype:uint16_tinitial_value:'1'binary_sensor: -platform:dlms_cosemconnection:name:Connection#.....on_release: -lambda:|- if (id(phyaddr) < 255) { id(phyaddr)++; } else { id(logaddr)++; id(phyaddr) = 1; } id(servaddr) = id(energo_01)->update_server_address(id(logaddr), id(phyaddr), 2); -lambda:|- ESP_LOGI("main", "Logical address: %d, physical address: %d, server address: %d", (int) id(logaddr), (int) id(phyaddr), (int) id(servaddr));interval:# выводим в лог текущие настройки, чтобы не искать последнее изменение по логуinterval:10sthen: -lambda:|- ESP_LOGI("main", "Logical address: %d, physical address: %d, server address: %d", (int) id(logaddr), (int) id(phyaddr), (int) id(servaddr));
При работе с несколькими счетчиками необходимо аккуратно указывать идентификаторы.
uart: -id:bus_1rx_pin:GPIO16tx_pin:GPIO17baud_rate:9600data_bits:8parity:NONEstop_bits:1 -id:bus_2rx_pin:GPIO23tx_pin:GPIO22baud_rate:9600data_bits:8parity:NONEstop_bits:1dlms_cosem: -id:energo_1uart_id:bus_1client_address:32server_address:logical_device:1physical_device:576auth:truepassword:"12345678"update_interval:30sreceive_timeout:500ms -id:energo_2uart_id:bus_1client_address:32server_address:logical_device:1physical_device:16auth:truepassword:"12345678"update_interval:30sreceive_timeout:500ms -id:nartis_3uart_id:bus_2client_address:32server_address:logical_device:1physical_device:17address_length:2auth:truepassword:"00000001"text_sensor: -platform:dlms_cosemdlms_cosem_id:energo_2# id хабаname:Serial numberobis_code:0.0.96.1.0.255entity_category:diagnosticcp1251:truesensor: -platform:dlms_cosemdlms_cosem_id:nartis_3# id хабаid:current_phasename:Currentobis_code:1.0.11.7.0.255unit_of_measurement:Aaccuracy_decimals:1device_class:currentstate_class:measurement
Передает тип ПУ на русском языке. Для текстового сенсора
0.0.96.1.1.255
необходимо установитьcp1251: true
Иногда пароли и явки в инструкции отличаются от реальных. Пример рабочих параметро с одного из счетчиков:
- Пароль администрирования: 0000000100000001
- Пароль чтения: 00000001
- Логический адрес: 1
- Физический адрес: 17
- Размер адреса: 2
- Передает тип ПУ на русском языке. Для текстового сенсора
0.0.96.1.1.255
необходимо установитьcp1251: true
Используется список параметров ПУ категории D из стандарта СПОДЭС. Они применяются в однофазных ПУ потребителей.
Пример файла конфигурации, протестированого на Энергомера CE207-SPds.
esphome:name:energomera-ce207-spdsfriendly_name:Energomera-ce207-spdsesp32:board:esp32devframework:type:arduino#...external_components: -source:github://latonita/esphome-dlms-cosemcomponents:[dlms_cosem]refresh:1suart: -id:bus_1rx_pin:GPIO16tx_pin:GPIO17baud_rate:9600data_bits:8parity:NONEstop_bits:1dlms_cosem:id:energo_01client_address:32server_address:1auth:truepassword:"12345678"update_interval:60sreceive_timeout:1ssensor:# 2 Current - Iph Ток фазы 1.0.11.7.0.255 -platform:dlms_cosemname:Phase Currentobis_code:1.0.11.7.0.255unit_of_measurement:Aaccuracy_decimals:1device_class:currentstate_class:measurement# 3 Current - In Ток нулевого провода 1.0.91.7.0.255 -platform:dlms_cosemname:Neutral Currentobis_code:1.0.91.7.0.255unit_of_measurement:Aaccuracy_decimals:1device_class:currentstate_class:measurement# 4 Voltage - V Напряжение фазы 1.0.12.7.0.255 -platform:dlms_cosemname:Phase Voltageobis_code:1.0.12.7.0.255unit_of_measurement:Vaccuracy_decimals:1device_class:voltagestate_class:measurement# 5 Power Factor - PF Коэффициент мощности 1.0.13.7.0.255 -platform:dlms_cosemname:Power Factorobis_code:1.0.13.7.0.255unit_of_measurement:''accuracy_decimals:2device_class:power_factorstate_class:measurement# 6 Frequency Частота сети 1.0.14.7.0.255 -platform:dlms_cosemname:Grid Frequencyobis_code:1.0.14.7.0.255unit_of_measurement:Hzaccuracy_decimals:1device_class:frequencystate_class:measurement# 7 Apparent Power Полная мощность 1.0.9.7.0.255 -platform:dlms_cosemname:Apparent Powerobis_code:1.0.9.7.0.255unit_of_measurement:Waccuracy_decimals:1device_class:powerstate_class:measurement# 8 Signed Active Power (+Import; -Export) Активная мощность 1.0.1.7.0.255 -platform:dlms_cosemname:Active Powerobis_code:1.0.1.7.0.255unit_of_measurement:Waccuracy_decimals:1device_class:powerstate_class:measurement# 9 Signed Reactive Power (+Import; -Export) Реактивная мощность 1.0.3.7.0.255 -platform:dlms_cosemname:Reactive Powerobis_code:1.0.3.7.0.255unit_of_measurement:Waccuracy_decimals:1device_class:powerstate_class:measurement# 10 Cumulative Active Energy (Import) Активная энергия, импорт 1.0.1.8.0.255 -platform:dlms_cosemname:Active Energyobis_code:1.0.1.8.0.255unit_of_measurement:kWhaccuracy_decimals:3device_class:energystate_class:total_increasingfilters: -multiply:0.001# 10.1 Cumulative Active Energy (Import) tariff 1 -platform:dlms_cosemname:Active Energy T1obis_code:1.0.1.8.1.255unit_of_measurement:kWhaccuracy_decimals:3device_class:energystate_class:total_increasingfilters: -multiply:0.001# 10.2 Cumulative Active Energy (Import) tariff 2 -platform:dlms_cosemname:Active Energy T2obis_code:1.0.1.8.2.255unit_of_measurement:kWhaccuracy_decimals:3device_class:energystate_class:total_increasingfilters: -multiply:0.001# 11 Cumulative Active Energy (Export) Активная энергия, экспорт 1.0.2.8.0.255 -platform:dlms_cosemname:Active Energy Exportobis_code:1.0.2.8.0.255unit_of_measurement:kWhaccuracy_decimals:3device_class:energystate_class:total_increasingfilters: -multiply:0.001# 12 Cumulative Reactive Energy (Import) Реактивная энергия, импорт 1.0.3.8.0.255 -platform:dlms_cosemname:Reactive Energyobis_code:1.0.3.8.0.255unit_of_measurement:kWhaccuracy_decimals:3device_class:energystate_class:total_increasingfilters: -multiply:0.001# 13 Cumulative Reactive Energy (Export) Реактивная энергия, экспорт 1.0.4.8.0.255 -platform:dlms_cosemname:Reactive Energy Exportobis_code:1.0.4.8.0.255unit_of_measurement:kWhaccuracy_decimals:3device_class:energystate_class:total_increasingfilters: -multiply:0.001text_sensor: -platform:dlms_cosemname:Serial Numberobis_code:0.0.96.1.0.255entity_category:diagnostic -platform:dlms_cosemname:Typeobis_code:0.0.96.1.1.255cp1251:true# ряд счетчиков выдают данный параметр на русском языкеentity_category:diagnostic -platform:dlms_cosemname:Metrology Software Versionobis_code:0.0.96.1.2.255entity_category:diagnostic -platform:dlms_cosemname:Manufacturerobis_code:0.0.96.1.3.255entity_category:diagnostic
About
Подключение EspHome к счетчикам электроэнергии по протоколу СПОДЭС ГОСТ Р 58940-202 (Энергомера ce207, ce208, CE307, CE308, Меркурий, Пульсар, Милур, Мир, Нартис, РиМ и другие). Supports DLMS/Cosem IEC IEC 62056 Mode E (Hdlc)