Ноябрь 2017 года, на календаре отображалось число одиннадцать. Распродажа на Aliexpress шла полным ходом, руки чесались что-нибудь купить. Выбор пал на "Ми-свет RGBW светодиодный лампы AC86-265V удаленного управление Smart освещения". В итоге были приобретены два экземпляра максимальной мощности, на 9 ватт, и хаб-контроллер MiLight WiFi iBox. Доставка из Китая не заставила себя долго ждать, а спустя 4 месяца, 13 марта 2018, открылась платформа Яндекс.Диалоги (платформа, позволяющая сторонним разработчикам добавлять умения голосовому помощнику «Алиса»). Следом Алиса научится управлять освещением (и не только) у вас в квартире, а мы с вами ей в этом поможем, поэтапно и без единой строчки кода.

  1. Настройка умных ламп от Xiaomi
  2. Установка openHAB
  3. Управление светом через openHAB
  4. Внешний доступ к openHAB
  5. IFTTT
  6. Алиса


1. Настройка умных ламп от Xiaomi.


Первое, что необходимо сделать, это настроить управление лампами, хотя бы с помощью приложения от Xiaomi. Если для вас этот этап пройден, смело переходите далее, к настройке сервера умного дома, или еще дальше, непосредственно к интеграции Алисы и openHAB. Но, обо всем по порядку. Сами лампы к вашему домашнему роутеру не подключатся, для этого нужен хаб iBox, который может контролировать до четырех групп источников света. Необходимо подключить его к сети, а затем связать с ним лампы.

  1. Подаем питание на iBox, подключив его по usb, к примеру, к зарядному устройству для телефона.
  2. При первом подключении необходимо сбросить настройки хаба, поэтому нажимаем RST.
  3. Далее устанавливаем на телефон приложение от Xiaomi под iOS или Android. Убеждаемся что телефон подключен к домашней сети Wi-Fi.
  4. Открываем приложение Mi-Light 3.0, нажимаем +. Тут нас интересует вкладка Smart Link.
  5. Вводим названием и пароль домашней Wi-Fi сети, к которой подключен телефон и планируется подключить iBox.
  6. Сейчас у вас iBox должен быть подключен к сети, а индикаторы SYS и LINK должны моргать, медленно и быстро соответственно. Если это не так, нажмите RST еще раз.
  7. Если индикаторы мигают, нажмите в приложении Start Configuration, начнется процесс настройки подключения для хаба.
  8. Через секунд десять мигание прекратится, затем SYS снова начнет медленно моргать, а LINK останется гореть. В приложении отобразится сообщение Configured. Хаб подключен к сети. Если в списке Device List его нет, то просто нажмите Searching for device.

Уже сейчас можно поуправлять цветом и яркостью самого iBox, но нам необходимо подключить лампы. Для этого выполним привязку ламп к одной из четырех зон, доступных хабу для управления.

  1. Открываем в приложении Mi-Light 3.0 из списка хаб Mi-Light. Заходим в раздел Colors.
  2. В верхней части экрана выбираем одну из зон, пусть будет Zone1. И нажимаем на иконку связывания устройств в правом верхнем углу. Откроется экран LINK/UNLINK с инструкцией.
  3. Теперь настраиваем те лампы, которые мы хотим привязать к Zone1, управление ими в дальнейшем будет происходить синхронно. Для управления яркостью и цветом каждой лампы в отдельности, их надо отнести к отдельным зонам. Итак, включаем лампу, и в течение первых трех секунд нажимаем в приложении Link. Если лампа моргнула три раза, то все отлично, синхронизация прошла успешно. Можно управлять лампой.


В принципе, на данном этапе у вас уже есть пульт для удаленного управления светом. Более того, вы можете написать свою систему управления освещением, благо протокол общения с хабом давно известен (когда-то он был доступен по ссылке limitlessled.com/dev). Есть готовые библиотеки на php, javascript, python. Но управление это возможно только из локальной сети, чего для Алисы явно не достаточно. Попробуем решить данную проблему.


2. Установка openHAB


