Привязка устройств, подключенных с помощью MQTT к OpenHAB 3
- Предыстория
- Подготовка
- Добавление MQTT брокера в OpenHAB
- Добавление в OpenHAB устройств подключенных к MQTT брокеру
- Добавление в OpenHAB устройств подключенных к HomeAssistant через MQTT брокера
Предыстория
Все Xiaomi датчики в доме подключены через ZigBee2MQTT к MQTT серверу и далее привязаны в HomeAssistant. Такая схема отлично работает уже более года, были проблемы, когда в этой сети присутствовали еще и настроенные розетки Xiaomi, которые уходили в глубокий сон и сеть начинала частично отваливаться т.к. розетки выступали ретрансляторами, но исключив их всё отлично работает. Как всё это установить и настроить описано в статье CC2531 + ZigBee2MQTT, отказываемся от шлюзов производителей.
Дополнительно к MQTT серверу подключено несколько реле Sonoff на прошивке Tasmota.
Возникла необходимость привязать существующую конфигурацию к OpenHAB 3.
Подготовка
Первым делом устанавливаем необходимые компоненты: MQTT Binding, Jinja Transformation и JSONPath Transformation.
Добавляем новый Binding: Settings -> Bindings
.
В правом нижнем углу нажимаем +, в строке поиска вводим MQTT
, нажимаем на найденный компонент MQTT Binding
, в сплывающем окне нажимаем кнопку Install
.
Устанавливаем дополнения Jinja Transformation и JSONPath Transformation в меню Settings -> Transformation.
В правом нижнем углу нажимаем +, в списке выбираем необходимые дополнения.
Добавление MQTT брокера в OpenHAB
Переходим Settings -> Things -> + -> MQTT Binding
.
Выбираем добавление MQTT шлюза вручную.
Заполняем поля:
- Unique ID - Уникальный идентификатор в системе, генерируется автоматически, но для понимания лучше заполнить руками.
- Label - Понятное наименование для пользователей.
- Location - Место расположения устройства, заполняется произвольно для удобства сортировки и поиска.
Разворачиваем полный доступный список настроек кнопкой Show advanced
.
Продолжаем заполнение полей с настройками:
- Broker Hostname/IP - Адрес MQTT брокера.
- Broker Port - Порт, на котором работает сервис. Заполняется если отличается от стандартного.
- Username - Имя пользователя, если установлен.
- Password - Пароль, если установлен.
Остальные настройки выставляются в зависимости от настроек MQTT брокера. В самом низу нажимаем кнопку Create Thing
.
Альтернативный метод настроить MQTT брокер в OpenHAB это добавить его через файл конфигурации .things
.
Для сборки openhabian в каталоге /etc/openhab/things/
создаем файл myhomemqtt.things
. (Доступ в каталог с настройками можно получить по сети: Win+R
-> \\openhabian_IP_addr\openHAB-conf\
. Пользователь/Пароль по умолчанию openhabian
/openhabian
).
В созданный файл вносим настройки MQTT брокера:
Bridge mqtt:broker:MyMQTTBroker "Home MQTT Broker" @ "ServerRoom" [ host="172.16.18.251", secure=false, username="mqttuser", password="mqttpassword"]
После сохранения файла в разделе Things появится созданный MQTT broker.
Добавление в OpenHAB устройств подключенных к MQTT брокеру
Добавим в OpenHAB реле Sonoff Basic прошитое программным обеспечением от Tasmota и подключенное к MQTT брокеру. Как прошить реле Sonoff Basic прошивкой от Tasmota и подключить его к MQTT Broker описано в статье: Прошивка Tasmota в реле Sonoff Basic и интеграция в Home Assistant.
В OpenHAB переходим Settings -> Things -> + -> MQTT Binding
, внизу в разделе Add Manually
выбираем Generic MQTT Thing
.
Заполняем (или оставляем по умолчанию) поля Unique ID, Label и Location. В поле Parent Bridge выбираем добавленный ранее MQTT Broker.
Разворачиваем полный доступный список настроек кнопкой Show advanced
. Заполняем поля:
- Availability Topic - Топик отображающий доступность устройства. Для устройств на прошивке Tasmota обычно выглядит как
tele/tasmota_XXXXXX/LWT
, где XXXXXX последние шесть символов ID устройства. - Device Available Payload - Значение топика, когда устройство доступно. В данном случае значение будет равно Online.
- Device Unavailable Payload - Значение топика, когда устройство не доступно. В данном случае значение будет равно Offline.
Посмотреть топики и параметры можно на MQTT сервере, например с помощью MQTT Explorer.
Нажимаем кнопку Create Thing
. При успешном добавлении в разделе Settings -> Things
появится добавленное реле со статусом ONLINE.
Проваливаемся в добавленное устройство, вкладка Channels
. Добавляем новый канал управления реле, кнопка Add Channel
. Выполняем настройку канала:
- Channel Identifier - Уникальный идентификатор канала в системе, заполняется без пробелов.
- Label - Понятное наименование канала для пользователей.
- Channel type - Тип канала, в данном случае
On/Off Switch
. - MQTT State Topic - Топик текущего состояния канала. В данном случае
stat/tasmota_XXXXXX/POWER
. - MQTT Command Topic - Топик в который отправляются команды управления -
cmnd/tasmota_XXXXXX/POWER
. - Custom On/Open Value - Значение присваиваемое в командном топике для включения реле - ON.
- Custom Off/Closed Value - Значение присваиваемое в командном топике для отключения реле - OFF.
Добавляем новый канал устройства кнопкой Create
.
Добавляем устройство в Semantic Model
кнопкой Add Equipment to Model
, там же создадим Items
для управления созданным каналом.
В разделе Equipment
заполняем поля:
- Name - Уникальный идентификатор в системе.
- Label - Понятное наименование для пользователей.
- Category - Категория.
- Semantic Class - Класс семантической модели устройств, в OpenHAB все устройства поделены по таким классам.
В разделе Channels
выделяем созданный ранее канал и заполняем поля аналогично разделу Equipment
. Добавляем устройство нажав кнопку Add to Model
.
Проверяем работу реле. Переходим Settings -> Things -> Устройство -> Channels -> Разворачиваем канал -> созданный Item
.
Нажимая единственный переключатель, проверяем работу реле. В логе увидим следующую запись:
Альтернативное добавление устройства через конфигурационный файл будет выглядеть следующим образом.
Открываем файл .thing
где прописана конфигурация MQTT брокера и добавляем устройство вместе с топиком показывающим доступность устройства и каналом управления с соответствующими топиками. Данные так же берем из MQTT Explorer.
Bridge mqtt:broker:MyMQTTBroker "Home MQTT Broker" @ "ServerRoom" [ host="172.16.18.251", secure=false, username="mqttuser", password="mqttpassword"] { Thing mqtt:topic:D8F15BB29XXX "sonoff_relay" @ "Room" [ availabilityTopic="tele/tasmota_B29XXX/LWT", payloadAvailable="Online", payloadNotAvailable="Offline" ] { Channels: Type switch : PowerSwitch [ stateTopic="stat/tasmota_B29XXX/POWER", commandTopic="cmnd/tasmota_B29XXX/POWER", on="ON", off="OFF" ] } }
Осталось добавить Item
. Переходим в каталог items, где создаем файл mqtt.items
, добавляем:
Group sonoffrelay "Реле Sonoff" (Room) ["LightStripe"] Switch sonoffrelay_OnOffSwitch "On/Off Switch" (sonoffrelay) ["Point"] { channel="mqtt:topic:D8F15BB29XXX:PowerSwitch" }
Сохраняем и проверяем работоспособность.
Добавление в OpenHAB устройств подключенных к HomeAssistant через MQTT брокера
При интеграции ZigBee2MQTT с HomeAssistant подключенные устройства так же работают и с OpenHAB. Для примера добавим датчик температуры в OpenHAB.
В OpenHAB переходим Settings -> Things -> + -> MQTT Binding
, внизу в разделе Add Manually
выбираем HomeAssistant MQTT Component
.
Аналогично, как и при добавлении Generic MQTT заполняем поля Unique ID, Label и Location. В поле Parent Bridge выбираем добавленный ранее MQTT Broker.
В поле MQTT Config Topic
записываем доступные топики устройства, посмотреть их можно с помощью MQTT Explorer.
В рассматриваемом примере это датчик температуры и влажности от компании Xiaomi. Добавляемые топики будут выглядеть так:
sensor/0x00158d0004072d67/temperature sensor/0x00158d0004072d67/humidity sensor/0x00158d0004072d67/battery sensor/0x00158d0004072d67/linkquality sensor/0x00158d0004072d67/voltage
Первое название топика, homeassistant
, в данном разделе опускается и заносится в поле MQTT Base Prefix
.
Нажимаем кнопку Create Thing
. При успешном добавлении в разделе Settings -> Things
появится добавленный датчик со статусом UNKNOWN.
Добавляем устройство в Semantic Model
кнопкой Add Equipment to Model
в разделе Channels
в свойствах устройства, там же создадим Items
для управления созданными каналами.
Как в примере выше в разделе Equipment
заполняем поля Name, Label, Category, Semantic Class, В разделе Channels
выделяем все каналы и заполняем поля свойств каждого. Добавляем устройство нажав кнопку Add to Model
.
После добавления Items
значения свойств устройства будут в значении NULL, отображение данных, как и переход устройства из статуса UNKNOWN в статус ONLINE происходит с задержкой, время обновления данных зависит от того, как часто ZigBee устройство отправляет данные MQTT брокеру.
Напоследок рассмотрим, как описанное выше будет выглядеть при добавлении устройства через файл конфигурации.
Открываем файл .thing
где прописана конфигурация MQTT брокера и добавляем устройство, в свойствах сразу указываем все необходимые топики через запятую, базовый топик указывается в идентификаторе.
Bridge mqtt:broker:MyMQTTBroker "Home MQTT Broker" @ "ServerRoom" [ host="172.16.18.251", secure=false, username="mqttuser", password="mqttpassword"] { Thing mqtt:<strong>homeassistant</strong>:00158d0004072d67 "xiaomi_temperature_toilet" @ "Toilet" [ topics="sensor/0x00158d0004072d67/linkquality", "sensor/0x00158d0004072d67/humidity", "sensor/0x00158d0004072d67/temperature", "sensor/0x00158d0004072d67/battery", "sensor/0x00158d0004072d67/voltage" ] }
Переходим в каталог items, где создаем файл mqtt.items
, добавляем:
Group xiaomitemperaturetoilet "xiaomi_temperature_toilet" (Toilet) ["WeatherService"] Number xiaomi_temperature_toilet_linkquality "xiaomi_temperature_toilet_linkquality" (xiaomitemperaturetoilet) ["Point"] { channel="mqtt:homeassistant:00158d0004072d67:0x00158d0004072d67_5Flinkquality_5Fzigbee2mqtt#sensor" } Number xiaomi_temperature_toilet_battery "xiaomi_temperature_toilet_battery" (xiaomitemperaturetoilet) ["Point"] { channel="mqtt:homeassistant:00158d0004072d67:0x00158d0004072d67_5Fbattery_5Fzigbee2mqtt#sensor" } Number xiaomi_temperature_toilet_voltage "xiaomi_temperature_toilet_voltage" (xiaomitemperaturetoilet) ["Point"] { channel="mqtt:homeassistant:00158d0004072d67:0x00158d0004072d67_5Fvoltage_5Fzigbee2mqtt#sensor" } Number xiaomi_temperature_toilet_temperature "xiaomi_temperature_toilet_temperature" (xiaomitemperaturetoilet) ["Point"] { channel="mqtt:homeassistant:00158d0004072d67:0x00158d0004072d67_5Ftemperature_5Fzigbee2mqtt#sensor" } Number xiaomi_temperature_toilet_humidity "xiaomi_temperature_toilet_humidity" (xiaomitemperaturetoilet) ["Point"] { channel="mqtt:homeassistant:00158d0004072d67:0x00158d0004072d67_5Fhumidity_5Fzigbee2mqtt#sensor" }
И в заключении небольшой лайфхак. Что бы добавить свойства каналов (Items) не надо ломать голову как это сделать, добавляем устройство в файл .things
, далее в графическом интерфейсе добавляем Equipment Model
выбираем все каналы и жмем кнопку Expert Mode
. Копируем данные в файл .items
. Профит.