Идея поуправлять умным домом с помощью голосовых команд родилась уже давно. И в каких-то системах так или иначе это реализовано. Siri – хороший и удобный голосовой помощник для владельцев айфонов. Понимает человеческую речь, удобен. Но по причине закрытого протокола, не используется для голосового управления «умных» устройств. Хорошо, что у Apple есть HomeKit – некий «туннель» для приема команд умными устройствами от Siri.

image

В этой статье я опишу процесс установки и настройки шлюза для взаимодействия Siri с устройствами домашней автоматизации и расскажу про некоторые особенности разных версий.
Основным контроллером умного дома у меня служит Vera3. Управляет соответственно всякой Audio/Video компонентами и Z-wave устройствами. Ну а «волшебной палочкой» будет Node-JS приложение VeraHomeKitBridge. Ниже я напишу, почему остановил свой выбор именно на этом приложении.
Скачиваем архив с GitHub’а. Нужно всё это где-то развернуть. У меня для этого есть виртуалка. Кто не держит дома сервер, можно задействовать Raspberry Pi под это дело.

Процесс установки
Краткий мануал по установке есть на странице проекта. Я рекомендую дополнительно воспользоваться инструкцией соседнего проекта на GitHub'е (на мой взгляд она более понятная).
Полностью копировать команды сюда не буду. Пройдусь по пунктам:
  1. Устанавливаем необходимые пакеты: nodejs, npm, git-core, libnss-mdns, libavahi-compat-libdnssd-dev.
  2. Копируем в lib/ сам HAP-NodeJS. Скачиваем его отдельным архивом отсюда.
  3. Устанавливаем плагины для работы с приложением.
  4. Правим config.json. Вписываем IP адрес контроллера Vera, и ещё можно поменять пин-код на свой.
  5. Пытаемся запустить приложение с помощью команды node app.js

Желательно сразу установить последнюю версию nodejs. У меня из стандартных репозиториев Debian'а установилась версия 0.10.29. Из-за чего возникла ошибка «error: ‘REPLACE_INVALID_UTF8’ is not a member of…» что-то там. Подключаем другой репозиторий и устанавливаем оттуда.

curl -sL https://deb.nodesource.com/setup | sudo bash -
apt-get install nodejs

после этого версия должна быть 0.10.44.

Еще в процессе запуска возникнут ошибки о недостающих плагинах. Ставим:
npm install имя_пакета

Еще может возникнуть ошибка «…invalid ELF header». Чтобы заработало, нужно зайти в lib/HAP-NodeJS и сделать
npm rebuild

В итоге должно: успешно стартануть Хоумкит для Веры и автоматом подцепиться сцены и выключатели, которые видит контроллер. Если это произошло – полдела сделано.
В дальнейшем, если никаких ошибок нет, можно запускать приложение в фоновом режиме командой:
forever start app.js

предварительно установив плагин
npm install forever

Делать это нужно, конечно же, убедившись, что вы находитесь в директории VeraHomeKitBridge.

Теперь настраиваем HomeKit на iPhone
Устанавливаем приложение Insteon+. При желании можно выбрать другие платные аналоги. Главное чтобы они работали с HomeKit.
Включаем в Настройки -> Конфиденциальность -> HomeKit программу, которую установили.
В настройках iCloud надо создать связку ключей.
Заходим в программу Insteon+. Делаем Add Device. Далее она ищет аксессуар, совместимый с HomeKit. У нас это запущенный сервис с запущенным HAP-NodeJS, который должен быть в той же локальной сети что и iPhone. Находим один аксессуар и добавляем. Вводим пин-код, который указали в config.json. Первый раз добавление длится около минуты. Если все прошло успешно, то все актуаторы и сцены из Веры будут видны в Insteon+ и даже будут работать от нажатия.
Но у меня есть приложение от Веры. Повыключать я и там могу. Insteon+ нужен для голосового управления. Для этого в настройках приложения выбираем Edit Device. Выбираем устройство и переходим в поле «Siri control». Туда надо вписать человеческое название актуатора или сценария. Например, если это реле освещения, то назвать «лампочка» или «свет». Вообще «свет» — у Siri более общее понятие. Поэтому старайтесь делать конкретные названия: утюг, чайник, телевизор, теплый пол…
Разложив устройства в приложении по комнатам можно давать команды: «Включи свет на кухне» Siri «видит» названия комнат. Еще в настройках устройства можно указать его тип. Сейчас там Light и Fan. Может в будущем добавятся и другие типы. Сейчас же можно для реле освещения указать, что это именно свет. Тогда устройство будет реагировать на «Включи свет на кухне» и не будет реагировать, если его тип будет Fan. Ниже в видео я продемонстрирую голосовое управление. Но у меня не так много устройств, чтобы показать все варианты управления голосом. Пока только принцип действия. А дальше только с расширением устройств и функционала Insteon+.

image image

