Голосовое управление умным домом на Z-wave через Siri

    Идея поуправлять умным домом с помощью голосовых команд родилась уже давно. И в каких-то системах так или иначе это реализовано. 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

      0
      Впечатляет!
      Разницы нет, если вместо Vera3 будет стоять z-wave модуль RaZberry для Raspberry?
        0
        невнимательно прочитал, видимо разница есть, раз приложение только для vera.
          0
          Да. разница есть. Так как запросы к Вере идут через http протокол. Как с этим у RaZberry — не в курсе. Если что-то подобное есть, то можно переписать app.js
            0
            Для RaZberry лучше поставить nfarina/homebridge. И к нему плагин homebridge-zway
            0
            Я слегка погуглил и вернулся.
            Получается, что если я использую у себя экосистему apple, то мне надо смотреть в сторону эпловской homekit и контроллеров умеющих в homekit. Например insteon. z-wave напрямую не умеет в homekit. При этом они конкуренты с insteon.

            Те ставлю insteon pro hab с поддержкой homekit, покупаю к нему девайсы, ставлю приложения homekit и жизнь удалась?
              0
              Лучше не стоит, много негативных отзывов на амазоне, продукт очень сырой.
                0
                еще погуглил razberry z-wave тоже умеет homekit, правда не ясно, что там с сири.
                  0
                  Если умеет, то можно привязать. Тогда вообще можно все в одном сделать.
                    0
                    У RaZberry из магазина приложений можно поставить HomeKit модуль. Но, говорят, тот, что на базе homebridge работает лучше с Siri. Там вопрос в нэйминге устройств. Хотя честь, отвечающая за это у RaZberry открытая — можете поправить и даже внести свой вклад в развитие.
                      0
                      Нэйминг задается в приложении Insteon+ или другом, с которого будем управлять устройствами. В самом RaZberry не важно как они называются. В RaZberry он может Appliance Module, а в Insteon в поле Siri Control вписываем удобное для голосового управление название. Тут как раз Siri и сопоставляет устройства.
                      Кстати, вы можете RazBerry заточить чтобы она была «из коробки» с возможностью голосового управления. Просто добавьте Nodejs приложение в состав z-way, и оно будет «homekit-совместимое». :)
                        0
                        Какое такое nodejs приложение? Z-Way базируется на Google V8 как и нода, но ноду не поддерживает. Что даже хорошо, т.к. там тот ещё зоопарк.

                        В RaZberry есть родная нативная имплементация HomeKit. Достаточно App поставить из Online хранилища (вынесено в Online хранилище по просьбе Apple, кстати — не понравилось им, что оно сразу внутри, настоятельно попросили выпилить)
                0
                Мне всё очень нравится. Система настроенна на отлично. При дальнейшем её совершенствовании можно будет управлять всеми устройствами у себя дома не отходя от телефона, что сделает проживание дома более приятным.
                  0
                  Точно не знаю как сейчас, но год назад, когда я выбирал технологию умного дома, выбор insteon-устройств для европейского рынка был ну очень скуден. Пришлось все же остановиться на z-wave.
                    0
                    Я использую nfarina/homebridge, есть приличное кол-во готовых плагинов.
                      0
                      Есть одно неприятное свойство в этом плагине. Если у вас создано несколько item'ов, естественно с разными именами, но при этом они имеют одинаковое значение, например «Температура [%d] С», и в какой-то момент значение %d у них совпадет, то приложение не стартует. Приходится такие item'ы отлавливать и переименовывать: «Температура кухня [%d] С», «Температура спальня [%d] С».
                      0
                      В моем случае практика показала, что голосовое управление — неудобная и долгая штука, при этом, довольно интересная.

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

                        Однако проблемы с распознаванием действительно существуют, вернее даже не с распознаванием, а с интерпретацией. Мне, например, так и не удалось заставить Сири выключить ёлку фразой «Выключи ёлку». Все время пытается выключить песню исполнителя Ёлка, которой у меня отродясь нет.
                          0
                          Для таких случаев нужно переименовывать девайсы, типа «Елочная Лампа». Такие же проблемы с например «Включи Sonos» -> запустит аппликейшен, но если переименовать в «Колонки на Кухне», тогда все ок.
                            0
                            Да, но эффект то был рассчитан на ребенка. А еще лучше, чтобы отвлекалась на фразу: «Ёлочка зажгись!».

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

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

                              image

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

                              image

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

                              image

                              Способ активации распознавания голоса может быть любым удобным. Я пробовал и автоматическое распознавание с последующим голосовым повторением сказанной мною фразой, и активация коротким встряхиванием телефона.
                              0
                              Интересно, а если появятся популярные исполнители с именами Лампа и Свет, то как будем управлять голосом? Или теперь по этим именам приоритет навсегда застолблен именно за управление светом и лампами? А если прямо сейчас добавить в itunes несколько альбомов с данными «товарищами», как себя начнет вести Сири?
                            0
                            А можете привести примеры каким образом настраивали связку с Fibaro HCL?
                              0
                              Через API. В ветке выше чуть подробнее расписал.
                                0
                                Кстати, обнаружился неприятный момент: HomeKit имеет ограничение на 100 устройств. Незаметно, но количество устройств у меня перевалило за 100. Каким образом в конфиге указать устройства которыми я хочу управлять голосом и какие надо добавить в HomeKit, а какие нет?
                                  0
                                  Не знаю. Нет яблочных устройств у меня.
                            0
                            для контроллера Fibaro находится только www.npmjs.com/package/homebridge-fibaro-hc2, для HomeCenter2 а для lite как-то ничего.

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

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