Кратко, что такое openHab. Это сервер для управления умным домом с открытым исходным кодом. Разрабатывается сообществом, поддерживает управление огромным количеством устройств. Есть мобильный клиент, есть возможность управления Алексой от Amazon и ассистентом от Google. Написан на java, на базе фреймворка Eclipse SmartHome. А значит его можно установить хоть на холодильник, главное чтобы на этом холодильнике работала виртуальная машина Java. Инструкции по установке есть для Linux, Windows, Mac OS, Raspberry Pi, для различных сетевых хранилищ Synology и QNAP. Быстро пробежимся по первому варианту.

  1. Добавляем ключи репозитория:

    wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
    sudo apt-get install apt-transport-https
  2. Добавляем сам репозиторий:

    echo 'deb https://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.list
  3. Обновляемся и ставим сервер вместе с дополнениями:

    sudo apt-get update
    sudo apt-get install openhab2
    sudo apt-get install openhab2-addons
    sudo apt-get install openhab2-addons-legacy
  4. Настраиваем автоматический запуск сервиса после перезагрузки устройства и запускаем его:

    sudo systemctl start openhab2.service
    sudo systemctl status openhab2.service
    sudo systemctl daemon-reload
    sudo systemctl enable openhab2.service
  5. Теперь ждем в районе 15-20 минут (это не преувеличение, это суровая реальность с шутками про скорость работы Java), пока он загрузится и по адресу http://openhab-device:8080 появится веб интерфейс.
  6. На этой странице нас интересует пункт Paper UI. Именно с этим типом интерфейса будем работать в дальнейшем.




3. Управление светом через openHAB


Итак, у нас есть рабочий сервер умного дома и лампы от Xiaomi с возможностью удаленного управления. Необходимо их соединить. openHAB поддерживает биндинги (инструкции, позволяющие управлять подключенной электроникой) для множества устройств, в том числе и для данных ламп.

  1. Заходим в Add-on > Bindings.
  2. Устанавливаем Milight Binding.
  3. Для добавления нашего устройства нажимаем на + в разделе Configuration > Things.
  4. Выбираем Milight Binding, начинается автоматический поиск устройства.
  5. У меня автоматически ничего не нашлось, поэтому я добавлял вручную "Manually add thing".
  6. Выбираем для добавления хаб iBox/iBox2.
  7. На открывшейся странице необходимо заполнить поля IP и Bridge ID (mac адрес подключаемого устройства), их можно узнать, к примеру, в панели управления роутером (у меня хаб регистрируется в сети с именем используемого в нем Wi-Fi модуля HF-LPB100). Добавляем.
  8. Отлично, в списке устройств теперь отображается iBox/iBox2 с надписью "Online".
  9. Снова нажимаем на + и выбираем Milight Binding, чтобы на этот раз добавить непосредственно лампы.
  10. Теперь руками добавлять ничего не нужно, достаточно выбрать группу ламп из списка (в моем случае это пункт Rgbww Color (Zone 1)).
  11. Выбранный пункт должен появиться в списке вещей так же с надписью "Online".

  12. Устройства настроены, теперь необходимо добавить к ним элементы управления. Для этого кликаем по только что добавленному пункту.
  13. Открывается список параметров лампы, которыми мы можем удаленно управлять. Кликаем по синему кругу Brightness.
  14. Далее выбираем элемент управления, с которым хотим связать параметр устройства, т.к. у нас их еще нет, кликаем по Create new item.
  15. Задаем произвольное имя, к примеру Light_Switcher, и, меняем тип с Dimmer на Switch, т.к. у меня нет необходимости регулировать яркость лампы, я хочу ее просто включать и выключать. Меняем категорию просто на Light, чтобы элемент управления отобразился с иконкой в разделе Control. Нажимаем Link.
  16. Переходим в раздел Control и наслаждаемся работой переключателя Brightness у устройства.



4. Внешний доступ к openHAB


По соображениям безопасности, после описанных выше манипуляций, управление сервером умного дома возможно только из локальной сети. Этого для нашей задачи явно не достаточно. Вариантов настройки несколько: настроить VPN для доступа из интернета к локальной сети, сконфигурировать реверсивную прокси или же соединить ваш сервер с сервисом myopenHAB Cloud по адресу myopenHAB.org. Так-как в России число сотрудников Роскомнадзора прямо пропорционально числу пользователей VPN и прокси-серверов, воспользуемся последним вариантом.
Не следует множить сущее без необходимости

  1. Регистрируемся на сайте myopenHAB, авторизуемся и заходим по адресу https://myopenhab.org/account. На данной странице нас интересуют два поля: openHAB UUID и openHAB Secret. Именно они позволяют организовать связь серверов. Давайте разберемся где их взять.
  2. Заходим в панель управления PaperUI openHAB.
  3. Открываем раздел Configuration > Add-ons > Misc.
  4. Устанавливаем openHAB Cloud Connector.
  5. В Configuration > Services должен появиться модуль openHAB Cloud с режимом "Notifications & Remote Access".
  6. В Configuration > System > Add-on Management должен быть активирован переключатель "Acceess Remote Repository".
  7. После установки аддона, искомые нами данные окажутся в файлах /var/lib/openhab2/uuid и /var/lib/openhab2/openhabcloud/secret (userdata/uuid и userdata/openhabcloud/secret, если ставили не из пакета). Вводим их в настройках аккаунта на myopenHAB и жмем Update. Если все настроенно корректно, то слева от адреса вашей почты должно появиться слово "Online". Это говорит о том, что доступ к вашему умному дому из сети интернет открыт, но сразу Алиса им воспользоваться не сможет. Для начала надо сделать доступным снаружи настроенное ранее устройство.
  8. Переходим в раздел Configuration > Services > openHAB Cloud > Configure.
  9. В списке Items to expose to apps such as IFTTT активируем чекбокс для элемента управления яркостью и нажимаем Save.
  10. Через некоторое время проверяем, что выбранный элемент присутствует в списке на странице myopenhab.org/items со статусом "ON".



Теперь управление лампой возможно из интернета, через API openHAB Cloud, которое поддерживает авторизацию по OAuth2. Но, к сожалению, клиенты заранее предопределены, это Alexa, Google Assistant и сервис IFTTT. Алисы в данном списке пока нет. Но это не проблема!


5. IFTTT


Если это тогда то.

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

  1. Регистрируемся на сайте ifttt.com и заходим в Applets > New Applet.
  2. После нажатия + this, необходимо выбрать сервис, событие в котором будет являться триггером. Т.к. сервиса Алисы в списке нет, нам надо выбрать что-то, что сможет получать от нее команды. Это сервис Webhooks. Нажимаем Connect.
  3. Далее выбираем из списка с одним пунктом триггер "получение web запроса".
  4. Указываем имя события, к примеру light_on, и жмем Create.
  5. Теперь надо выбрать ответное действие, нажимаем на + that. Наш выбор openHAB, подключаем.
  6. В открывшемся окне, упомянутой ранее OAuth2 авторизации, кликаем по Allow.
  7. Доступна единственная реакция "отправить команду".
  8. Из выпадающего списка выбираем элемент управления лампой (например Light_Switcher), а в качестве команды включения света указываем слово "ON". Создаем.

Для проверки нам необходимо вызвать триггер у сервиса Webhooks. Как это сделать? Отправить POST запрос.

  1. Ищем на сайте IFTTT сервис Webhooks и заходим в связанную с ним документацию.
  2. На открывшейся странице есть команда, которую нам надо выполнить, заменив {event} на light_on.
  3. После нажатия на Test It, ваша лампа должна включиться.

Осталось создать аналогичный рецепт для события light_off, который будет отправлять команду OFF элементу управления светом. А затем научить Алису вызывать эти триггеры по нашему желанию.




6. Алиса


По моему веленью, по моему хотенью Алиса включит свет, если использовать платформу Яндекс.Диалоги. Платформа открылась в марте этого года и позволяет любому желающему добавить Алисе умений, за счет написания соответствующего кода. На данный момент в каталоге уже представлено огромное количество умений. Разработка умения, это тема для отдельной статьи на хабре, а у нас тут "без единой строчки кода". Так что воспользуемся имеющимися наработками.

  1. Устанавливаем бета версию поискового приложения Яндекс, только в нем на данный момент есть поддержка пользовательских умений.
  2. Говорим Алисе "включи волшебные заклинания". Именно умение волшебные заклинания/волшебное заклинание позволит нам выполнять POST запросы к серверам IFTTT.
  3. Нажимаем Добавить и указываем адрес для включения света вида:

    https://maker.ifttt.com/trigger/light_on/with/key/{user_id}
  4. Следующим шагом произносим фразу или слово, на которое Алиса будет реагировать выполнением запроса по указанному адресу (моя Алиса отвечает на «включи свет»).

