Интеграция контроллера Wiren Board в Дом с Алисой
Описание

Дом с Алисой — это облачная платформа и мобильное приложение для управления устройствами умного дома.
Все добавленные устройства будут видны в мобильном приложении, что позволит вам управлять ими удалённо со смартфона, умных колонок с Алисой, Яндекс.Модуля и т. п.
Интеграция доступна только при использовании русского языка в веб-интерфейсе контроллера.
Если пакет не установился на контроллере после обновления, попробуйте обновиться следующим образом:apt update && apt full-upgrade
Архитектура
Интеграция состоит из следующих частей:
- навык и авторизация на серверах Яндекса;
- шлюз между «Умным домом» Яндекса и контроллером Wiren Board;
- клиентская часть на контроллере — предустановленный пакет wb-mqtt-alice.
- Схема интеграции
wb-mqtt-alice
Это предустановленный на контроллере пакет, который состоит из двух сервисов:
- wb-mqtt-alice-config — конфигуратор устройств;
- wb-mqtt-alice-client — клиент, обеспечивающий работу интеграции.
Безопасное соединение
Привязка контроллера и обмен данными между контроллером и нашим сервером-шлюзом происходит по ключу, хранящемуся в чипе ATECCx08.
Включение интеграции
По умолчанию интеграция выключена. Для включения переведите переключатель Активировать в положение включено (см. далее).
Привязка контроллера
К одной учетной записи Яндекса можно привязать несколько контроллеров. Перед привязкой контроллера убедитесь, что в вашем Яндекс ID активен навык Wiren Board.
Контроллер привязывается так:
- В веб-интерфейсе контроллера выберите Интеграции → Яндекс Алиса.
- Нажмите Активировать.
- Нажмите Привязать контроллер через Яндекс ID.
- Если вы не были авторизованы при помощи Яндекс ID, вам будет предложено перейти к авторизации. Выберите нужный аккаунт и авторизуйтесь.
- После привязки контроллера появится сообщение Контроллер успешно зарегистрирован.
- Нажмите Вернуться на панель. Появится надпись Привязанные контроллеры, серийный номер только что добавленного контроллера и его статус (онлайн или офлайн).
- Подождите 30…60 секунд (время, необходимое для подключения контроллера к сервисам) и обновите страницу браузера. Если контроллер не становится онлайн, подождите еще и снова обновите. Если не помогает, закройте текущую вкладку, вернитесь в интерфейс контроллера, обновите страницу и активируйте интеграцию ещё раз.
- После того как контроллер перешёл в статус онлайн, можно переходить к настройке устройств. На этом этапе никаких новых устройств в Яндексе ещё нет, их надо сначала добавить в конфигуратор контроллера.
Контроллер не перейдёт в статус онлайн, если у выбранного Яндекс ID отсутствует навык Wiren Board. После успешной привязки контроллера может потребоваться до 2 минут, чтобы контроллер появился в статусе онлайн.
- Привязка контроллера Wiren Board к учетной записи Яндекса
-
Переход на сервер привязки из веб-интерфейса контроллера
-
Запрос на авторизацию в Яндекс ID
-
Выбор аккаунта Яндекс ID для привязки контроллера
-
Сообщение об успешной привязке контроллера
-
Контроллер привязан, его статус обновится в течение 30 секунд
-
Контроллер привязан, статус онлайн
Отвязка контроллера
Для отвязки контроллера перейдите на страницу проверки статуса или личного кабинета сервера alice.wirenboard.com и нажмите на красный крестик рядом с серийным номером отвязываемого контроллера.
- Отвязывание контроллера Wiren Board от интеграции
-
Переход на страницу статуса контроллера из веб-интерфейса
-
Страница отвязки контроллера
Или введите в терминале самого контроллера команду:
wb-mqtt-alice unlink-controller
При корректном выполнении команды в терминале можно наблюдать такие сообщения:
Current link status: linked
Unlink action result: successful
Отключение интеграции
Для отключения интеграции переведите переключатель Активировать в положение выключено.
Настройка устройств

