Постановка задачи.
Уменьшить энергозатраты на отопление в завимости от внешней температуры, а также от режима Дома и НЕ Дома ( когда есть либо нет людей в доме).
Схема построения.
Схема представляет контроллер ESP8266 c двумя датчиками температуры (DHT11 или Ds18b20) подача воды и обратка воды, которые монтирутся на трубы котла соответственно. А также два реле - полное вкл/выкл котла ( подключатся к клеммаи питания котла) и
второе реле управление работой котла( подключается к клемам термостата). Желателен, но не обязателен датчик утечки газа для аварийного отключения котла. На прошивке EasyESP устройства выглядят следующим образом
Управление котлом осуществляетя на основе MQTT сервера mosquitto. Правила для управления выглядят приблизительно так
on MQTT#Kotel_on_off>=0 do //// Управление котлом
GPIO,13,%eventvalue%
endon
on MQTT#Off_on>=0 do ///// Отключение включение котла
GPIO,5,%eventvalue%
endon
Настройка Home Assistant (HA).
Первоначально необходимо аппроксимировать кривые характерисктик котла, которые приведены в описании каждого котла, например, для газового котла Sime Metropolis 25 OF эти кривые выглядят так
Аппроксимированне кривые в HA можно представить в виде шаблона (templates)
- platform: template
sensors:
back_temp:
friendly_name: 'Расчетная температура обратки'
unit_of_measurement: "°C"
value_template: >-
{% if states('sensor.temperatura_ulitsa') | float != 125 %} # Отказ датчика температуры на улице
{% if is_state('input_boolean.doma','on') %} # Режим Дома ( Средняя температура 22 °C ) Режим НЕ Дома ( Средняя температура 17 °C )
# input_number.add_temp - дополнительный нагрев/охлаждение необязателен
{{ ((( -0.0016 * states('sensor.temperatura_ulitsa') | float * states('sensor.temperatura_ulitsa') | float - 0.4072 * states('sensor.temperatura_ulitsa') | float)) + 29.7 + states('input_number.add_temp') | float) | round(2) }}
{% else %}
{{ ((( - 0.1 * states('sensor.temperatura_ulitsa') | float)) + 20.5 + states('input_number.add_temp') | float) | round(2) }}
{% endif %}
{% else %}
0 # Отказ sensor.temperatura_ulitsa управление по средней температере в доме
{% endif %}
- platform: template
sensors:
in_temp:
friendly_name: 'Расчетная температура подачи'
unit_of_measurement: "°C"
value_template: >-
{% if states('sensor.temperatura_ulitsa') | float != 125 %}
{% if is_state('input_boolean.doma','on') %}
{{ ((( -0.0046 * states('sensor.temperatura_ulitsa') | float * states('sensor.temperatura_ulitsa') | float - 0.8639 * states('sensor.temperatura_ulitsa') | float)) + 39.6643 + 2.5*states('input_number.add_temp') | float) | round(2) }}
{% else %}
{{ ((( - 0.25 * states('sensor.temperatura_ulitsa') | float)) + 24.5 + 2.5*states('input_number.add_temp') | float) | round(2) }}
{% endif %}
{% else %}
0
{% endif %}
Средняя температура в доме
- platform: min_max
name: "Средняя температура"
type: mean
entity_ids:
- sensor.konditsioner_3_etazh
- sensor.konditsioner_gostinnaia
- sensor.konditsioner_kabinet
- sensor.konditsioner_kukhnia
- sensor.konditsioner_spalnia
- sensor.konditsioner_tema
В соответствии с этим можно написать автоматизацию включения/выключения котла
alias: Газовый котел зима
trigger:
- platform: time_pattern
minutes: /5
condition:
- condition: or
conditions:
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.dayofyear
above: '280'
- condition: numeric_state
entity_id: sensor.openweathermap_forecast_temperature
below: '15'
- condition: and
conditions:
- condition: numeric_state
entity_id: sensor.dayofyear
below: '104'
- condition: numeric_state
entity_id: sensor.openweathermap_forecast_temperature
below: '15'
- condition: state
entity_id: switch.otopitelnyi_kotel
state: 'on'
action:
- service: timer.cancel
target:
entity_id: timer.ozhidanie
- choose:
- conditions:
- condition: and
conditions:
- condition: state
entity_id: switch.gazovyi_kotel
state: 'off'
- condition: template
; value_template: >-
{{ ((states('sensor.obratka_kotla_temperatura')) != 'unknown'
and ((states('sensor.back_temp')|float) >=
(states('sensor.obratka_kotla_temperatura')|float))) or
((states('sensor.podacha_kotla_temperatura')) != 'unknown'
and ((states('sensor.in_temp')|float) >=
(states('sensor.podacha_kotla_temperatura')|float))) or
((states('sensor.obratka_kotla_temperatura')) == 'unknown'
and (states('sensor.podacha_kotla_temperatura')) ==
'unknown' and (states('sensor.sredniaia_temperatura')|float)
< (states('sensor.comfort_temp')|float)) or
((states('sensor.temperatura_ulitsa') | float) == 125 and
(states('sensor.sredniaia_temperatura')|float) <
(states('sensor.comfort_temp')|float)) }}
sequence:
- service: switch.turn_on
data: {}
entity_id: switch.gazovyi_kotel
- conditions:
- condition: and
conditions:
- condition: state
entity_id: switch.gazovyi_kotel
state: 'on'
- condition: template
value_template: >-
{{ ((states('sensor.obratka_kotla_temperatura')) != 'unknown'
and ((states('sensor.back_temp')|float) <
(states('sensor.obratka_kotla_temperatura')|float))) or ((states('sensor.podacha_kotla_temperatura')) != 'unknown' and ((states('sensor.in_temp')|float) < (states('sensor.podacha_kotla_temperatura')|float))) or ((states('sensor.obratka_kotla_temperatura')) == 'unknown' and (states('sensor.podacha_kotla_temperatura')) == 'unknown' and (states('sensor.sredniaia_temperatura')|float) > (states('sensor.comfort_temp')|float)+0.5) or ((states('sensor.temperatura_ulitsa') | float) == 125 and (states('sensor.sredniaia_temperatura')|float) > (states('sensor.comfort_temp')|float)+0.5) }}
sequence:
- service: switch.turn_off
data: {}
entity_id: switch.gazovyi_kotel
default: []
- service: timer.start
data:
duration: '0'
target:
entity_id: timer.ozhidanie
mode: single
Где
sensor.dayofyear - порядковый день в году ( включение в холодное время года ),
- platform: template
sensors:
dayofyear:
friendly_name: 'Day Number'
value_template: "{{ now().strftime('%j') }}"
запуск автоматизации осуществляетяс раз в 5 минут, так как объем воды в системе отопления 200л, а циркуляционный насос котла имеет производительность 40л/мин.
sensor.openweathermap_forecast_temperature - прогноз погоды, если > 15 °C котел отключен.
switch.gazovyi_kotel - включение/выключение котла по температуре.
Можно также добавить автоматизацию для устранения избыточного нагрева
alias: Стоп по температуре газовый котел
trigger:
- platform: time_pattern
minutes: /1
condition:
- condition: and
conditions:
- condition: template
value_template: >-
{{ ((states('sensor.obratka_kotla_temperatura')) != 'unknown' and
((states('sensor.back_temp')|float) <
(states('sensor.obratka_kotla_temperatura')|float))) or ((states('sensor.podacha_kotla_temperatura')) != 'unknown' and ((states('sensor.in_temp')|float) < (states('sensor.podacha_kotla_temperatura')|float))) or ((states('sensor.obratka_kotla_temperatura')) == 'unknown' and (states('sensor.podacha_kotla_temperatura')) == 'unknown' and (states('sensor.sredniaia_temperatura')|float) > (states('sensor.comfort_temp')|float)) or ((states('sensor.temperatura_ulitsa') | float) == 125 and (states('sensor.sredniaia_temperatura')|float) > (states('sensor.comfort_temp')|float)) }}
- condition: state
entity_id: switch.gazovyi_kotel
state: 'on'
action:
- service: switch.turn_off
data: {}
entity_id: switch.gazovyi_kotel
mode: single
Результаты приведены на рисунках
Выводы.
Время работы котла составляет от 35-45%, что дает существенную экономию энергоресурсов.
Новости