Stupid House

Привязка устройств, подключенных с помощью MQTT к OpenHAB 3


 

Предыстория

Все Xiaomi датчики в доме подключены через ZigBee2MQTT к MQTT серверу и далее привязаны в HomeAssistant. Такая схема отлично работает уже более года, были проблемы, когда в этой сети присутствовали еще и настроенные розетки Xiaomi, которые уходили в глубокий сон и сеть начинала частично отваливаться т.к. розетки выступали ретрансляторами, но исключив их всё отлично работает. Как всё это установить и настроить описано в статье CC2531 + ZigBee2MQTT, отказываемся от шлюзов производителей.

Дополнительно к MQTT серверу подключено несколько реле Sonoff на прошивке Tasmota.

Возникла необходимость привязать существующую конфигурацию к OpenHAB 3.

 

Подготовка

Первым делом устанавливаем необходимые компоненты: MQTT Binding, Jinja Transformation и JSONPath Transformation.

Добавляем новый Binding: Settings -> Bindings.

openhab 3 install new binding

В правом нижнем углу нажимаем +, в строке поиска вводим MQTT, нажимаем на найденный компонент MQTT Binding, в сплывающем окне нажимаем кнопку Install.

openhab 3 install mqtt binding

Устанавливаем дополнения Jinja Transformation и JSONPath Transformation в меню Settings -> Transformation.

openhab 3 add new transformation

В правом нижнем углу нажимаем +, в списке выбираем необходимые дополнения.

openhab 3 add jinja and jsonpath transformation

 

 

Добавление MQTT брокера в OpenHAB

Переходим Settings -> Things -> + -> MQTT Binding.

openhab 3 new mqtt binding

Выбираем добавление MQTT шлюза вручную.

openhab 3 add new mqtt broker

Заполняем поля:

  • Unique ID - Уникальный идентификатор в системе, генерируется автоматически, но для понимания лучше заполнить руками.
  • Label - Понятное наименование для пользователей.
  • Location - Место расположения устройства, заполняется произвольно для удобства сортировки и поиска.

Разворачиваем полный доступный список настроек кнопкой Show advanced.

Продолжаем заполнение полей с настройками:

  • Broker Hostname/IP - Адрес MQTT брокера.
  • Broker Port - Порт, на котором работает сервис. Заполняется если отличается от стандартного.
  • Username - Имя пользователя, если установлен.
  • Password - Пароль, если установлен.

Остальные настройки выставляются в зависимости от настроек MQTT брокера. В самом низу нажимаем кнопку Create Thing.

openhab 3 create new mqtt 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 3 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.

openhab 3 new generic mqtt thing

Заполняем (или оставляем по умолчанию) поля Unique ID, Label и Location. В поле Parent Bridge выбираем добавленный ранее MQTT Broker.

openhab 3 new generic mqtt thing set parent bridge

Разворачиваем полный доступный список настроек кнопкой Show advanced. Заполняем поля:

  • Availability Topic - Топик отображающий доступность устройства. Для устройств на прошивке Tasmota обычно выглядит как tele/tasmota_XXXXXX/LWT, где XXXXXX последние шесть символов ID устройства.
  • Device Available Payload - Значение топика, когда устройство доступно. В данном случае значение будет равно Online.
  • Device Unavailable Payload - Значение топика, когда устройство не доступно. В данном случае значение будет равно Offline.

openhab 3 new generic thing advanced settings

Посмотреть топики и параметры можно на MQTT сервере, например с помощью MQTT Explorer.

openhab 3 show topic in mqtt explorer

Нажимаем кнопку Create Thing. При успешном добавлении в разделе Settings -> Things появится добавленное реле со статусом ONLINE.

openhab 3 things mqtt generic thing

Проваливаемся в добавленное устройство, вкладка 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.

openhab 3 things mqtt generic thing add channel

Добавляем новый канал устройства кнопкой Create.

Добавляем устройство в Semantic Model кнопкой Add Equipment to Model, там же создадим Items для управления созданным каналом.

В разделе Equipment заполняем поля:

  • Name - Уникальный идентификатор в системе.
  • Label - Понятное наименование для пользователей.
  • Category - Категория.
  • Semantic Class - Класс семантической модели устройств, в OpenHAB все устройства поделены по таким классам.

В разделе Channels выделяем созданный ранее канал и заполняем поля аналогично разделу Equipment. Добавляем устройство нажав кнопку Add to Model.

openhab 3 add items to model

Проверяем работу реле. Переходим Settings -> Things -> Устройство -> Channels -> Разворачиваем канал -> созданный Item.

openhab 3 mqtt check item

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

openhab 3 mqtt generic thing log

 

Альтернативное добавление устройства через конфигурационный файл будет выглядеть следующим образом.

Открываем файл .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.

openhab 3 new homeassistant mqtt conponent

Аналогично, как и при добавлении Generic MQTT заполняем поля Unique ID, Label и Location. В поле Parent Bridge выбираем добавленный ранее MQTT Broker.

openhab 3 new homeassistant mqtt thing set parent bridge

В поле MQTT Config Topic записываем доступные топики устройства, посмотреть их можно с помощью MQTT Explorer.

openhab 3 show homeassistant topics in mqtt explorer

В рассматриваемом примере это датчик температуры и влажности от компании Xiaomi. Добавляемые топики будут выглядеть так:

sensor/0x00158d0004072d67/temperature
sensor/0x00158d0004072d67/humidity
sensor/0x00158d0004072d67/battery
sensor/0x00158d0004072d67/linkquality
sensor/0x00158d0004072d67/voltage

Первое название топика, homeassistant, в данном разделе опускается и заносится в поле MQTT Base Prefix.

openhab 3 new homeassistant mqtt thing set topics

Нажимаем кнопку Create Thing. При успешном добавлении в разделе Settings -> Things появится добавленный датчик со статусом UNKNOWN.

Добавляем устройство в Semantic Model кнопкой Add Equipment to Model в разделе Channels в свойствах устройства, там же создадим Items для управления созданными каналами.

Как в примере выше в разделе Equipment заполняем поля Name, Label, Category, Semantic Class, В разделе Channels выделяем все каналы и заполняем поля свойств каждого. Добавляем устройство нажав кнопку Add to Model.

openhab 3 add items to model

После добавления Items значения свойств устройства будут в значении NULL, отображение данных, как и переход устройства из статуса UNKNOWN в статус ONLINE происходит с задержкой, время обновления данных зависит от того, как часто ZigBee устройство отправляет данные MQTT брокеру.

openhab 3 equipment weather services

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

Открываем файл .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. Профит.

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