Умный дом на колес… Алисах

Привет. В настоящее время я смог реализовать одну из возможностей умного дома, а именно полноценное голосовое управление светом через яндекс-сервис Алисы, в частности через Умную колонку Яндекс-станцию и Алису на телефоне. Но все также будет работать на любом устройстве, на котором она установлена. Световая инсталляция основана на 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 раздел переключения каналов, оригинальный не сработал

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

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

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 19

    +3
    Мне кажется, или в ролике голос автора имеет нотки разочарования из-за времени отклика алисы?)
      0
      Кажется)) Устал тогда, всю ночь пилил, только к утру сделал. Неожиданно
      0
      NodeRed на малинке, имхо, работает значительно адекватнее опенхаба.
        0
        Там нужны скрипты?
          0
          Нет. В отличии от openhab (пользовался только первым, второй уж больно монструозный на мой взгляд) логика выстраивается «визуально» из кубиков. Типа кубик «Слушаем топик MQTT» соединяем с кубиком «отобразить переключатель в веб-морде», его соединяем с «Послать в топик MQTT». NodeRed на малинке работает отлично, я его даже на OpangePi Zero (512M) использовал.
            0
            я вот немного недопонял: То, что он может общаться с mqtt это понятно. Как node-red взаимодействует с самими устройствами? Как физически это происходит?
              0

              А это смотря с какими. Я использую Zigbee Usb стик для связи с zigbee устройствами и датчиками (xiaomi, ikea, gledopto). Кое с какими по сетке, по http. Еще по com-порту и rs-485. Но mqtt предпочитаю по возможности

                0

                Вот, например, нода для управления MiLight. У меня таких устройств нет, так что сам не проверял. https://flows.nodered.org/node/node-red-contrib-milight-2

          0

          А можно для не очень умных — в чем профит такого сетапа? У самого 17 устройств xiaomi (лампы, увлажнители, датчики) со шлюзом aqara, так они и так с Алисой неплохо дружат. Суть я так понимаю в том чтобы сократить время отклика, не передавая команды через китайские сервера?

            0
            Самое главное — не удалось найти у китайцев возможности управления MiLight FUT039 и MiLight ibox2 даже через их сервера. Их аппаратный шлюз тоже не помог. К тому же с Алисой дружат не сами лампы и датчики, а китайские сервера, которые ими и управляют. Второе — уходим от привязки к куче посторонних серверов — остается только один Яндекс. А если удастся сменить голосовик Алисы на локальный с возможностью получения команд — по максимуму отвяжемся от инета. А про время отклика не задумывался, так как везде говорилось, что задержка в любом случае будет.
              0

              В любом случае, для реализации нужно иметь шлюз в режиме разработчика. А aqara пока не умеет в него переходить(

            +2

            Про то, что называть такой дом "умным" уже нет смысла писать. Собственно, мало у кого есть действительно умный дом. Для простого управления лично у меня работает и очень радует связка Home Assistant (HASS) с Яндекс.Станцией Мини (Алисой). Я перебрал много систем, и OpenHab и Majordomo, и Domoticz, все в разной степени вызывали вопросы. Особенно два последних мое чувство прекрасного ну никак не вынесло. HASS хорош во всем, кроме того, что в его концепцию надо немного въехать и уметь в Linux, но зато он красив и функционален из коробки. И на слабеньком сервере работает быстро (на RPI не пробовал) и это сразу впечатлило: для всех китайских лампочек у меня заблокирован доступ во внешнюю сеть на уровне роутера, поэтому управляются они напрямую и практически мгновенно, без контроля большого брата. Когда появилась Яндекс.Станция внутренний параноик, конечно, негодовал: для управления умным домом Алисе нужен HASS на внешнем IP с SSL со всеми кишками наружу. Решил это пробросив HASS через SSH на внешний с Letsencrypt, и заблокировал по GeoIP все страны, кроме России. Не панацея, но хоть что-то. Ну и в итоге от того момента, когда Алиса услужливо отвечает "Выполняю" и до непосредственно действия проходит около секунды. Иногда подтупливает на 2-3 секунды, но не критично. Гораздо больше расстраивает отсутствие возможности узнать у Алисы статус и состояние датчиков, но кажется все ждут, когда она научится это делать.

              0
              по моему мнению настоящих умных домов в настоящее время и не существует, даже у крупных производителей, все они пока ограниченный набор триггеров и исполняемых устройств, с обратной связью или без. Настоящий умный дом будет управляться только настоящим ИИ, коих тоже пока нет и в ближайшее время не предвидится. НО! Все это пилится, усложняется и со временем количество перейдет в качество. Так что предлагаю считать умным домом систему, где все понемногу автоматизируется и количество действий «встал и пошел ручками включить чайник» стремится к минимуму
                0
                Ждете KUKI
                0
                Ну вот зачем вы это написали, я только переехал с Majordomo на OpenHab, а теперь опять вернусь к мукам выбора.
                +1
                У меня работает интеграция с Home Assistant. Субъективно — лаг в выполнении команд ниже.
                Особых проблем с инсталяцией на Rapberry Pi тоже не возникло.
                  0
                  Как бы еще отсюда яндекс нафиг открутить и распознавать команды локально. Есть что-нибудь готовое к использованию на эту тему?
                    0
                    Milight box можно подключить к Tuya. Пока только одна зона общая работает.
                    И таки есть локальный голосовой помощник Rhasspy.
                      0

                      Несколько странная инструкция, где автор говорит, что сам не со по ней повторить… При том, что есть готовая сборка opOpenHabian и куча инструкций… А ещё с версии 2.4 в OpenHab'е есть встроенный Matt сервер.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое