Приручи Home Assistant. Климат

16 мая 2021, 17:52

Визуальное представление

1600x_image.png?1620990635

В наличии:

  • Обычная квартира
  • Интеграция zigbee2mqtt
  • В качестве координатора Conbee 2
  • Управляемые термоголовки Eurotronic Spirit Zigbee
  • Датчики температуры/влажности Mi
  • Доработанный клапан приточной вентиляции от застройщика, в моем случае -  Vortice Vort Quadro
  • Увлажнитель MI Smart Antibacterial Humidifier

Задача

  • Точный климат контроль по всей квартире

Адаптивный климат-контроль

На каждой батареи своя термоголовка, она имеет встроенный датчик температуры, который, к слову говоря, не показывает реальных значений комнат. Даже если указать значение калибровки, оно все равно будет сильно отставать в виду расположения термоголовки - непосредственная близость к батареи, плотные шторы. Поэтому термоголовки и их управление мы привяжем к датчикам Mi.
  • Проветривание в течении дня
  • Поддержание комфортной влажности в помещениях

Обзор карточек

1600x_image.png?1620990635

Проветривание осуществляется 4 раза в день, по полчаса.

Клапан можно полностью открыть/закрыть или на определенный градус. Управляется серво.

Адаптивное управление климатом. Общая клавиша включения и бегунок для задания определенной температуры.


1600x_image.png?1620990635

Сам увлажнитель подключен через кастомную интеграцию.

Полное функциональное управление.

Карточка отображения также кастомная.

1600x_image.png?1620990635

Раздельное управление термоголовками, кастом.

1600x_image.png?1620990636

Кастомная карточка.

По сенсорам солнца отображается восход и заход. Если наводить курсор, будет отображать данные на определенное время.

Можно увеличить и двигать.

Конфиг карточки

type: 'custom:config-template-card'
entities:
  - sensor.sunrise
  - sensor.sunset
card:
  type: 'custom:apexcharts-card'
  header:
    show: true
    show_states: true
    colorize_states: true
    title: Показатели
  span:
    start: day
  graph_span: 24h
  all_series_config:
    stroke_width: 2
    extend_to_end: false
  series:
    - entity: sensor.mi_climate_room_temperature
      group_by:
        func: raw
        duration: 30min
      stroke_width: 2
      name: Температура
      color_threshold:
        - value: 25
          color: blue
          opacity: 1
        - value: 26
          color: green
        - value: 27
          color: red
    - entity: sensor.mi_climate_room_humidity
      group_by:
        func: raw
        duration: 30min
      stroke_width: 2
      name: Влажность
  y_axis_precision: 0
  apex_config:
    annotations:
      xaxis:
        - x: '${new Date(states[''sensor.sunrise''].state).getTime()}'
          label:
            text: ☼
            borderWidth: 0
            style:
              background: '#0000'
        - x: '${new Date(states[''sensor.sunset''].state).getTime()}'
          label:
            text: ☾
            borderWidth: 0
            style:
              background: '#0000'
    tooltip:
      x:
        format: 'dddd dd MMM - HH:mm'
    xaxis:
      tooltip:
        enabled: false
    legend:
      show: false
    grid:
      borderColor: '#7B7B7B'
    chart:
      foreColor: white
      zoom:
        type: x
        enabled: true
        autoScaleYaxis: true
      toolbar:
        show: true
        autoSelected: zoom
        tools:
          zoom: true
          zoomin: false
          zoomout: false
          pan: true
          reset: true

Доработка клапана приточной вентиляции

1600x_image.png?1620990637
1600x_image.png?1620990638
Используется серво, подключенный к Wemos D1 Mini. Прошивка собрана через ESPHome. Можно и Tasmota собрать, но использовать неудобно, калибровать проблемно. Цена вопроса 300 руб.

Конфиг и автоматизация для управления термоголовками