Как я и ранее написал, можно работать через сцены. Это дает нам возможность управлять практически всем, что доступно в интерфейсе Веры. Сцены все видны в приложении и доступны при голосовых командах. Поэтому можно управлять ресивером или телевизором, создав 2 сцены — включения и выключение ресивера. В Вере сцены следует навать Receiver — On и Receiver — Off. Тогда можно давать команды на «Включить ресивер» и «Выключить ресивер», а не «Включить ресивер» и «Включить выключение ресивера» соответственно.

Что еще?
HomeKit открывает двери в голосовое управление практически любой домашней автоматикой. Для этого есть более обширное понятие — homebridge. Куда можно запихнуть автоматику других производителей. Пошуршав все тот же GitHub можно найти механизмы управления для других контроллеров и платформ: WeMo, PhilipsHue… На плагин для Веры я наткнулся почти год назад, и за это время он продвинулся в лучшую сторону.
Выделю некоторые особенности: Если посмотреть код, то видно, что взаимодействие происходит через http протокол. Работает быстрее аналогов. Добавляются сразу все устройства в виде единого аксессуара. При желании можно расширять всю систему вдоль и поперек.

Немного лирики или трудности перевода
Тут остановлюсь немного на командах для Siri. Если название устройства вписать не явно, Siri лезет в Интернет по вашему запросу, а не даёт команду на это устройство. И команды, бывает, понимает по-разному. Иногда нужно «Включить …», но «Выключи …» Иначе на запрос «Выключить теплый пол», например, будет искать в интернете по запросу как выключить теплый пол.
Есть общие команды, как «Включи освещение в …», «Включи всё в …», «Опустить шторы». Есть команда на «Закрыть», «Открыть». Но в моем случае с гидролоками эта команда не сработала. Описывал устройство и как «вода» и как «кран». На команду «Закрыть кран в туалете» упорно не видит устройства. Хотя комнату «Туалет» определяет. Немного парадоксальная ситуация: называю гидролок «утюгом», даю команду «Включи утюг» — перекрывает воду. Называю «вода», «кран» — лезет в интернете искать как закрыть кран. Вообще, с закрытием, мне кажется, работает эта связка только с определенными устройствами типа замков. Но тогда он должен быть соответствующе описан в типе устройства. И тогда команду «Закрыть входную дверь» Siri понимает правильно.


На видео показан принцип работы. Перекрытие воды работает от реле, которое в HomeKit'е не удалось описать как гидролок или кран.

