Интеграция счетчика тепла в Home Assistant
Изначально застройщиком в квартире был установлен счетчик тепла Пульс СТК-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 видим следующую информацию:
Отображение показаний счетчика в Home Assistant
Кроме того, к данному микроконтроллеру подключены датчик температуры горячей воды на DS18B20, датчик движения на HC-SR501, датчик температуры/влажности на AHT10, считаются импульсы с выхода счетчика воды Пульс 15УИ-80 и планируется управление подсветкой зеркала. Но это уже другая история.