Всем здрасте!
Для голосового управления устройствами SLS я пробовал навык YaHa, когда еще пользовался Home Assistant. Затем освоил навык Домовенок Кузя. Но он мне тоже по ряду причин не подошел. Так родилась идея создания собственного навыка, который я разработал еще в начале 2023 года. Им я пользуюсь по сей день. После публикации статьи о его разработке, один из пользователей отметил, что пользуется навыком WQTT.RU. Я попробовал этот навык в работе. Он мне понравился, что я даже порываюсь иногда перейти на него. Вот об этом и поговорим.
Расскажу как настроить интеграцию SLS с Яндекс Алисой посредством сервиса WQTT.RU. Покажу как добавить не только обычные устройства и датчики, но и виртуальные устройства с использованием Объектов SLS.
Платформа WQTT.RU - это облачная MQTT-платформа, состоящая из MQTT-брокера (Mosquitto) и панели управления. С помощью панели управления можно управлять брокером и подключенными устройствами. Mosquitto реализует транспортный протокол MQ Telemetry Transport (MQTT), который предоставляет облегченные методы обмена сообщениями с использованием модели издатель - подписчик.
WQTT. Запуск брокера
Регистрируемся на сервисе. Email адрес должен быть реальным.
Активируем аккаунт кодом из письма
После успешной регистрации, на сервисе создается Ваш экземпляр MQTT брокера и в меню MQTT - Брокер можно увидеть реквизиты подключения к нему.
Также, здесь есть кнопки управления брокером, позволяющие перезагрузить его и сбросить.
Здесь же, в меню MQTT, имеется удобный инструмент WebSocket клиент, позволяющий мониторить сообщения от MQTT клиента и отправлять сообщения в выбранные топики.
SLS. Настройка подключения к брокеру
В меню Settings - Link - MQTT Setup шлюза SLS настраиваем подключение к брокеру
При правильной настройке, в меню MQTT - WebSocket клиент сервиса WQTT.RU уже можно наблюдать MQTT сообщения от шлюза SLS
WQTT. Настройка устройств
С устройствами - датчикам, как правило, проблем не возникает. Надо только понять, как парсить JSON для извлечения данных сенсоров.
Например, получим топик состояния датчика открытия. Имеем такой JSON:
{"battery":92,"contact":true,"last_seen":1710826432,"linkquality":127,"trSeqNum":195,"voltage":2.98,"friendly_name":"mag_tambur","model_name":"lumi.sensor_magnet"}
Нам нужен топик состояния contact. Согласно документации сервиса, топик будет такой:
ZigbeeSLS/0x00158D00039272A5$.contact
Здесь:
ZigbeeSLS - корневой топик SLS на брокере (System prefix topic)
0x00158D00039272A5 - физический адрес устройства (ieeeAddr)
$. - указатель того, что значение нужно взять из ключа JSON
contact - название состояния, значение которого необходимо получить
Таким образом формируется топик состояния.
Датчик открытия
Добавим датчик открытия в сервис. Идем в меню Умный дом - Настройки и нажимаем кнопку Добавить устройство. Из огромного списка поддерживаемых устройств, выбираем Датчик
Заполняем название устройства и комнату, в которой оно находится. При интеграции с Яндекс названия устройств и комнат "поедут в Алису".
Сохраняем, продолжаем.
Добавляем датчик, по соответствующей кнопке. Поскольку датчик открытия - бинарный, выбираем тип данных датчика Event
Тип датчика Открытие и топик, который мы получили ранее
Получаем такой датчик
И, он же в меню Умный дом - Dashboard он выглядит так
И, так он пробрасывается в Алису
Лампа
Теперь рассмотрим добавление устройства посложнее - лампа с регулировкой яркости, цвета и цветовой температуры. В SLS её состояния такие:
Нас интересуют:
- state - включение, выключение
- brightness - управление яркостью
- color - управление цветом
- color_temp - управление цветовой температурой
Топики состояния мы уже умеем формировать:
ZigbeeSLS/0xA4C138FD68EAA226$.state
ZigbeeSLS/0xA4C138FD68EAA226$.brightness
ZigbeeSLS/0xA4C138FD68EAA226$.color
ZigbeeSLS/0xA4C138FD68EAA226$.color_temp
Разберемся с топиками управления. Честно говоря, я уже не помню где я нарыл эту информацию. Самое простое - это посмотреть как устройство управляет, например, Home Assistant. Но, у меня его нет. Полагаю, все устройства управляются одинаково и топик управления выглядит так
ZigbeeSLS/0xA4C138FD68EAA226/set/brightness
здесь:
ZigbeeSLS/0xA4C138FD68EAA226 - топик устройства
set - команда на запись значения
brightness - состояние, в которое необходимо записать значение
Также, отправляемое значение можно слегка отформатировать. Например нам, для управления цветом, нужно отдать значение в JSON {"hex": "#ff0a99"}, а WQTT его отправляет как #ff0a99. Для форматирования в JSON используется такая конструкция:
ZigbeeSLS/0xA4C138FD68EAA226/set/color&&{"hex": "%VALUE%"}
Т.е. к топику дописываем конструкцию &&{"hex": "%VALUE%"}, где:
&& - указатель на строку форматирования или если угодно разделитель
%VALUE% - переменная, в которую будет подставлено передаваемое значение.
Итак, добавляем нашу лампочку - всё тоже, что и с датчиком. Далее добавляем органы управления
Питание
Топики:
ZigbeeSLS/0xA4C138FD68EAA226/set/state - управление
ZigbeeSLS/0xA4C138FD68EAA226$.state - состояние
Значения включить/выключить - ON/OFF
Яркость
Топики:
ZigbeeSLS/0xA4C138FD68EAA226$.brightness
ZigbeeSLS/0xA4C138FD68EAA226/set/brightness
Значения. Поскольку в SLS значения яркости в диапазоне 0-255 единиц, а в Алисе 0-100%, добавим множитель 2,55.
Цвет
Управлять будем методом НЕХ, поскольку остальные форматы не подходят для SLS.
Топики:
ZigbeeSLS/0xA4C138FD68EAA226$.color
ZigbeeSLS/0xA4C138FD68EAA226/set/color&&{"hex": "%VALUE%"}
Температура
Температура пока отдается в Кельвинах. Для совместимости с SLS её необходимо передавать в меридах, т.е. (1000000 / Kelvin). Также, WQTT не поддерживает одновременную работу с цветом и температурой. Об этом сообщил разработчику. Так что пока управлять можно только цветом.
Топики:
ZigbeeSLS/0xA4C138FD68EAA226$.color_temp
ZigbeeSLS/0xA4C138FD68EAA226/set/color_temp
Получаем такое устройство
И, так лампочка выглядит в Алисе
А так ее пробрасывает мой навык
Обратите внимание, что можно управлять и цветом и температурой.
Для управления цветом и температурой придется костылизировать интеграцию. Об этом в другой раз. А пока посмотрим, как добавить виртуальный датчик.
Виртуальный датчик
Предположим, у нас есть устройство, которое формирует объект с погодными данными. Это, кстати может быть и не устройство, а скрипт, который получает погодные данные с сервиса openweather:
Создадим устройство
и добавим в него датчики
Получим такое устройство
И, так оно пробрасывается в Алису:
WQTT. Интеграция с Алисой
Для проброса устройств WQTT в Алису, нужно в приложении Умный дом Яндекс добавить навык WQTT. При его добавлении Вы увидите такую инструкцию, следуя которой устройства WQTT появятся в приложении
TODO: Здесь будет видео с обзором сервиса WQTT и настройкой интеграции
----------
Листинги скриптов
Поддержать канал
Поболтать