В разделе Интеграции → Яндекс Алиса можно перейти к конфигуратору устройств и настраивать устройства. Можно группировать устройства по комнатам.
Доступные умения:
on_offcolor_setting(цвет (RGB) или температура цвета)range
Доступно с релиза wb-2609
ToggleMode
Доступные свойства:
floatevent
Доступно с релиза wb-2609
Кнопка тонких настроек
У каждого умения и свойства есть кнопка с тремя точками. Внутри — три параметра:
- Раздельные кнопки Вкл/Выкл (split) — для умения on_off вместо одного переключателя в Алисе можно показать две отдельные кнопки. Это удобно, если нужно подряд отправить две команды включения — например, для ИК-команд при удалённом управлении.
- Разрешить Алисе запрашивать состояние (retrievable) — можно отключить для устройств без обратной связи, например ИК-пультов или write-only реле.
- Отправлять Алисе обновления состояния (reportable) — можно отключить, чтобы не отправлять Яндексу изменения состояния датчиков/выключателей, но принимать команды от Алисы.
Особенности настройки устройств
- Если добавленное устройство уже прокинуто в приложении Дом с Алисой, то его переименование в нашем конфигураторе не приведет к изменениям в приложении. Это особенность реализации со стороны Яндекса.
- В качестве MQTT-топика нельзя использовать топик с типом pushbutton, так как такие топики публикуются без флага retained.
Добавление интеграции в Яндексе
- В приложении Дом с Алисой в правом верхнем углу нажмите + и выберите Устройство умного дома.
- В поле поиска найдите навык Wiren Board и выберите его.
- Обновите список устройств.
Удаление интеграции
Если не нужна интеграция с Алисой, то можно ее удалить.
- Отвяжите контроллер. На странице привязанных контроллеров нажмите на красный крестик в плашке нужного контроллера.
- Удалите пакет:
apt purge wb-mqtt-alice
- Запретите автоустановку при обновлении:
apt-mark hold wb-mqtt-alice
Если интеграцию необходимо вернуть, снимите блокировку и установите пакет:
apt-mark unhold wb-mqtt-alice
apt install wb-mqtt-alice
Сервис клиента
Посмотрите и проанализируйте возможные сообщения об ошибках в логах сервиса клиента — wb-mqtt-alice-client.
Сервис конфигуратора
Посмотрите и проанализируйте возможные сообщения об ошибках в логах сервиса конфигуратора — wb-mqtt-alice-config.
Примечание
Пароль на nginx
Для работы интеграции не используйте пароль на nginx. Для авторизованного доступа к веб-интерфейсу контроллера используйте стандартный метод из документации.
Особенности работы с УДЯ
Умение color_settings
При добавлении умения color_setting, выборе модели управления цветовой температурой и диапазона температур 2700…6500 К наблюдается странное поведение в приложении — невозможно выбрать «Холодный белый». Для выбора данной цветовой температуры необходимо нажимать правее самого виджета, то есть по сути на виджет «Плюса».
- Приложение УДЯ
-
Выбор «Холодного белого»
События
События (Event) в Умном доме Яндекса — это сигналы от датчиков или устройств (обнаружение движения, открытие двери, нажатие кнопки), указывающие, что их состояние поменялось. Они выступают триггерами в сценариях, запуская автоматические действия без участия пользователя.
Приложение УДЯ фиксирует историю срабатываний датчика, но не отображает его статус в реальном времени. Алиса может сообщить, какое событие с датчиком было последним.
Для полноценной работы большинству событий требуется несколько MQTT-топиков, в этом случае каждому топику соответствует определенное значение события. Например, для обработки события button нужно 3 топика, которые соответствуют значениям click — одиночное нажатие, double_click — двойное нажатие, long_press — долгое нажатие. Но есть события, которым это не обязательно, они могут менять свое значение на основе данных одного топика, это: open, motion и water_leak.
| Событие | Описание |
|---|---|
| vibration | Физическое воздействие (tilt — переворачивание, fall — падение, vibration — вибрация) |
| open | Открытие/закрытие дверей, окон и др. (opened — открыто, closed — закрыто) |
| button | Нажатие кнопки (click — одиночное нажатие, double_click — двойное нажатие, long_press — долгое нажатие) |
| motion | Движение в области действия датчика (detected — обнаружено, not_detected — не обнаружено) |
| smoke | Дым в помещении (detected — обнаружено, not_detected — не обнаружено, high — высокий уровень) |
| gas | Газ в помещении (detected — обнаружено, not_detected — не обнаружено, high — высокий уровень) |
| battery_level | Заряд батареи (low — низкий, normal — нормальный) |
| food_level | Уровень корма (empty — пустой, low — низкий, normal — нормальный) |
| water_level | Уровень воды (empty — пустой, low — низкий, normal — нормальный) |
| water_leak | Протечка воды (dry — нет протечки, leak — протечка) |
Особенности реализации события open
Событие open имеет два значения: Открыто и Закрыто, использовать его можно двумя способами:
- один датчик, который передает в MQTT-топик состояние контактов замкнуто/разомкнуто. Значения true, on, любое число > 0 — активируют выбранное значение события (например, Открыто), значения false, off, 0 — активируют противоположное значение события (например, Закрыто):


