Взаимодействие между системами автоматизации Home Assistant и OpenHAB
Необходимость взаимодействия между системами автоматизации может возникнуть, когда доступ к управлению устройствами находится в одной системе, а скриптами автоматизаций управляет другая система. Например, есть автоматизация управления обогревом помещения, для ее реализации, помимо умных устройств, необходимо задействовать вспомогательные компоненты (в Home Assistant именуемые Helpers) для задания температуры включения обогрева и включения/отключения автоматизации в целом, если умные устройства доступны в обоих системах и управление ими возможно обоими системами, как и считывание состояний, то созданные виртуальные компоненты в одной системе не будут доступны в другой.
Для взаимодействия Home Assistant и OpenHAB можно использовать MQTT сервер. Необходимые данные виртуальных компонентов будут храниться на MQTT сервере, их значения и доступность не будут зависеть от состояния систем автоматизации (например, какая-либо из систем автоматизации выключена), обе системы могут изменять и отслеживать текущее значение компонентов.
Для примера рассмотрим вариант с упомянутой выше автоматизацией обогрева помещения, но, в Home Assistant останется только возможность управления (вкл/откл. автоматического обогрева, выставление температуры срабатывания, отображение текущего состояния), а сама автоматизация будет выполняться в OpenHAB.
Задача
Для корректного управления задачей обогрева помещения необходимо в Home Assistant и OpenHAB создать вспомогательные элементы управления, данные которых будут храниться на MQTT сервере.
- Компонент типа Switch - отвечающий за включение/отключение автоматического обогрева помещения.
- Компонент типа Number - температура включения обогревательного элемента.
Подразумевается, что в сети установлен и настроен MQTT сервер, системы автоматизации настроены для взаимодействия с ним.
- Установка MQTT сервера на FreeBSD
- Установка MQTT сервера на Ubuntu
- Добавление MQTT брокера в OpenHAB
Настройка Home Assistant
В каталоге .homeassistant/packages/
создаем файл, в котором будут описаны компоненты доступные в обоих системах. Для системы Ubuntu будет как-то так:
$ sudo touch /home/homeassistant/.homeassistant/packages/ha_openhab.yaml
В созданный файл добавляем:
mqtt: number: ## Температура автоматического включения обогрева - object_id: balcony_heating_temperature unique_id: balcony_heating_temperature name: "Температура включения обогрева" state_topic: "homeassistant/number/balcony_heating_temperature/state" command_topic: "homeassistant/number/balcony_heating_temperature/state" min: 10 max: 25 step: 1 icon: mdi:thermostat-box retain: true switch: ## Переключатель автоматического обогрева - object_id: balcony_heating_automatic_on_off unique_id: balcony_heating_automatic_on_off name: "Автоматический обогрев" state_topic: "homeassistant/switch/balcony_heating_automatic_on_off/state" command_topic: "homeassistant/switch/balcony_heating_automatic_on_off/state" payload_on: "ON" payload_off: "OFF" state_on: "ON" state_off: "OFF" icon: mdi:brightness-auto retain: true
Для «Температуры автоматического включения обогрева» задаем минимальное и максимальное значения в 10 и 25 градусов соответственно, с шагом изменения 1.
В разделе Developer Tools -> Yaml
выполняем Check Configuration
если всё хорошо, то делаем Restart
системы автоматизации.
После перезагрузки проверяем созданные элементы в разделе Settings -> Devises & Services -> Entities
.
Настройка OpenHAB
В OpenHAB добавим новый Thing
при помощи конфигурационного файла, в котором уже ранее был прописан MQTT брокер.
Bridge mqtt:broker:MyMQTTBroker "Home MQTT Broker" @ "HomeSweetHome" [ host="192.168.100.100", secure=false, username="mqttuser", password="mqttpasswd"] { Thing mqtt:topic:heating_automatic "Автоматический обогрев" @ "Balcony" [ ] { Channels: Type switch:AutoHeatingSwitch [ stateTopic="homeassistant/switch/balcony_heating_automatic_on_off/state", commandTopic="homeassistant/switch/balcony_heating_automatic_on_off/state", on="ON", off="OFF" ] Type number:Temperature [ stateTopic="homeassistant/number/balcony_heating_temperature/state", commandTopic="homeassistant/number/balcony_heating_temperature/state", min="10", max="25" ] } }
Топики должны быть одинаковыми с Home Assistant.
Через конфигурационный файл добавляем Items
:
Group balcony_heating_automatic "Автоматический обогрев" <heating>(Balcony) ["RadiatorControl"] Switch balcony_heating_automatic_switch "Вкл/Откл" <switch>(balcony_heating_automatic) ["Switch"] { channel="mqtt:topic:balcony_heating_automatic:AutoHeatingSwitch" } Number balcony_heating_automatic_temperature "Температура включения" <temperature_cold>(balcony_heating_automatic) ["Setpoint", "Temperature"] { channel="mqtt:topic:balcony_heating_automatic:Temperature" }</temperature_cold></switch></heating>
В разделе Models проверяем наши компоненты.
Проверка
На MQTT сервере проверяем что созданные компоненты появились.
Пробуем менять температуру в одной системе автоматизации, данные сразу должны измениться во второй.
Итог
MQTT сервер предоставляет отличную возможность обмена данными между несколькими системами автоматизации. Данные хранятся в одном месте, где каждая система автоматизации получает к ним доступ, измененные данные в одной системой сразу же попадают в другую. После перезагрузки системы автоматизации значение данных автоматически считывается с MQTT сервера.
Пришла в голову мысль, что таким образом можно прокидывать некоторые значения устройств, которые работают в одной системе автоматизации и не поддерживаются другой.