Привет. В настоящее время я смог реализовать одну из возможностей умного дома, а именно полноценное голосовое управление светом через яндекс-сервис Алисы, в частности через Умную колонку Яндекс-станцию и Алису на телефоне. Но все также будет работать на любом устройстве, на котором она установлена. Световая инсталляция основана на 4-х RGBWW контроллерах MiLight FUT039 и WiFi контроллере MiLight ibox2 (который тянет 4 зоны управления), пульты MiLight (3 шт) настроены параллельно и работают как резервное управление при отсутствии интернета, но к голосовому управлению почти не имеют отношения, поэтому их учитывать не будем.

В чем отличие этой реализации? Схема управления проста в исполнении, не требует никаких навыков программирования и по затратам обойдется в примерно в стоимость умной колонки и микрокомпьютера Распберри 3, софт под микрокомпьютер совсем бесплатный. И не нужно подключать устройства, которыми управляешь, к серверам производителей. Интернет нужен для Алисы и сервисов Яндекса, да и распбери нужно выплюнуть наружу по порту 443.

Коротко обрисую, как к этому пришел. Изначально свет управлялся контроллерами MiLight FUT039 через пульты, развешенные в наиболее удобных точках квартиры, затем я приобрел контроллер iBox2, после чего смог управлять светом еще и с телефона. Вскорости по совету коллеги приобрел очень умную Яндекс-станцию мини, очень понравилась возможность ставить голосом будильник, задавать напоминания и прочая мелочь. После оказалось, что колонка может управлять смарт-устройствами, пусть даже через аккаунты на сайтах производителей.

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

Сразу приведу статьи с ссылками, на основе которых это было реализовано и немного опишу, что оттуда взял. Самое интересное, что каждая статья давала свое направление в управлении устройствами, но эффект получился на совмещении этих возможностей.

Итак

1. «Алиса, включи свет»


Первая статья, но не основная. Главное, что отсюда взял – это информация о существовании Openhab2, установка и подключение к нему контроллера iBox2. После установки опенхаба я смог управлять светом еще и с компьютера. Самое основное идет 3 первых главы, потом по моему мнению пошла ерунда. Извиняюсь пред автором, но это так. Подключать еще левые внешние (интернет) ресурсы для настройки связи плюс какие-то «волшебные заклинания»– это перебор.

2. «Яндекс: умный дом по-взрослому»


