Представляю свою автоматизацию работы бойлера
в системе Home Assistant для сети с двухтарифным счетчиком (день-ночь) на
основе модуля Sonoff POW с прошивкой ESPHome. Использован модуль Sonoff
POW прошитый по инструкции
из этой статьи. Кроме того, можно использовать другие модули или умные розетки с
функцией измерения потребляемой мощности и отключения по Wifi. В этом
случае необходимо в файлах автоматизации заменить название сенсора
потребляемой мощности (sensor.sonoff_pow_power) и выключатель
питания (switch.sonoff_pow_relay) заменить на свои.
Данная автоматизация подходит для бойлеров,
которые при подаче питания сразу же начинают нагрев воды. Это практически
все бойлеры с механическим управлением, а также бойлеры с электроникой,
которые сохраняют свое состояние при включении. И соответственно,
автоматизация не будет работать на тех бойлерах, которые после включения в
сеть требуют дополнительной настройки кнопками на передней панели
(установки температуры и т.д.).
К сети бойлер подключается через Sonoff POW
прошитый альтернативной прошивкой ESPHome:
Дальше опишу что делает данная
автоматизация:
На основе показаний сенсора потребляемой
мощности (sensor.sonoff_pow_power) рассчитываются значения для 12
сенсоров:
1. Потребление электроэнергии за
сутки в kWh (кВт·ч): sensor.energy_total_day_sonoff_pow_001
2. Потребление электроэнергии за
сутки по дневному тарифу в kWh (кВт·ч):
sensor.sonoff_pow_daily_energy_001_day
3. Потребление электроэнергии за
сутки по ночному тарифу в kWh (кВт·ч):
sensor.sonoff_pow_daily_energy_001_night
4. Потребление электроэнергии за
неделю в kWh (кВт·ч):
sensor.energy_total_weekly_sonoff_pow_001
5. Потребление электроэнергии за
неделю по дневному тарифу в kWh (кВт·ч):
sensor.sonoff_pow_weekly_energy_001_day
6. Потребление электроэнергии за
неделю по ночному тарифу в kWh (кВт·ч):
sensor.sonoff_pow_weekly_energy_001_night
7. Потребление электроэнергии за
месяц в kWh (кВт·ч): sensor.energy_total_month_sonoff_pow_001
8. Потребление электроэнергии за
месяц по дневному тарифу в kWh (кВт·ч):
sensor.sonoff_pow_monthly_energy_001_day
9. Потребление электроэнергии за
месяц по ночному тарифу в kWh (кВт·ч):
sensor.sonoff_pow_monthly_energy_001_night
10. Стоимость потребленной энергии
за день согласно тарифов двухтарифного счетчика:
sensor.energy_payment_day_sonoff_pow_001
11. Стоимость потребленной энергии
за неделю согласно тарифов двухтарифного счетчика:
sensor.energy_payment_week_sonoff_pow_001
12. Стоимость потребленной энергии
за месяц согласно тарифов двухтарифного счетчика:
sensor.energy_payment_month_sonoff_pow_001
Также есть две схемы автоматизации:
1) Режим «Ночной тариф» –
если он включен, то происходит автоматическое включение питания бойлера
вечером (если перед бойлер был выключен), с наступлением ночного тарифа и
его выключение утром (если бойлер на тот момент включен), по его
окончанию.
2) Режим «Автоотключение бойлера» – если он включен, то после окончания нагрева бойлера происходит
отключение питания. Повторно его можно включить либо из Home assistant,
либо нажав кнопку на Sonoff POW. После нажатия данной кнопки если бойлер
не потребляет электроэнергию более 5 мин. (вода горячая, нагрев не
требуется) – он снова отключится от сети.
Автоматизация выполнена в виде
Packages. Это дает возможность с легкостью делать другие такие автоматизации в
Home Assistant. Например, если хотите добавить такую же автоматизацию для
термопота достаточно создать копию файла boiler.yaml с именем
thermopot.yaml, заменить название сенсора
sensor.sonoff_pow_power на то, показывает значение потребляемой
мощности термопотом и все сенсоры вида sensor.***001* на
sensor.***002*.
Далее непосредственно сама автоматизация:
В configuration.yaml прописываем расположение
файла packages и ввод тарифов за электроэнергию:
homeassistant:
packages:
pack_2: !include boiler.yaml
input_number:
energy_tariff_day:
name: Дневной тариф (Т1)
min: 0.1
max: 3
step: 0.01
mode: box
energy_tariff_night:
name: Ночной тариф (Т2)
min: 0.1
max: 3
step: 0.01
mode: box
Файл boiler.yaml:
############################################################################################# # Входные датчики: sensor.sonoff_pow_power - Текущая потребляема мощность от SonOff POW # Выходные датчики: # ** Потребление по дневному, ночному тарифу, общее за месяц в kWh (кВт·ч) ** # sensor.sonoff_pow_monthly_energy_001_day # sensor.sonoff_pow_monthly_energy_001_night # sensor.energy_total_month_sonoff_pow_001 # ** Потребление по дневному, ночному тарифу, общее за неделю в kWh (кВт·ч) ** # sensor.sonoff_pow_weekly_energy_001_day # sensor.sonoff_pow_weekly_energy_001_night # sensor.energy_total_weekly_sonoff_pow_001 # ** Потребление по дневному, ночному тарифу, общее за сутки в kWh (кВт·ч) ** # sensor.sonoff_pow_daily_energy_001_day # sensor.sonoff_pow_daily_energy_001_night # sensor.energy_total_day_sonoff_pow_001 # ** Стоимость потребленной энергии за день, месяц, год согласно тарифов ** # sensor.energy_payment_day_sonoff_pow_001 # sensor.energy_payment_week_sonoff_pow_001 # sensor.energy_payment_month_sonoff_pow_001 ############################################################################################## # Блог автора https://mynobook.blogspot.com ############################################################################################## sensor: - platform: integration source: sensor.sonoff_pow_power name: energy_sonoff_pow_001 unit_prefix: k round: 3 - platform: template sensors: energy_total_month_sonoff_pow_001: friendly_name: Потребление за месяц unit_of_measurement: "kWh" icon_template: "mdi:counter" value_template: "{{(states('sensor.sonoff_pow_monthly_energy_001_day')|float+states('sensor.sonoff_pow_monthly_energy_001_night')|float)|round(2)}}" energy_total_weekly_sonoff_pow_001: friendly_name: Потребление за неделю unit_of_measurement: "kWh" icon_template: "mdi:counter" value_template: "{{(states('sensor.sonoff_pow_weekly_energy_001_day')|float+states('sensor.sonoff_pow_weekly_energy_001_night')|float)|round(2)}}" energy_total_day_sonoff_pow_001: friendly_name: Потребление за день unit_of_measurement: "kWh" icon_template: "mdi:counter" value_template: "{{(states('sensor.sonoff_pow_daily_energy_001_day')|float+states('sensor.sonoff_pow_daily_energy_001_night')|float)|round(2)}}" energy_payment_day_sonoff_pow_001: friendly_name: Сумма за день unit_of_measurement: "₴" icon_template: "mdi:cash-100" value_template: "{{(states('sensor.sonoff_pow_daily_energy_001_day')|float*states('input_number.energy_tariff_day')|float+states('sensor.sonoff_pow_daily_energy_001_night')|float*states('input_number.energy_tariff_night')|float)|round(2)}}" energy_payment_week_sonoff_pow_001: friendly_name: Сумма за неделю unit_of_measurement: "₴" icon_template: "mdi:cash-100" value_template: "{{(states('sensor.sonoff_pow_weekly_energy_001_day')|float*states('input_number.energy_tariff_day')|float+states('sensor.sonoff_pow_weekly_energy_001_night')|float*states('input_number.energy_tariff_night')|float)|round(2)}}" energy_payment_month_sonoff_pow_001: friendly_name: Сумма за месяц unit_of_measurement: "₴" icon_template: "mdi:cash-100" value_template: "{{(states('sensor.sonoff_pow_monthly_energy_001_day')|float*states('input_number.energy_tariff_day')|float+states('sensor.sonoff_pow_monthly_energy_001_night')|float*states('input_number.energy_tariff_night')|float)|round(2)}}" input_boolean: boiler_001_night: name: Automation only night tariff initial: on icon: mdi:calendar-check boiler_001_auto_off: name: Boiler autopower Off # initial: on icon: mdi:flash-auto utility_meter: sonoff_pow_daily_energy_001: source: sensor.energy_sonoff_pow_001 cycle: daily tariffs: - day - night sonoff_pow_weekly_energy_001: source: sensor.energy_sonoff_pow_001 cycle: weekly tariffs: - day - night sonoff_pow_monthly_energy_001: source: sensor.energy_sonoff_pow_001 cycle: monthly tariffs: - day - night automation: # Переключение тарифов день-ночь - id: switch_energy_tariffs_001 alias: switch energy tariffs_001 initial_state: true trigger: - platform: homeassistant event: start - platform: time at: '07:00:00' - platform: time at: '23:00:00' action: - service: utility_meter.select_tariff data_template: entity_id: - utility_meter.sonoff_pow_daily_energy_001 - utility_meter.sonoff_pow_monthly_energy_001 - utility_meter.sonoff_pow_weekly_energy_001 tariff: '{%- if 7<= (now().strftime("%-H") | int) < 23 -%}day{%- else -%}night{%- endif -%}' # Автоотключение бойлера # Если потребление бойлера менее 10Вт в течение 1 минуты по дневному тарифу, то отключить бойлер - id: auto_boiler_off_001 alias: "Boiler Auto Power OFF" initial_state: true # hide_entity: true trigger: - platform: numeric_state entity_id: sensor.sonoff_pow_power below: 10 for: minutes: 1 condition: - condition: state entity_id: input_boolean.boiler_001_auto_off state: 'on' - condition: state entity_id: switch.sonoff_pow_relay state: 'on' - condition: time after: '07:00:00' before: '23:00:00' action: - service: switch.turn_off data: entity_id: switch.sonoff_pow_relay # Ночной режим - автоматическое включение бойлера в 23:05 (если выключен) - id: boiler_on_23_001 alias: "Boiler Power ON" initial_state: true # hide_entity: true trigger: - platform: time at: "23:05:00" condition: - condition: state entity_id: input_boolean.boiler_001_night state: 'on' - condition: state entity_id: switch.sonoff_pow_relay state: 'off' action: - service: switch.turn_on data: entity_id: switch.sonoff_pow_relay # Ночной режим - автоматическое выключение бойлера в 06:55 (если включен) - id: boiler_off_7_001 alias: "Boiler Power ON" initial_state: true # hide_entity: true trigger: - platform: time at: "06:55:00" condition: - condition: state entity_id: input_boolean.boiler_001_night state: 'on' - condition: state entity_id: switch.sonoff_pow_relay state: 'on' action: - service: switch.turn_off data: entity_id: switch.sonoff_pow_relay
# Вкладка **** Бойлер **** - type: vertical-stack title: Бойлер icon: 'mdi:water-boiler' cards: - type: entities show_header_toggle: false entities: - entity: switch.sonoff_pow_relay name: Питание бойлера secondary_info: last-changed icon: 'mdi:power-standby' - entity: input_boolean.boiler_001_night name: Ночной режим - entity: input_boolean.boiler_001_auto_off name: Автоотключение бойлера - entity: sensor.sonoff_pow_power name: Потребление сейчас icon: 'mdi:gauge' - type: glance title: Потребление эл./энергии за день columns: 3 entities: - entity: sensor.energy_total_day_sonoff_pow_001 name: Всего icon: 'mdi:counter' - entity: sensor.sonoff_pow_daily_energy_001_day name: Тариф "День" icon: 'mdi:counter' - entity: sensor.sonoff_pow_daily_energy_001_night name: Тариф "Ночь" icon: 'mdi:counter' - type: glance title: Потребление эл./энергии за неделю columns: 3 entities: - entity: sensor.energy_total_weekly_sonoff_pow_001 name: Всего icon: 'mdi:counter' - entity: sensor.sonoff_pow_weekly_energy_001_day name: Тариф "День" icon: 'mdi:counter' - entity: sensor.sonoff_pow_weekly_energy_001_night name: Тариф "Ночь" icon: 'mdi:counter' - type: glance title: Потребление эл./энергии за месяц columns: 3 entities: - entity: sensor.energy_total_month_sonoff_pow_001 name: Всего icon: 'mdi:counter' - entity: sensor.sonoff_pow_monthly_energy_001_day name: Тариф "День" icon: 'mdi:counter' - entity: sensor.sonoff_pow_monthly_energy_001_night name: Тариф "Ночь" icon: 'mdi:counter' # Начислено - type: glance title: Начислено за потребление бойлера column_width: calc(100% / 3) entities: - entity: sensor.energy_payment_day_sonoff_pow_001 name: За день - entity: sensor.energy_payment_week_sonoff_pow_001 name: За неделю - entity: sensor.energy_payment_month_sonoff_pow_001 name: За месяц icon: 'mdi:counter' # Ввод тарифов - type: glance title: Тарифы на электроэнергию (₴ за кВт·ч) column_width: calc(100% / 2) entities: - entity: input_number.energy_tariff_day name: Дневной тариф - entity: input_number.energy_tariff_night name: Ночной тариф
Как это выглядит на телефоне:
На все адекватные вопросы отвечу в комментариях.
UPD
14.09.2022: К сожалению utility_meter.select_tariff теперь недоступен. Вместо нее следует
использовать select.select_option. Изменения коснулись не
только этой команды, так что позднее придется переделать всю автоматизацию
управлением бойлером, чтоб избежать проблем в будущем. В качестве
временного решения, чтоб восстановить работоспособность достаточно в
файле boiler.yaml заменить строки:
# Переключение тарифов день-ночь - id: switch_energy_tariffs_001 alias: switch energy tariffs_001 initial_state: true trigger: - platform: homeassistant event: start - platform: time at: '07:00:00' - platform: time at: '23:00:00' action: - service: select.select_option entity_id: - utility_meter.sonoff_pow_daily_energy_001 - utility_meter.sonoff_pow_monthly_energy_001 - utility_meter.sonoff_pow_weekly_energy_001 data: option: '{%- if 7<= (now().strftime("%-H") | int) < 23 -%}day{%- else -%}night{%- endif -%}'
на
# Переключение тарифов день-ночь - id: switch_energy_tariffs_001 alias: switch energy tariffs_001 initial_state: true trigger: - platform: time at: "07:00:00" variables: tariff: "day" - platform: time at: "23:00:00" variables: tariff: "night" action: - service: select.select_option target: entity_id: select.sonoff_pow_daily_energy_001 data: option: "{{ tariff }}" - service: select.select_option target: entity_id: select.sonoff_pow_monthly_energy_001 data: option: "{{ tariff }}" - service: select.select_option target: entity_id: select.sonoff_pow_weekly_energy_001 data: option: "{{ tariff }}"
UPD 25.09.2022: Новая актуальная версия статьи "Автоматизация работы бойлера в Home Assistant (новая версия)" в которой учтены все нововведения интеграции Utility Meter на текущий момент.
Спасибо большое за статью.
ОтветитьУдалитьПроблема с которой я столкнулся при использовании бойлера + розетка Xiaomi Mi Smart Socket или Broadlink SP3S:
Если умная розетка выключается вручную через HA то через пару часов после включения добавляет kWh в потребление за день, хотя потребление по сенсору "sensor.sonoff_pow_power" нулевое за весь период отключения.
К примеру выключил вручную в 19:30 с 6 kWh за день, включаю в 22:30 и сразу мгновенно получаю 7,67 kWh за день.
Буду благодарен за подсказку.
На сенсоре sensor.energy_sonoff_pow_001 тоже добавляется?
УдалитьТакже для корректного подсчета мощности показания текущей мощности (сенсор sensor.sonoff_pow_power) должен измеряться обязательно в "W"
УдалитьЕще можно временно добавить в лавлейс значения датчиков sensor.energy_sonoff_pow_001, sensor.sonoff_pow_daily_energy_001_day, sensor.sonoff_pow_daily_energy_001_night, sensor.energy_sonoff_pow и понаблюдать откуда идет погрешность
на sensor.sonoff_pow_power измерение идет в W, если switch.sonoff_pow_relay не трогать то всё считается корректно, получается что при отключении розетки счетчик energy_total_day_sonoff_pow_001 считает время отключения розетки как потребление хотя по графику там 0.
УдалитьПока временно решил проблему установкой управляемого реле питания бойлера перед розеткой.
Возможно дело в том как розетка отдает показатели потребления в выключенном состоянии, у меня на broadlink и xiaomi при выключении сенсор не обновляется до момента включения, а у вас на sonoff постоянно обновляет текущее потребление даже в выключенном состоянии.
приветствую, столкнулся с той же проблемой и на моем sonoff pow r2. тут решение https://community.home-assistant.io/t/integration-sensor-wrong-inaccurate/150544/39
Удалитьиспользовать method: left
- platform: integration
source: sensor.boiler_power
name: energy_boiler_power4_001
unit_prefix: k
round: 3
method: left
Хорошая статья.
ОтветитьУдалитьА можно добавить температуру,например с датчика DS18B20
Можно подключить DS18B20 к одному из свободных выводов SONOFF POW и добавить его в ESPHome как тут https://esphome.io/components/sensor/dallas.html
УдалитьИ в автоматизацию добавить действие при достижении температуры (Например включить, если температура воды станет ниже определенного значения).
Здравствуйте подскажите как ра работает режим автовыключение? включил его он выключил бойлер черз 1 мин при нагрузке меньше 10 ват. Потом решил еще раз включить бойлер через несколько минут, и после этого он уже не выключает автовыключение
ОтветитьУдалитьУ меня выключается бойлер через 1 минуту маленького потребления тока столько раз, сколько его включаешь.
УдалитьЧтобы триггер сработал должно быть соблюдено три условия: Кнопка автоотключения включена (input_boolean.boiler_001_auto_off = on), время по Home Assistant (sensor.time) должно быть между 7:00 и 23:00. И реле включения бойлера должно быть включено (switch.sonoff_pow_relay = on)
Проверьте эти условия через "Панель разработчика"
Как очистить все значения? Чтобы считало все заново.
ОтветитьУдалитьОни сами обнулятся через время
УдалитьНе я хочу очистить все потому как делал тесты. И хочется чтобы уже считало с нуля.
УдалитьВсе значения хранятся в Вашем Home Assistant. Попробуйте необходимым сущностям задать нулевые значения как описано тут: https://kvvhost.ru/2020/05/03/python-set-state-ha/
УдалитьПриветствую. После обновления 2022.9.0 получил ошибку, что сервис utility_meter.select_tariff потерялся. До обновления всё работало нормально. switch energy tariffs_001 uses an unknown service
ОтветитьУдалитьThe automation "switch energy tariffs_001" (automation.switch_energy_tariffs_001) has an action that calls an unknown service: utility_meter.select_tariff.
This error prevents the automation from running correctly. Maybe this service is no longer available, or perhaps a typo caused it.
To fix this error, edit the automation and remove the action that calls this service.
Click on SUBMIT below to confirm you have fixed this automation.
Да, действительно, теперь utility_meter.select_tariff недоступен. Вместо нее следует использовать select.select_option. Будет время - переделаю автоматизацию.
УдалитьБыло бы круто !
УдалитьВ конце статьи добавил вариант решения данной проблемы
УдалитьСпасибо, проверю. Самостоятельно решить проблему не вышло.
УдалитьНовая актуальная версия статьи https://mynobook.blogspot.com/2022/09/boiler2.html в которой учтены все нововведения интеграции Utility Meter на текущий момент.
Удалить