- два датчика, которые передают состояние контактов в два топика. Можно использовать, например, для автоматизации откатных ворот, где датчики фиксируют крайние положения. Оба датчика при срабатывании записывают в свой топик значения true, on или любое число больше 0. Событие Открыто или Закрыто активируется при срабатывании соответствующего датчика. При этом изменение значения топика с true на false у обоих датчиков игнорируется.

Поиск и устранение неисправностей
Просмотр состояния сервиса с помощью Kuma Uptime
Проверить статус работы сервиса можно на странице состояния компонентов интеграции.
Там отображается статус каждого компонента:
- API Yandex Dialogs — API Яндекса, через который работает навык
- API Wirenboard — внутреннее API для интеграции с Яндексом
- Availability alice.wirenboard.com — проверка статуса привязки контроллеров
- Transport layer (socketio) — проверка транспортного уровня интеграции
- Notifications (controller to yandex) — проверка отправки уведомлений от контроллера к Яндексу
- Actions (yandex to controller) — проверка управления устройством со стороны Яндекса
- Outbound Internet Connection — проверка доступности интернета на тестовом стенде
- Alice Client Reconnection to WB server — проверка переподключения контроллера к сервису
Если интеграция работает нормально, все пункты будут отмечены зелёным. Если все пункты зелёные, а интеграция всё равно не работает — проблему нужно искать в настройках контроллера.
Просмотр системного журнала
Часто о сути какой-либо проблемы можно узнать из логов соответствующих сервисов. В веб-интерфейсе логи доступны с помощью инструмента «Системный журнал».
Нет подключения к серверу интеграции
Контроллер может соединиться с сервером, если выполнены три условия:
- включена интеграция (переключатель Активировать включён);
- контроллер привязан к нашему серверу Wiren Board;
- пользователь уже имеет связанный навык Wiren Board в приложении УДЯ.
Проверка сервиса конфигуратора
$ systemctl status wb-mqtt-alice-config
Ожидаемый ответ:
Active: active (running) since...
Если сервис не активен, запустите его командой:
$ systemctl start wb-mqtt-alice-config
Проверка сервиса клиента
$ systemctl status wb-mqtt-alice-client
Ожидаемый ответ:
Active: active (running) since...
Если сервис не активен, запустите его командой:
$ systemctl start wb-mqtt-alice-client
Проверка файла /etc/wb-mqtt-alice-client.conf
Убедитесь, что в поле client_enabled установлено значение True.
Проверка подключения к интернету
ping 8.8.8.8 -c 4
Ожидаются успешные ответы. Если нет — проверьте подключение к интернету.
Проверка доступности сервера
curl -v http://localhost:8042/socket.io/?EIO=4
Ожидаемый ответ:
* Connected to localhost (127.0.0.1) port 8042 (#0)
...
* Connection #0 to host localhost left intact
0{"sid":"x0WN3fm5TAGTls0_AAcF","upgrades":["websocket"],"pingTimeout":30000,"pingInterval":60000}
Если ответа нет, перезагрузите контроллер.
Со стороны приложения Алисы: устройства «Не в сети»
Симптом — в приложении Алисы устройства помечаются значком «Не в сети», показывается красный перечеркнутый значок Wi-Fi. В этом случае интеграция работает корректно, но не может прочесть топики устройств из-за некорректных имен или пароля на MQTT-брокере.

Проверьте что топики действительно существуют
Если в интеграции с Алисой указать несуществующие топики, на устройстве появится значок «Не в сети», причины:
- указан неверный топик в конфигурации (например, была допущена ошибка при записи топика вручную);
- в процессе настройки изменилось название топика. Некоторые устройства могут менять названия топиков в зависимости от настроек. Например, WB-LED использует по умолчанию раздельные 1 и 2 каналы, а после изменения настроек каналы могут быть объединены в 1_2 — в этом случае интеграция не увидит ранее настроенных топиков и верно считает, что устройства недоступны.

Проверьте что MQTT не защищен паролем
Интеграция на данный момент работает с MQTT-брокером, только если он не защищён паролем.
Как установить и снять пароль, читайте в разделе «Установка пароля на MQTT-брокер».
Подробный анализ
Для просмотра логов клиента измените уровень логирования в файле /etc/wb-mqtt-alice-client.conf, замените "log_level": "INFO" на "log_level": "DEBUG". Перезапустите сервис клиента командой:
$ systemctl restart wb-mqtt-alice-client
Сообщения можно посмотреть в консоли или системном журнале в веб-интерфейсе контроллера:
- связь вашего контроллера с сервером интеграции есть — это видно по строкам:
Apr 02 16:36:48 wirenboard-AAA34AA2 python3[11738]: INFO: Alice state sender started after connect Apr 02 16:36:50 wirenboard-AAA34AA2 python3[11738]: INFO: Socket.IO connected successfully
- Алиса посылает запрос на актуальное состояние вашего устройства (топика
/devices/WB-MR6C/controls/K4) — например, когда вы загружаете страницу списка устройств или отдельного устройства в приложении умного дома Алисы. Клиент успешно получает этот запрос со стороны Алисы. Это видно по логу:Apr 03 03:11:08 wirenboard-ALZJO7HG python3[3158135]: INFO: Received packet MESSAGE data 29["alice_devices_query",{"devices":[{"id":"95...-2604...-91c3...-b8..-4f..-83..-e25ce..."}],"request_id":"e4...-97..-40..-98..-ae...> Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: Received event "alice_devices_query" [/] Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: INFO: Received event "alice_devices_query" [/] Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: DEBUG: alice_devices_query event: Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: DEBUG: { Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: "devices": [ Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: { Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: "id": "95...-2604...-91c3...-b8..-4f..-83..-e25ce..." Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: } Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: ], Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: "request_id": "e4...-97..-40..-98..-ae..." Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: }
- в процессе локальной обработки запроса Алисы на контроллере клиент сталкивается с проблемой и не может прочесть содержимое топика:
Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: DEBUG: Try getting state for device: '95...-2604...-91c3...-b8..-4f..-83..-e25ce...' Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: DEBUG: Reading current state for device: '95...-2604...-91c3...-b8..-4f..-83..-e25ce...' Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: DEBUG: Reading capability state: {'type': 'devices.capabilities.on_off', 'mqtt': 'WB-MR6C/K4', 'parameters': {'instance': 'on'}} Apr 03 03:11:08 wirenboard-AAA34AA2 python3[3158135]: DEBUG: Read topic wait 'retained' message on '/devices/WB-MR6C/controls/K4' (retain=True, 1.0s) Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: WARNING: Read topic timeout waiting '/devices/WB-MR6C/controls/K4' Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: DEBUG: Capability result: None
- далее (так как не смог прочесть содержание топика на прошлом шаге) клиент сознательно отвечает Алисе, что устройство недоступно, так как не может получить актуальный статус из топика. Это делается с помощью статуса
DEVICE_UNREACHABLE:Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: WARNING: '95...-2604...-91c3...-b8..-4f..-83..-e25ce...': no live or retained data — marking DEVICE_UNREACHABLE Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: DEBUG: Sending devices query response to Yandex: Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: DEBUG: { Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: "request_id": "e4...-97..-40..-98..-ae...", Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: "payload": { Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: "devices": [ Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: { Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: "id": "95...-2604...-91c3...-b8..-4f..-83..-e25ce...", Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: "error_code": "DEVICE_UNREACHABLE", Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: "error_message": "MQTT topics unavailable" Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: } Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: ] Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: } Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: } Apr 03 03:11:09 wirenboard-AAA34AA2 python3[3158135]: Sending packet MESSAGE data 39[{"request_id":"e4...-97..-40..-98..-ae...","payload":{"devices":[{"id":"95...-2604...-91c3...-b8..-4f..-83..-e25ce...","e> Apr 03 03:11:09 wirenboard-ALZJO7HG python3[3158135]: INFO: Sending packet MESSAGE data 39[{"request_id":"e4...-97..-40..-98..-ae...","payload":{"devices":[{"id":"95...-2604...-91c3...-b8..-4f..-83..-e25ce...>
- в ответ на это в приложении Алисы устройства помечаются значком «Не в сети».
Известные неисправности
Ошибки/особенности, обнаруженные при использовании интеграции.
Альтернативные варианты
Кроме нашей интеграции вы можете использовать сторонние решения:
- Home Assistant,
- Node-RED,
- SprutHub,
- yandex2mqtt — локальное решение без промежуточных серверов.