В общем, пользуйтесь, пробуйте на других устройствах как оно работает и совершенствуйте голосовое управление домашней автоматизацией.

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


  1. Constin
    03.05.2016 14:30

    Впечатляет!
    Разницы нет, если вместо Vera3 будет стоять z-wave модуль RaZberry для Raspberry?


    1. Constin
      03.05.2016 14:37

      невнимательно прочитал, видимо разница есть, раз приложение только для vera.


    1. Artemiy117
      03.05.2016 14:52

      Да. разница есть. Так как запросы к Вере идут через http протокол. Как с этим у RaZberry — не в курсе. Если что-то подобное есть, то можно переписать app.js


    1. Artemiy117
      04.05.2016 10:14

      Для RaZberry лучше поставить nfarina/homebridge. И к нему плагин homebridge-zway


  1. Constin
    03.05.2016 15:05

    Я слегка погуглил и вернулся.
    Получается, что если я использую у себя экосистему apple, то мне надо смотреть в сторону эпловской homekit и контроллеров умеющих в homekit. Например insteon. z-wave напрямую не умеет в homekit. При этом они конкуренты с insteon.

    Те ставлю insteon pro hab с поддержкой homekit, покупаю к нему девайсы, ставлю приложения homekit и жизнь удалась?


    1. svilgelm
      03.05.2016 18:14

      Лучше не стоит, много негативных отзывов на амазоне, продукт очень сырой.


      1. Constin
        03.05.2016 19:37

        еще погуглил razberry z-wave тоже умеет homekit, правда не ясно, что там с сири.


        1. Artemiy117
          03.05.2016 20:53

          Если умеет, то можно привязать. Тогда вообще можно все в одном сделать.


        1. PoltoS
          06.05.2016 16:23

          У RaZberry из магазина приложений можно поставить HomeKit модуль. Но, говорят, тот, что на базе homebridge работает лучше с Siri. Там вопрос в нэйминге устройств. Хотя честь, отвечающая за это у RaZberry открытая — можете поправить и даже внести свой вклад в развитие.


          1. Artemiy117
            08.05.2016 21:33

            Нэйминг задается в приложении Insteon+ или другом, с которого будем управлять устройствами. В самом RaZberry не важно как они называются. В RaZberry он может Appliance Module, а в Insteon в поле Siri Control вписываем удобное для голосового управление название. Тут как раз Siri и сопоставляет устройства.
            Кстати, вы можете RazBerry заточить чтобы она была «из коробки» с возможностью голосового управления. Просто добавьте Nodejs приложение в состав z-way, и оно будет «homekit-совместимое». :)


            1. PoltoS
              08.05.2016 23:47

              Какое такое nodejs приложение? Z-Way базируется на Google V8 как и нода, но ноду не поддерживает. Что даже хорошо, т.к. там тот ещё зоопарк.

              В RaZberry есть родная нативная имплементация HomeKit. Достаточно App поставить из Online хранилища (вынесено в Online хранилище по просьбе Apple, кстати — не понравилось им, что оно сразу внутри, настоятельно попросили выпилить)


  1. Eugeny24
    03.05.2016 18:14

    Мне всё очень нравится. Система настроенна на отлично. При дальнейшем её совершенствовании можно будет управлять всеми устройствами у себя дома не отходя от телефона, что сделает проживание дома более приятным.


  1. PahanMenski
    03.05.2016 18:14

    Точно не знаю как сейчас, но год назад, когда я выбирал технологию умного дома, выбор insteon-устройств для европейского рынка был ну очень скуден. Пришлось все же остановиться на z-wave.


  1. mastini
    03.05.2016 22:58

    Я использую nfarina/homebridge, есть приличное кол-во готовых плагинов.


    1. ACooper
      04.05.2016 18:41

      Есть одно неприятное свойство в этом плагине. Если у вас создано несколько item'ов, естественно с разными именами, но при этом они имеют одинаковое значение, например «Температура [%d] С», и в какой-то момент значение %d у них совпадет, то приложение не стартует. Приходится такие item'ы отлавливать и переименовывать: «Температура кухня [%d] С», «Температура спальня [%d] С».


  1. sisaenkov
    04.05.2016 18:10

    В моем случае практика показала, что голосовое управление — неудобная и долгая штука, при этом, довольно интересная.

    Поясню. Иногда слова распознаются некорректно, поэтому приходится тратить время на повторное проговаривание фразы.
    Войти в приложение и выполнить действие руками оказалось более быстрым решением.
    В свое время настроил все действия для исполняемых устройств через Tasker + AutoVoice в связке с Vera и позже с Fibaro HCL.


    1. ACooper
      04.05.2016 18:35

      Быстрее не всегда удобнее. Гораздо приятнее скомандовать телефону лежащему на тумбочке: «Привет Сири. Выключи телевизор. Выключи свет в спальне», чем высовываться из под одеяла и тянутся к телефону. Пусть даже сработает со второго раза.

      Однако проблемы с распознаванием действительно существуют, вернее даже не с распознаванием, а с интерпретацией. Мне, например, так и не удалось заставить Сири выключить ёлку фразой «Выключи ёлку». Все время пытается выключить песню исполнителя Ёлка, которой у меня отродясь нет.


      1. mastini
        04.05.2016 18:40

        Для таких случаев нужно переименовывать девайсы, типа «Елочная Лампа». Такие же проблемы с например «Включи Sonos» -> запустит аппликейшен, но если переименовать в «Колонки на Кухне», тогда все ок.


        1. ACooper
          04.05.2016 18:53

          Да, но эффект то был рассчитан на ребенка. А еще лучше, чтобы отвлекалась на фразу: «Ёлочка зажгись!».

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


          1. sisaenkov
            04.05.2016 19:20
            +2

            В Tasker'е на андроиде есть возможность задавать переменные.
            Например, произнесенная фраза для какого-либо действия всегда содержит фиксированное количество слов-переменных (для упрощения самого алгоритма). Каждой переменной может соответствовать несколько разных названий устройств, действий, помещений. Также через ИЛИ указываются различные синонимы к названиям устройств (батарея, обогреватель; вентиляция, вытяжка, вентилятор; и т.д.).

            1. Шаблон для фразы: %action %device %into %room ('выключить' 'тёплый пол' 'на' 'кухне'; 'включить' 'обогреватель' 'в' 'спальне'; и т.д.)
            2-21. %deviceid — ID конкретного исполнительного устройства подставляется в GET-запрос на основе распознанного названия помещения и устройства:

            image

            22-23. %actionparam — еще один аргумент GET-запроса, который равен либо TurnOn, либо TurnOff (актуально только для реле или подобных исполнительных устройств. Для диммеров строка отличается):

            image

            И сам GET-запрос:

            image

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


        1. ACooper
          04.05.2016 19:00

          Интересно, а если появятся популярные исполнители с именами Лампа и Свет, то как будем управлять голосом? Или теперь по этим именам приоритет навсегда застолблен именно за управление светом и лампами? А если прямо сейчас добавить в itunes несколько альбомов с данными «товарищами», как себя начнет вести Сири?


    1. MAXXL
      04.05.2016 19:43

      А можете привести примеры каким образом настраивали связку с Fibaro HCL?


      1. sisaenkov
        04.05.2016 19:49

        Через API. В ветке выше чуть подробнее расписал.


        1. ACooper
          04.05.2016 23:08

          Кстати, обнаружился неприятный момент: HomeKit имеет ограничение на 100 устройств. Незаметно, но количество устройств у меня перевалило за 100. Каким образом в конфиге указать устройства которыми я хочу управлять голосом и какие надо добавить в HomeKit, а какие нет?


          1. sisaenkov
            05.05.2016 07:18

            Не знаю. Нет яблочных устройств у меня.


  1. wenomer
    05.05.2016 13:58

    для контроллера Fibaro находится только www.npmjs.com/package/homebridge-fibaro-hc2, для HomeCenter2 а для lite как-то ничего.