Эта статья – основная и связующая. Именно здесь я понял, куда двигаться и как всё реализовать. Автор приводит общую схему взаимодействия устройств и сервисов, плюс внятно разбирает систему команд и устройств в ЯндексеУД. И самое главное – это написанный автором Munrexio плагин yandex2mqtt (https://sprut.ai/client/plugins/instruction/1821), без которого ничего бы не заработало. Коротко, что отсюда взял: плагин yandex2mqtt, идея использования MQTT-сервера для передачи состояний и команд, систему работы с ЯндексУмныйДом и Яндекс.Диалоги путем использования сертификатов для авторизации и регистрации умения. Понадобилось все до главы Node-Red. Дальше уже специфика, связанная с использованием автором контроллера Wiren Board, т.е. прочитать стоит в основном для общего понимания. В моем случае главным модулем является Опенхаб, на котором держится управление устройствами, а плагин yandex2mqtt и сервер MQTT – связующие элементы с сервисами Яндекса

Дополнительная информация:

3. Raspberry Pi: Настройка/Тестирование брокера и клиента Mosquitto на Raspberry Pi


Что такое MQTT и для чего он нужен в IIoT? Описание протокола MQTT http://wikihandbk.com/wiki/Raspberry_Pi:%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0/%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D1%80%D0%BE%D0%BA%D0%B5%D1%80%D0%B0_%D0%B8_%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0_Mosquitto_%D0%BD%D0%B0_Raspberry_Pi#.D0.A2.D0.B5.D1.81.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B1.D1.80.D0.BE.D0.BA.D0.B5.D1.80.D0.B0_.D0.B8_.D0.BA.D0.BB.D0.B8.D0.B5.D0.BD.D1.82.D0.B0_Mosquitto_.D0.BD.D0.B0_Raspberry_Pi.5B1.5D — прикладная часть, установка и работа в командной строке для проверки работоспособности
https://ipc2u.ru/articles/prostye-resheniya/chto-takoe-mqtt/ — общее понимание протокола

4. https://dialogs.yandex.ru/developer/, https://dialogs.yandex.ru/developer/skills/ платформа диалогов для создания и тестирования навыков


Установка и настройка подробно описываются в оригинальных статьях, поэтому просто приведу порядок действий. В ближайшее время выложу образ Распбиана с работающей системой, естественно изменю свои пароли и удалю рабочие сертификаты, инструкция по их созданию есть в статьях, и позже, как будет время, заново подниму систему на новом образе и напишу уже инструкцию по пунктам с командами установки и настройки. Сразу скажу, в образе много лишнего, я на нем пытался управлять Милайтом через радиомодуль RF24 и скрипты на питоне, которые нашел на гитхабе. Но ни один способ не заработал, поэтому я на них забил, но систему не чистил.

Поехали. Устанавливаем распбиан лайт, естественно обновляемся, ставим и настраиваем mosquito (в статьях есть описание настройки с доступом по логину и паролю), пробрасываем порты на роутере, дальше по статье «умный дом по взрослому» регистрируем домен для получения сертификатов и получаем сертификаты. Ставим плагин yandex2mqtt, настраиваем, приписываем в нем сертификаты, логины и пароли, редактируем устройства и топики mqtt. Регистрируемся в Яндекс.oAuth, получаем там токены для своего домена, и регистрируемся в ЯндексУД, где прописываем доступы и все остальное. После успешного одобрения черновика модератором можно будет увидеть устройства из плагина yandex2mqtt на телефоне в приложении Яндекс или на компьютере на сервисе https://dialogs.yandex.ru/developer/skills/ в черновике во вкладке Тестирование.

Теперь ставим и настраиваем опенхаб из статьи «Алиса, включи свет», можно также найти статью про настройку опенхаба на других ресурсах. После добавления, настройки и проверки устройств MiLIght настраиваются в опенхабе устройства mqtt (https://robot-on.ru/articles/prostaya-rabota-s-mqtt-v-openhab-2), каналы и адреса топиков. Как я понял, устройства в плагине yandex2mqtt получают команды с сервисов яндекса и преобразуют их или в значения true/false (соответственно 0/1) или значения текущего уровня в процентах с настраиваемым шагом. Вот эти данные плагин и отправляет в топики, то есть является издателем, а опенхаб как подписавшийся на топики берет значения из соответствующих топиков и отправляет на элементы переключения в прописанных в нем устройствах, в результате чего и происходит управление устройствами.

Как и любом деле, которое делается первый раз, есть несколько нюансов.

  1. На свой рабочий микрокомпьютер я смог установить опенхаб, пусть даже пришлось его попинать. Но на новый чистый образ распбиана повторно установить его пока не смог и решение, прокатившее в прошлый раз, не помогло. Ошибка (HTTP ERROR 404 Problem accessing /start/index. Reason: Not Found). Имейте это ввиду. Но как вариант опенхаб можно установить и на компьютер для тестирования.
  2. Сертификат для домена сайтом letsencrypt.org выдается на три месяца. Получить другой более длительный сертификат я пока не удосужился
  3. Черновик умения на https://dialogs.yandex.ru/developer/ успешно прошел модерацию, но опубликовать его пока не получилось. Ошибка (Ошибки валидации: — Endpoint URL: Ошибка реализации протокола умного дома: user_unlink: Not Found). Пока не разобрался, в чем проблема. Это не мешает работать системе, но не помню, есть ли ограничения на срок работы неопубликованного умения.
  4. Нашел ошибку: оказалось, что в исходниках yandex2mqtt в файле app.js в строке «app.post('/provider//v1.0/user/unlink', routes.user.unlink);» лишняя косая. У себя на микрокомпьютере поправил — публикация прошла успешно.
  5. Также поправил для устройства «телевизор» в config.js раздел переключения каналов, оригинальный не сработал

Ну и наконец о перспективах этой связки опенхаба, плагина и москито. Опенхаб является ядром системы и может управлять большой кучей устройств (а это не одна сотня железок), а не только светом. Сейчас запиливаю телевизор Гнусмас для голосового управления. Так как такое управление уже работает, то на ту же Алису можно запилить наверное все, что там есть, так можете сами представить. Кстати, есть еще парочка сегодняшних наблюдений. Я обнаружил, что светом дома можно управлять с любого места, где есть интернет для Алисы, например, с телефона с другого конца города и даже проверил через домашнюю камеру. А так как список команд для управления устройством уже прописан в навыке, плюс голосовые команды распознаются и преобразуются в текст, то можно не бурчать в телефон «Алиса, выключи свет в спальне», а просто написать «Выключи свет в спальне» и это сработает

Ну и само видео: