Строительная компания Авеню


Мы в Facebook
Мы в Instagram
Мы в Twitter

О строительстве домов
и ремонте помещений

Услуги,возможности,
предложения о строительстве
и ремонте .....
Актуальные статьи о строительстве
размещаются бесплатно.

Вход на сайт

Автоматизация управления отопительным котлом в Home Assistant

Управление котлом в HA

Постановка задачи.

Уменьшить энергозатраты на отопление в завимости от внешней температуры, а также от режима Дома и НЕ Дома ( когда есть либо нет людей в доме).

Схема построения.

Схема представляет контроллер ESP8266 c двумя датчиками температуры (DHT11 или Ds18b20) подача воды и обратка воды, которые монтирутся на трубы котла соответственно. А также два реле - полное вкл/выкл котла ( подключатся к клеммаи питания котла) и
второе реле управление работой котла( подключается к клемам термостата). Желателен, но не обязателен датчик утечки газа для аварийного отключения котла. На прошивке EasyESP устройства выглядят следующим образом
Устройства в 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%, что дает существенную экономию энергоресурсов.

Новости

Поиск объявлений

Для поиска объявлений сделайте свой выбор и нажмите кнопку Применить