Изначально застройщиком в квартире был установлен счетчик тепла Пульс СТК-15-М с интерфейсом Meter-Bus (M-bus). Поиски в Интернете не дали простого ответа как удаленно считывать показания.
Примерно через 3,5 года эксплуатации на счетчике закончилась батарейка (наверное я слишком часто нажимал кнопку активации экрана/перебора параметров) и также подходил срок поверки. Стоимость поверки с демонтажом/монтажом, заменой батарейки и пломбировкой не сильно отличается от стоимости нового счетчика, поэтому было принято решение о покупке нового счетчика Пульс СТК-15-И с интерфейсом типа токовая петля по ГОСТ IEC 61107-2011.
С этим счетчиком все гораздо проще: он выдает один импульс на 1 кВт*ч потребленной тепловой энергии (0,001 Гкал, хотя строго говоря должно быть 1 Гкал = 1163 кВт·ч https://ru.wikipedia.org/wiki/Калория). Недостаток этого варианта счетчика - не передаются дополнительные параметры: температуры теплоносителя, скорость потока и т.д. Для получения температуры теплоносителя дополнительно используются 2 датчики температуры DS18B20.
Железо:
Плата ESP8266 NodeMCU V3
Датчики температуры DS18B20 2шт.
Резистор номиналом от 4 до 10 кОм

Красный провод счетчика подключен к пину RX платы ESP8266, черный к GND. Датчики температуры прикреплены к входящему/исходящему трубопроводам рядом со счетчиком.
Прошивка - ESPHome.
JAML конфигурация:
substitutions: plug_name: shw dlspin: GPIO13 #D7 ledpin: GPIO2 #D4 htcpin: GPIO3 #RX esphome: name: uc-shw esp8266: board: nodemcuv2 # Enable logging logger: level: WARN # Enable Home Assistant API api: ota: password: "******************************" wifi: ssid: !secret wifi_ssid2 password: !secret wifi_password2 # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "UC-Shw Fallback Hotspot" password: "************" captive_portal: web_server: port: 80 dallas: - pin: $dlspin update_interval: 10s sensor: - platform: uptime name: ${plug_name}_uptime - platform: wifi_signal name: ${plug_name}_wifi_signal update_interval: 10s - platform: dallas address: 0xe53c01e07693fa28 name: ${plug_name}_heat_temp_in - platform: dallas address: 0xba3c01e0769c4b28 name: ${plug_name}_heat_temp_out - platform: pulse_counter pin: number: $htcpin inverted: true mode: input: true pullup: true name: ${plug_name}_pulses_heat accuracy_decimals: 0 id: pulse_heat - platform: integration name: ${plug_name}_pulses_heat_integr sensor: pulse_heat time_unit: min id: pulses_heat accuracy_decimals: 0 unit_of_measurement: kWh restore: true text_sensor: - platform: wifi_info ip_address: name: ${plug_name}_ip ssid: name: ${plug_name}_ssid mac_address: name: ${plug_name}_mac - platform: version name: ${plug_name}_version status_led: pin: $ledpin
В Home Assistant в configuration.yaml создадим utility_meter для накопления информации о потребленной тепловой энергии за день, неделю, месяц, год:
utility_meter: daily_heating: source: sensor.shw_pulses_heat_integr cycle: daily weekly_heating: source: sensor.shw_pulses_heat_integr cycle: weekly monthly_heating: source: sensor.shw_pulses_heat_integr cycle: monthly yearly_heating: source: sensor.shw_pulses_heat_integr cycle: yearly
Также создадим Template сенсор для пересчета собранных импульсов в реальные показания счетчика, т.к. изначально были уже не нулевые показания. В моем случае это выглядит так:
sensor: - platform: template heat_real: friendly_name: "Показание счетчика тепла" unit_of_measurement: 'GCal' value_template: > {{(states('sensor.yearly_heating')|float*0.001 + 0.384) | round(3)}}
В итоге в Home Assistant видим следующую информацию:

Кроме того, к данному микроконтроллеру подключены датчик температуры горячей воды на DS18B20, датчик движения на HC-SR501, датчик температуры/влажности на AHT10, считаются импульсы с выхода счетчика воды Пульс 15УИ-80 и планируется управление подсветкой зеркала. Но это уже другая история.
