Home assistant автоматизация отопления

Generic Thermostat

The generic_thermostat climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater or air conditioning under the hood. When in heater mode, if the measured temperature is cooler than the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in air conditioning mode, if the measured temperature is hotter than the target temperature, the air conditioning will be turned on and turned off when required temperature is reached. One Generic Thermostat entity can only control one switch. If you need to activate two switches, one for a heater and one for an air conditioner, you will need two Generic Thermostat entities.

Configuration Variables

Name of thermostat.

An ID that uniquely identifies this thermostat. Set this to a unique value to allow customization through the UI.

entity_id for heater switch, must be a toggle device. Becomes air conditioning switch when ac_mode is set to true .

entity_id for a temperature sensor, target_sensor.state must be temperature.

Set minimum set point available.

Set maximum set point available.

Set initial target temperature. Failure to set this variable will result in target temperature being set to null on startup. As of version 0.59, it will retain the target temperature set before restart if available.

Читайте также:  Децентрализованное водоснабжение это гигиена

Set the switch specified in the heater option to be treated as a cooling device instead of a heating device.

Set a minimum amount of time that the switch specified in the heater option must be in its current state prior to being switched either off or on.

Set a minimum amount of difference between the temperature read by the sensor specified in the target_sensor option and the target temperature that must change prior to being switched on. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will start when the sensor equals or goes below 24.5.

Set a minimum amount of difference between the temperature read by the sensor specified in the target_sensor option and the target temperature that must change prior to being switched off. For example, if the target temperature is 25 and the tolerance is 0.5 the heater will stop when the sensor equals or goes above 25.5.

Set a keep-alive interval. If set, the switch specified in the heater option will be triggered every time the interval elapses. Use with heaters and A/C units that shut off if they don’t receive a signal from their remote for a while. Use also with switches that might lose state. The keep-alive call is done with the current valid climate integration state (either on or off).

Set the initial HVAC mode. Valid values are off , heat or cool . Value has to be double quoted. If this parameter is not set, it is preferable to set a keep_alive value. This is helpful to align any discrepancies between generic_thermostat and heater state.

Set the temperature used by preset_mode: away . If this is not specified, the preset mode feature will not be available.

The desired precision for this device. Can be used to match your actual thermostat’s precision. Supported values are 0.1 , 0.5 and 1.0 . This value is also used as the step size for setting the target temperature.

0.1 for Celsius and 1.0 for Fahrenheit.

Time for min_cycle_duration and keep_alive must be set as “hh:mm:ss” or it must contain at least one of the following entries: days: , hours: , minutes: , seconds: or milliseconds: . Alternatively, it can be an integer that represents time in seconds.

Currently the generic_thermostat climate platform supports ‘heat’, ‘cool’ and ‘off’ HVAC modes. You can force your generic_thermostat to avoid starting by setting HVAC mode to ‘off’.

Please note that when changing the preset mode to away, you will force a target temperature change as well that will get restored once the preset mode is set to none again.

Автоматизация — Управление обогревом помещения в Home Assistant

Наступила осень, на улице похолодало, а отопление включили ещё не везде и тем, кому повезло меньше приходится отапливать помещение при помощи электрических бытовых обогревателей. Включив такой обогреватель часто про него забывают, вспоминая о нем только когда становится совсем жарко после чего открываются окна для проветривания. Такой подход не самым положительным образом сказывается на счете за электричество. Имея дома умную розетку и датчик температуры процесс обогрева можно автоматизировать, нагревая помещение до комфортной температуры, обогреватель при этом может быть любой, главное, чтобы нагрузка была не больше допустимой. Дополнительным бонусом такого подхода может выступать удаленный контроль, например, подходя к дому можно заранее включить обогрев.

Задача

Автоматизировать обогрев помещения при падении температуры ниже заданной. Нижний порог включения на обогрев может выставляться вручную, верхний порог отключения обогрева +3 градуса от температуры включения. Что бы не обогревать улицу, предусмотреть отключение обогрева при открытии окна. Возможность отключения автоматического режима обогрева помещения.

Необходимые компоненты

  • Датчик температуры. Например, Xiaomi MiJia temperature & humidity sensor (WSDCGQ01LM)
  • Датчик открытия окна окна. Например, Xiaomi MiJia door & window contact sensor (MCCGQ01LM)
  • Умная розетка. Например, Xiaomi Aqara socket Zigbee (QBCZ11LM)
  • Система автоматизации. Home Assistant

Решение для Home Assistant

Для включения/отключения режима автоматического обогрева и выставления температуры включения обогрева нам понадобятся два дополнительных вспомогательных компонента (хелпера):

  • Выключатель типа Toggle для включения/отключения режима автоматического обогрева
  • Ползунок типа Number для выставления температуры включения со значениями от 10 до 25 градусов и шагом 1