#Добавляем ползунок установки температуры
input_number:
    thermostats_adaptive:
        name: Температура
        icon: mdi:thermometer-lines
        initial: 25
        min: 20
        max: 27
        step: 0.5

#Переключатель, выключатель адаптивного управления
input_boolean:
  thermostats_adaptive:
    name: Адаптивное управление
    icon: mdi:home-thermometer-outline

#Сенсор целевого значения для термоголовок
sensor:
  - platform: template
    sensors:
      thermostat_adaptive_target:
        friendly_name: Термостаты. Целевое значение адаптив.
        value_template: "{{ state_attr('climate.thermostat_room', 'current_temperature') }}"

#Сенсор отслеживающий превышение или понижение
  - platform: template
    sensors:
      thermostat_adaptive_change_temp:
        friendly_name: Термостаты. Температура изменение.
        value_template: >
              {% if states('input_number.thermostats_adaptive_testtemp') | float < states("input_number.thermostats_adaptive") | float -%}
                up
              {% else %}
                down
              {% endif %}

#Сенсор для отображения температуры с датчиков термоголовок
  - platform: template
    sensors:
      termostat_room_current_temperature:
        friendly_name: Термостат комната. Текущая температура.
        value_template: "{{ state_attr('climate.thermostat_2', 'current_temperature') }}"
        unit_of_measurement: '°C'

  - platform: template
    sensors:
      termostat_kitchen_current_temperature:
        friendly_name: Термостат кухня. Текущая температура.
        value_template: "{{ state_attr('climate.thermostat_3', 'current_temperature') }}"
        unit_of_measurement: '°C'

automation:

#Включение адаптивного управления при старте HA
  - alias: Термостаты. Адаптивное управление включение.
    trigger:
      - platform: state
        entity_id: input_boolean.thermostats_adaptive
        to: "on"
      - platform: homeassistant
        event: start
    action:
      service: input_number.set_value
      entity_id: input_number.thermostats_adaptive
      data:
        value: "{{ states('sensor.thermostat_adaptive_target') }}"

#Указание целевой температуры для термоголовок
  - alias: Термостаты. Адаптивное управление.
    trigger:
#Срабатывает при превышении или понижении
#      - platform: state
#        entity_id: sensor.thermostat_adaptive_change_temp
#        to: "up"
#      - platform: state
#        entity_id: sensor.thermostat_adaptive_change_temp
#        to: "down"
#или проверять каждые 30 минут
      - platform: time_pattern
        minutes: "/30"
    condition:
      condition: state
      entity_id: input_boolean.thermostats_adaptive
      state: 'on'
    action:
      - service: climate.set_temperature
        entity_id: climate.thermostat_room
        data_template: 
          temperature: >
#если температыра с датчика Mi недостаточна, давать команду тероголовке увеличить на 1 градус.
                {% if states('sensor.mi_climate_room_temperature') | float < states("input_number.thermostats_adaptive") | float -%}
                  {{ states('sensor.thermostat_adaptive_target') | float   1 }}
                {% else %}
#если температыра с датчика Mi превышает, давать команду тероголовке увеличить на 1 градус.
                  {{ states('sensor.thermostat_adaptive_target') | float - 2 }}
                {% endif %}
      - service: climate.set_temperature
        entity_id: climate.thermostat_kitchen
        data_template: 
          temperature: >
                {% if states('sensor.mi_climate_room_temperature') | float < states("input_number.thermostats_adaptive") | float -%}
                  {{ states('sensor.thermostat_adaptive_target') | float   1 }}
                {% else %}
                  {{ states('sensor.thermostat_adaptive_target') | float - 2 }}
                {% endif %}

Конфиг и автоматизация для управления клапаном приточной вентиляции

input_number:
  servo_control:
    name: Клапан. Управление
    initial: -55
    min: -55
    max: 20
    step: 1
    mode: slider


input_boolean:
  servo_button:
    name: Клапан
    icon: mdi:home-thermometer-outline