Если вы теперь нажмете на соответствующую кнопку или озвучите предложение, то запрос от серверов Яндекса поступит на сервер умения, оттуда в IFTTT, следом в myopenHAB, который передаст данные в ваш локальный инстанс, имеющий непосредственный доступ к хабу ламп, и свет включится. Аналогичную команду сразу добавим и для выключения освещения.


Надо понимать, что недостаточно просто включить Алису и произнести "включи свет". Яндекс ничего не знает о наших командах для умного дома, данные о них хранятся в базе умения "волшебные заклинания". Поэтому сначала нужно вызвать умение, произнеся "включи волшебные заклинания", а уже потом включать и выключать свет голосом.

P.S.


Подход с интеграцией Алисы и openHAB через IFTTT ни чем не ограничивает вашу фантазию. Вы можете с помощью умения "волшебные заклинания" голосом управлять любыми вещами в вашем умном доме. К примеру, в openHAB есть биндинг для Samsung SmartTV, который позволяет управлять звуком и каналами телевизора. Взаимодействие Алисы и Webhooks представляет из себя реализацию голосового интерфейса ко всем сервисам IFTTT, "волшебные заклинания" позволяют выполнить команду любого из них. А можете вообще не использовать Алису, и написать свой фронтэнд, к примеру мобильное приложение, которое будет выполнять запросы к IFTTT через все те же Webhooks. Да и IFTTT использовать не обязательно, по аналогии можно настроить "волшебные заклинания" на выполнение запросов к вашему серверу.

Комментарии (22)


  1. IgorKKK
    21.05.2018 10:56

    Да, пульты дистанционного управления становятся все сложнее и сложнее…
    При чем здесь "умный дом" — ума не приложу. Тупой дом — это точнее. Разве телевизор от переключения каналов пультом зовется умным? А здесь в чем разница?
    Просто сложный, неудобный ПДУ (пульт дистанционного управления).


    1. d0lfin Автор
      21.05.2018 11:50

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


      1. pokryshkin
        21.05.2018 13:54

        У меня колонка Google Mini, пока естественно на английском, но довольно удобно когда мелкий ребенок на руках или просто чем-то руки заняты сказать, например: Hey google, I'm leaving. И колонка выключает свет в квартире.
        У гугла для таких вещей появились «рутины», т.е. предопределенные действия, которые настраиваются прямо из приложения, простой расстановкой чекбоксов. А OpenHab также подключается через myopenHab. Сущностей значительно меньше.
        Алиса до этого еще не доросла, но умнеет быстро.


      1. trapwalker
        22.05.2018 12:37

        Колонка от яндекса — это было бы очень здорово. Скорее бы.
        Еще здорово было бы опенсорос проект с такой колонкой или группой колонок.
        Я вижу такой девайс примерно так:

        • небольшая дешевая колонка с массивом разнонаправленных микрофонов;
        • кооперация таких однотипных колонок в mesh-сеть внутри помещения (думаю 2-3 на комнату — самый раз);
        • координация между колонками по вайфай, каждая слышит звуки вокруг, режет на кусочки и широковещательными пакетами раздаёт другим колонкам, которые с помощью DSP на основе знания о своём местоположении проводят корреляции, триангуляции и фильтрации выделяя источники звуков.
        • на уровне API мы получаем звуковые «чанки», промаркированные:
          • идентификаторами
          • временнЫми метками
          • координатами внутри помещения
          • а в идеальном случае ещё и распознанными лексемами

        • интересная мысль на уровне API метить лексемы (по идентификатору) как атомы для распространения на все узлы с целью последующего быстрого офлайн-распознавания.
        • использование ультразвуковых щелчков и триангуляции для локализации мобильных узлов распознавания относительно стационарных

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

        Ну и для полного счастья нужно реализовать голосовой интерфейс (протокол) для создания и редактирования голосового интерфейса. Сумбурно как-то, надо, блин, статью писать.


  1. pavelpromin
    21.05.2018 11:22

    Смартфон + приложение + интернет + сервера Яндекса + сервера ifttt..., чето как то маловато :(
    Нужно больше сущностей!!!


    1. pavelpromin
      21.05.2018 11:35

      Перефразируя одно высказывание:

      Ты хочешь Алису чтобы управлять своими электроприборами в доме?! Будь проклят ты, если тебе понадобится такая возможность.


    1. d0lfin Автор
      21.05.2018 11:52

      Будем надеяться, что в недалеком будущем все изменится, и смартфон + ifttt будут не нужны.


    1. tvr
      21.05.2018 15:00

      Нужно больше сущностей!!!


      +РКН = рандомная работоспособность.


  1. Ivanii
    21.05.2018 11:51

    Может Яндекс додумается создать аналог www.blynk.cc с Алисой, тогда прикручивать голосовое управление к поделкам будет в разы проще?


    1. telobezumnoe
      21.05.2018 14:58

      в таскере есть плагин для обработки голосовых команд, и на определенные комманды публиковать или озвучивать данные с mqtt. в итоге все можно реализовать локально, без облака, и так же управлять освещением или ещё чем либо


  1. ebt
    21.05.2018 13:59

    запрос от серверов Яндекса поступит на сервер умения, оттуда в IFTTT, следом в myopenHAB, который передаст данные в ваш локальный инстанс

    вот это адское нагромождение очень точно характеризует состояние сегодняшнего «умного дома»


  1. Serge78rus
    21.05.2018 14:15

    и без единой строчки кода
    На фоне описанного Вами «танца с бубном» с настройками всего этого зоопарка, несколько сотен (и даже тысяч) строк кода не выглядят уж так ужасно.


  1. aivs
    21.05.2018 16:26

    Что то на айфоне она не понимает волшебные заклинания пока что


  1. beho1der
    21.05.2018 16:27

    Алису можно уже поставить на Orange Pi или raspberry pi и ловить нужные фразы?


  1. 0tt0max
    21.05.2018 17:57

    мажордомо такие штуки давно делает не?


    1. d0lfin Автор
      21.05.2018 19:29

      ага, тут именно идея была использовать openHAB


  1. Erelen
    21.05.2018 19:28

    А может ли кто-нибудь рассказать об опыте использования голосового управления чем-то в доме на протяжении более чем полугода?
    («я уже более полугода ежедневно включаю свет в комнате голосом, и всё ещё считаю это удобным», или ещё что подобное, но обязательно с опытом в полгода и более)


    1. springimport
      21.05.2018 20:12

      Могу высказать опыт пары дней на примере с Сири? Очень много недостатков (приходится говорить, Сири может не понять и придется повторить, нужно говорить недалеко от устройства или утыкать весь дом микрофонами). Отказался даже не начав толком.
      Самые лучшие устройства — которые не требуют действий. Например, кондиционер включается за 15 минут до прихода и выключается через 20 минут. Или простой детектор движения который включает лампочки.


    1. aivs
      21.05.2018 21:55
      +1

      Мой ребенок учился говорить в тот момент когда siri могла везде управлять освещением, для него нормально, что свет включается голосом. Опыт использования 2 года. Сам чаще использую выключатели, любой свет можно выключить как минимум с 4-х мест в квартире.


  1. OlegXD
    22.05.2018 00:36

    Каково время реакции? Т.е. с момента "Алиса, включи лампочку" до собственно включения.


    1. Erelen
      22.05.2018 01:35

      Судя по видео, вначале идёт подготовительная работа:
      — взять телефон
      — запустить приложение
      — сказать «Алиса, включи волшебные заклинания»
      — ещё ~4 секунды на подтверждение

      После этого можно отдавать команды. От окончания произнесения команды до реакции — я с «ручным» секундомером намерил ~4 секунды.


  1. trapwalker
    22.05.2018 12:49

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