В меню Configuration -> Helpers -> + добавляем хелперы, но я рекомендую каждый сценарий описывать в отдельном файле. Создадим файл room_heating.yaml в папке .homeassistant/packages/ , в котором будет описан сценарий обогрева комнаты. Подробно про пакеты можно почитать на сайте Home Assistant.

Добавляем хелперы в файл:

На панель Lovelace выводим меню управления обогревом.

Итак, у нас есть умная розетка, датчик температуры и датчик открытия. Создаем автоматизации. Для понимания: xiaomi_socket_room_heater — розетка, xiaomi_temperature_room — датчик температуры, xiaomi_window_sensor_room — датчик открытия, room_auto_heat — выключатель автоматического обогрева, room_heat_temperature — выставленная температура, ниже которой включается обогрев.

Автоматизация номер один. Срабатывание автоматизации происходит при включении автоматического обогрева помещения, розетка включается при следующих условиях: температура на датчике ниже заданной температуры включения обогрева, датчик открытия в состоянии OFF и розетка в состоянии OFF. Добавляем автоматизацию в файл room_heating.yaml .

Добавляем автоматизацию включающую розетку при падении температуры ниже заданной. Включение обогрева произойдет только в том случае если включен автоматический обогрев, датчик открытия в состоянии OFF и розетка в состоянии OFF.

Автоматизация отключающая обогрев в помещении при превышении температуры включения на +3 градуса. Розетка отключается только если она находится в состоянии ON.

Автоматизация отключающая обогрев в помещении при открытии окна, не надо греть улицу :). Розетка отключается только если она находится в состоянии ON.

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

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

Как настроить Home Assistant чтобы термостат включал несколько обогревателей с паузой между включением

Я тут продолжаю экспериментировать с Home Assistant. Придумал себе небольшой проект. Решил сделать обогрев одной комнаты на даче.

Для этого я решил купить два обогревателя и подключить каждый из них в умную розетку. В комнате уже есть датчик температуры.

Сервер Home Assistant знает температуру с датчика и может включать-выключать розетки. Ну а дальше дело техники — говорю серверу что я хочу чтобы температура была +24. Home Assistant включает обогреватели и они шпарят до тех пор пока в комнате не будет +24. Потом они выключаются. Температура постепенно падает, через некоторое время они опять включаются и опять добивают температуру до +24.

Если есть один обогреватель, то для того чтобы это настроить в Home Assistant нужно добавить в конфиг всего несколько строк:

Тут как раз указывается умная розетка («switch.smart_plug») и датчик который показывает температуру («sensor.room_temperature»).

Но моя задача — подключить два обогревателя. Можно сделать следующее. Создать группу «group.heater_smart_plugs» и добавить в нее две умные розетки, а в конфиге HA указать:

Когда температура ниже заданной Home Assistant будет включать «виртуальное» устройство «group.heater_smart_plugs» и это будет включать обе розетки.

Так все работает, но мне хотелось чтобы система работала другим образом. Мне бы хотелось чтобы обогреватели включались не одновременно, а с небольшой задержкой. Т.е. сначала включается один обогреватель, проходит несколько секунд и только потом включается второй обогреватель. Ну и так же про выключение. Сначала выключается один, пауза, потом второй.

Я мало что понимаю в электричестве, но мне кажется что ситуация с паузой более правильная. Обогреватели это достаточно мощные устройства, которые дают большую нагрузку. Мне бы хотелось чтобы на электрическую сеть не было сразу большой нагрузки, а нагрузка приходила бы постепенно: вот сейчас включили два киловатта, чуть позже еще два. А не так: не было никакой нагрузки, а тут фигакс и сразу 4 кВт.

Так что я решил убедить Home Assistant что обогреватели нужно включать с паузой.

Тестовый стенд

Мой настоящий сервер HA — это Raspberry Pi 3 B+. Не очень мощное устройство. Плюс на нем уже крутится некоторая автоматизация. Мне очень нравится экспериментировать с конфигурированием Home Assistant не на настоящем продакшн сервере, а на специальном тестовом стенде, который я разворачиваю на своем ноутбуке.

Поднять сервер с HA на ноутбуке невероятно просто. Нужно чтобы на ноуте был установлен Docker, а потом одна команда и Home Assistant работает:

С помощью этой команды я поднял тестовую инсталляцию Home Assistant на которой можно делать все что угодно и это никак не повлияет на работу моего настоящего сервера HA. Плюс, поскольку эта тестовая инсталляция поднята на моем ноутбуке перезагрузка сервера HA выполняется сильно-сильно быстрее чем на Raspberry Pi. Поэтому цикл настройки поправил-перезагрузил-проверил проходит гораздо быстрее и приятнее.

Итак, у меня есть сервер Home Assistant на котором можно играться. К нему не подключены никакие датчики температуры и не подключены никакие розетки. Я решил создать тестовые версии этих устройств.

Вот что у меня получилось. Вот все содержимое файла «configuration.yaml»:

(Я тут завел 2 переменные «input_boolean_1» и «input_boolean_2», каждая из них хранит статус «виртуальной» умной розетки — что она — включена или выключена. И завел переменную «input_number_1» в которой хранится «виртуальная» температура в комнате. Дальше из этой переменной делаю сенсор температуры, а из первых двух переменных делаю switch)

А вот yaml с настройкой интерфейса:

Видео как это работает:

  • Можно руками указывать какая сейчас есть температура в комнате
  • Включаем термостат, он видит что температура в комнате +5 градусов, это меньше чем желаемая +24, поэтому он включает обогреватель 1
  • Постепенно увеличиваем температуру в комнате +9, +13.5, +17.5, +21.5
  • Как только температура в комнате становится больше чем заданная температура, термостат выключается

Итак, есть тестовый стенд, который очень похож на то что что у меня есть по настоящему.

Виртуальный выключатель

В конце концов, много раз обратившись за помощью к Жене мне удалось сделать решение которое делает то что мне нужно.

Я сделал виртуальный выключатель. За ним прячутся 2 выключателя и он берет на себе всю логику чтобы включать-выключать эти два выключателя с паузой.

Вот его описание в файле configuration.yaml:

Что тут важно. У выключателя статус может быть либо «on» (включен), либо «off» (выключен). У этого виртуального выключателя статус «on» будет в ситуации когда хотя бы один из двух выключателей включен

  • Оба выключены — статус виртуального выключателя «off»
  • Один включен — статус виртуального выключателя «on»
  • Оба включены — статус виртуального выключателя «on»

При включении этого виртуального выключателя дергается скрипт «turn_on_with_delay», а при выключении — «turn_off_with_delay».

Вот описание этих скриптов в файле configuration.yaml:

Каждый скрипт — это последовательность (sequence) из трех действий. Включить первый, подождать, включить второй. Очень важно что в начале каждой последовательности выполняется действие «выключи другой скрипт». Благодаря этому не происходит проблемы в ситуации, когда этот виртуальный выключатель быстро включается-выключается.

Видео как это работает:

  • Включили термостат. Температура в комнате +18, термостат настроен на +24.
  • Термостат включил виртуальный выключатель, который тут же включил обогреватель 1, а через паузу обогреватель 2
  • Потихоньку растет температура в комнате. Догрели до нужной температуру, тут же выключили обогреватель 1, а через паузу обогреватель 2

Управляем конвектором и термостатом Electrolux из Home Assistant. Часть 1

Предисловие

Около 2-х лет я являюсь пользователем Home Assistant и постепенно обживаюсь устройствами, которые хочется туда интегрировать. Одним из таких устройств стало мое относительно недавнее приобретение: конвектор от Electrolux.

Изначально я рассматривал обычный конвектор, которым планировал управлять через умную розетку. В процессе изучения моделей конвекторов, мой интерес сместился на современные модели, которыми можно управлять через интернет из «коробки». Хотя они и стоят дороже решения с «розеткой», любопытство взяло верх и выбор остановился на модульном конвекторе от Electrolux, который на фоне конкурентов приглянулся по дизайну.

Со своей задачей, как устройство, конвектор справился зимой на отлично. Им я очень доволен.

Боль и первая попытка управления вне приложения

А вот управление через мобильное приложение приносило только огорчение.

Долгое подключение к серверу, иногда с N-го раза. Частая недоступность устройства и переживания за безопасность. Еще ложкой дегтя стало отсутствие решений для интеграции в «умные дома».

Через какое-то время проснулся интерес к изучению возможности управления через сторонние решения. Нагуглить что-то толковое для управления конвектором не удалось. Поэтому решил изучить трафик мобильного приложения, так как устройство далеко, а приложение всегда под рукой.

После изучения материалов по анализу траффика приложений и в по причине отсутствия опыта, все, что мне удалось выяснить, это какие данные и куда передаются для авторизации, и что дальнейшее общение происходит по TCP в зашифрованном виде. И еще узнал, как выглядит приложение для андройда после дизассемблинга )

На этом мои руки опустились в надежде позже попытаться еще раз.

Второй опыт

Все изменилось в марте, когда я увидел статью Реверс-инжиниринг протоколов управления конвектором. После ее прочтения появился стимул еще раз попытать счастья и проверить информацию автора.

Так как под рукой у меня только мобильное приложение, то свой интерес я сосредоточил именно на нем.

2 вечера ушло на то, чтобы разобраться в алгоритме шифрования

и написать простенький клиент на PHP (так как я долгое время работаю преимущественно с ним) и реализацию алгоритма шифрования на Python.

В процессе выяснил, что для каждого языка есть свои нюансы в функциях шифрования. Пришлось написать решения на Java, Python и PHP, чтобы убедиться, что шифрование/расшифровка работают как нужно. Например, в приложении используется PKCS7Padding, в других же языках нужен PKCS5Padding или же писать свою реализацию.

Таким образом через несколько вечеров уже был клиент на PHP, который позволял логиниться и общаться по TCP с сервером.

По моему мнению получившийся MVP можно было считать успехом. Часть 2

Оцените статью