automation:
  - alias: Write Servo Value to ESP
    trigger:
      platform: state
      entity_id: input_number.servo_control
    action:
      - service: esphome.air2_control_servo
        data_template:
          level: '{{ trigger.to_state.state | int }}'

  - alias: Write Servo buttom off
    trigger:
      platform: state
      entity_id: input_boolean.servo_button
      to: "off"
    action:
      - service: input_number.set_value
        entity_id: input_number.servo_control
        data:
          value: -55

  - alias: Write Servo buttom on
    trigger:
      platform: state
      entity_id: input_boolean.servo_button
      to: "on"
    action:
      - service: input_number.set_value
        entity_id: input_number.servo_control
        data:
          value: 20

  - alias: Write Servo Value to ESP
    trigger:
      platform: state
      entity_id: input_number.servo_control
    action:
      - service: esphome.air2_control_servo
        data_template:
          level: '{{ trigger.to_state.state | int }}'

  - alias: Write Servo Value to ESP_TEST
    trigger:
      platform: state
      entity_id: input_number.servo_control_calibrate
    action:
      - service: esphome.air2_control_servo
        data_template:
          level: '{{ trigger.to_state.state | int }}'

PS

Для данного решения можно применить дополнительные автоматизации:

  • Экономия тепла. Телефоны обитателей квартиры отслеживаются. Как только все уходят, можно убавлять целевую температуру. Или указать рабочие дни и время.
  • Проветривание и влажность. Если вы проветриваете больше 30 минут, есть смысл выключать увлажнитель, т.к. он будет работать вхолостую.
  • Целевая температура в помещении:

- Можно дополнительно охлаждать помещение, открывая клапан. Нужно только сравнивать температуру на улице, если там не жара - открывать.

- Закрывать шторы на время солнечной активности.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (haronych)
    (haronych) 29 дней назад

    Круто! Кое что позаимствовал... Только вопрос как описаны сенсоры:

      - sensor.sunrise
      - sensor.sunset

    Если сансет понятно где взять то санрайз там только завтрашний.

  2. Igor Gubaidullin (pavuk)
    Igor Gubaidullin (pavuk) 28 дней назад

    Вот тут нет ли ошибки?

    'input_number.thermostats_adaptive_testtemp'
    • Никита Романенко (dr3men)

      Да, нужно подставить реальный сенсор температуры. Это виртуальный я создавал, для тестов.

      Вообще, в качестве триггера хватает проверки каждые 30 мин. Эта автоматизация добавлялась для моментальной отработки в случае превышения/снижения температуры.

  3. (hACK)
    (hACK) 28 дней назад

    Отличная реализация. Скопирую себе некоторые вещи. Ещё бы добавить CO2 и кондиционер в карточку с соответствующими автоматизациями, тогда комфорт и лень будут в союзе)

  4. (AntoxaS)
    (AntoxaS) день назад

    кондиционера не хватает да полного климата

К списку статей
Россия, г. Санкт-Петербург

Устройства в материале

wemos D1 mini

Производитель: Espressif Systems
Заказать на:
JD

Скидки для сообщества

Z-Wave Ukraine

+380 68 641 9670
Промокод:
Sprut-UA
Размер скидки:
15%

Тематические чаты

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
15 октября 2018, 09:05
Прошивка для Sonoff c нативным HomeKit
02 ноября 2018, 12:14
Кнопка звонка с уведомлениями в HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
27 октября 2018, 12:20
Нативный Термостат для котла на ESP8266 с поддержкой Apple HomeKit
01 октября 2018, 07:43
Нативный HomeKit на ESP8266
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
30 августа 2019, 07:28
Несколько нетривиальных способов использования датчика открытия окон/дверей от Xiaomi/Aqara.
02 июля 2020, 07:24
Я хочу поделиться своей разработкой: "умным открывателем пластикового окна". В статье вы найдете все необходимое, чтобы повторить проект и изготовить собственный привод для открывания окна с использованием штатной фурнитуры окна.