Stupid House

Взаимодействие между системами автоматизации Home Assistant и OpenHAB


Необходимость взаимодействия между системами автоматизации может возникнуть, когда доступ к управлению устройствами находится в одной системе, а скриптами автоматизаций управляет другая система. Например, есть автоматизация управления обогревом помещения, для ее реализации, помимо умных устройств, необходимо задействовать вспомогательные компоненты (в Home Assistant именуемые Helpers) для задания температуры включения обогрева и включения/отключения автоматизации в целом, если умные устройства доступны в обоих системах и управление ими возможно обоими системами, как и считывание состояний, то созданные виртуальные компоненты в одной системе не будут доступны в другой.

Для взаимодействия Home Assistant и OpenHAB можно использовать MQTT сервер. Необходимые данные виртуальных компонентов будут храниться на MQTT сервере, их значения и доступность не будут зависеть от состояния систем автоматизации (например, какая-либо из систем автоматизации выключена), обе системы могут изменять и отслеживать текущее значение компонентов.

Для примера рассмотрим вариант с упомянутой выше автоматизацией обогрева помещения, но, в Home Assistant останется только возможность управления (вкл/откл. автоматического обогрева, выставление температуры срабатывания, отображение текущего состояния), а сама автоматизация будет выполняться в OpenHAB.

 

 

Задача

Для корректного управления задачей обогрева помещения необходимо в Home Assistant и OpenHAB создать вспомогательные элементы управления, данные которых будут храниться на MQTT сервере.

  1. Компонент типа Switch - отвечающий за включение/отключение автоматического обогрева помещения.
  2. Компонент типа Number - температура включения обогревательного элемента.

Подразумевается, что в сети установлен и настроен MQTT сервер, системы автоматизации настроены для взаимодействия с ним.

  1. Установка MQTT сервера на FreeBSD
  2. Установка MQTT сервера на Ubuntu
  3. Добавление 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.

Home Assistant MQTT Entity

 

Настройка 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 проверяем наши компоненты.

OpenHAB MQTT Thing and Items

 

Проверка

На MQTT сервере проверяем что созданные компоненты появились.

mqtt check virtual temperature

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

 

Итог

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

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

 

Автор: muxa, 16.05.2023
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии