В этой статье я опишу процесс установки и настройки шлюза для взаимодействия Siri с устройствами домашней автоматизации и расскажу про некоторые особенности разных версий.
Основным контроллером умного дома у меня служит Vera3. Управляет соответственно всякой Audio/Video компонентами и Z-wave устройствами. Ну а «волшебной палочкой» будет Node-JS приложение VeraHomeKitBridge. Ниже я напишу, почему остановил свой выбор именно на этом приложении.
Скачиваем архив с GitHub’а. Нужно всё это где-то развернуть. У меня для этого есть виртуалка. Кто не держит дома сервер, можно задействовать Raspberry Pi под это дело.
Процесс установки
Краткий мануал по установке есть на странице проекта. Я рекомендую дополнительно воспользоваться инструкцией соседнего проекта на GitHub'е (на мой взгляд она более понятная).
Полностью копировать команды сюда не буду. Пройдусь по пунктам:
- Устанавливаем необходимые пакеты: nodejs, npm, git-core, libnss-mdns, libavahi-compat-libdnssd-dev.
- Копируем в lib/ сам HAP-NodeJS. Скачиваем его отдельным архивом отсюда.
- Устанавливаем плагины для работы с приложением.
- Правим config.json. Вписываем IP адрес контроллера Vera, и ещё можно поменять пин-код на свой.
- Пытаемся запустить приложение с помощью команды 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+.
Как я и ранее написал, можно работать через сцены. Это дает нам возможность управлять практически всем, что доступно в интерфейсе Веры. Сцены все видны в приложении и доступны при голосовых командах. Поэтому можно управлять ресивером или телевизором, создав 2 сцены — включения и выключение ресивера. В Вере сцены следует навать Receiver — On и Receiver — Off. Тогда можно давать команды на «Включить ресивер» и «Выключить ресивер», а не «Включить ресивер» и «Включить выключение ресивера» соответственно.
Что еще?
HomeKit открывает двери в голосовое управление практически любой домашней автоматикой. Для этого есть более обширное понятие — homebridge. Куда можно запихнуть автоматику других производителей. Пошуршав все тот же GitHub можно найти механизмы управления для других контроллеров и платформ: WeMo, PhilipsHue… На плагин для Веры я наткнулся почти год назад, и за это время он продвинулся в лучшую сторону.
Выделю некоторые особенности: Если посмотреть код, то видно, что взаимодействие происходит через http протокол. Работает быстрее аналогов. Добавляются сразу все устройства в виде единого аксессуара. При желании можно расширять всю систему вдоль и поперек.
Немного лирики или трудности перевода
Тут остановлюсь немного на командах для Siri. Если название устройства вписать не явно, Siri лезет в Интернет по вашему запросу, а не даёт команду на это устройство. И команды, бывает, понимает по-разному. Иногда нужно «Включить …», но «Выключи …» Иначе на запрос «Выключить теплый пол», например, будет искать в интернете по запросу как выключить теплый пол.
Есть общие команды, как «Включи освещение в …», «Включи всё в …», «Опустить шторы». Есть команда на «Закрыть», «Открыть». Но в моем случае с гидролоками эта команда не сработала. Описывал устройство и как «вода» и как «кран». На команду «Закрыть кран в туалете» упорно не видит устройства. Хотя комнату «Туалет» определяет. Немного парадоксальная ситуация: называю гидролок «утюгом», даю команду «Включи утюг» — перекрывает воду. Называю «вода», «кран» — лезет в интернете искать как закрыть кран. Вообще, с закрытием, мне кажется, работает эта связка только с определенными устройствами типа замков. Но тогда он должен быть соответствующе описан в типе устройства. И тогда команду «Закрыть входную дверь» Siri понимает правильно.
На видео показан принцип работы. Перекрытие воды работает от реле, которое в HomeKit'е не удалось описать как гидролок или кран.
В общем, пользуйтесь, пробуйте на других устройствах как оно работает и совершенствуйте голосовое управление домашней автоматизацией.
Комментарии (26)
Constin
03.05.2016 15:05Я слегка погуглил и вернулся.
Получается, что если я использую у себя экосистему apple, то мне надо смотреть в сторону эпловской homekit и контроллеров умеющих в homekit. Например insteon. z-wave напрямую не умеет в homekit. При этом они конкуренты с insteon.
Те ставлю insteon pro hab с поддержкой homekit, покупаю к нему девайсы, ставлю приложения homekit и жизнь удалась?svilgelm
03.05.2016 18:14Лучше не стоит, много негативных отзывов на амазоне, продукт очень сырой.
Constin
03.05.2016 19:37еще погуглил razberry z-wave тоже умеет homekit, правда не ясно, что там с сири.
PoltoS
06.05.2016 16:23У RaZberry из магазина приложений можно поставить HomeKit модуль. Но, говорят, тот, что на базе homebridge работает лучше с Siri. Там вопрос в нэйминге устройств. Хотя честь, отвечающая за это у RaZberry открытая — можете поправить и даже внести свой вклад в развитие.
Artemiy117
08.05.2016 21:33Нэйминг задается в приложении Insteon+ или другом, с которого будем управлять устройствами. В самом RaZberry не важно как они называются. В RaZberry он может Appliance Module, а в Insteon в поле Siri Control вписываем удобное для голосового управление название. Тут как раз Siri и сопоставляет устройства.
Кстати, вы можете RazBerry заточить чтобы она была «из коробки» с возможностью голосового управления. Просто добавьте Nodejs приложение в состав z-way, и оно будет «homekit-совместимое». :)PoltoS
08.05.2016 23:47Какое такое nodejs приложение? Z-Way базируется на Google V8 как и нода, но ноду не поддерживает. Что даже хорошо, т.к. там тот ещё зоопарк.
В RaZberry есть родная нативная имплементация HomeKit. Достаточно App поставить из Online хранилища (вынесено в Online хранилище по просьбе Apple, кстати — не понравилось им, что оно сразу внутри, настоятельно попросили выпилить)
Eugeny24
03.05.2016 18:14Мне всё очень нравится. Система настроенна на отлично. При дальнейшем её совершенствовании можно будет управлять всеми устройствами у себя дома не отходя от телефона, что сделает проживание дома более приятным.
PahanMenski
03.05.2016 18:14Точно не знаю как сейчас, но год назад, когда я выбирал технологию умного дома, выбор insteon-устройств для европейского рынка был ну очень скуден. Пришлось все же остановиться на z-wave.
mastini
03.05.2016 22:58Я использую nfarina/homebridge, есть приличное кол-во готовых плагинов.
ACooper
04.05.2016 18:41Есть одно неприятное свойство в этом плагине. Если у вас создано несколько item'ов, естественно с разными именами, но при этом они имеют одинаковое значение, например «Температура [%d] С», и в какой-то момент значение %d у них совпадет, то приложение не стартует. Приходится такие item'ы отлавливать и переименовывать: «Температура кухня [%d] С», «Температура спальня [%d] С».
sisaenkov
04.05.2016 18:10В моем случае практика показала, что голосовое управление — неудобная и долгая штука, при этом, довольно интересная.
Поясню. Иногда слова распознаются некорректно, поэтому приходится тратить время на повторное проговаривание фразы.
Войти в приложение и выполнить действие руками оказалось более быстрым решением.
В свое время настроил все действия для исполняемых устройств через Tasker + AutoVoice в связке с Vera и позже с Fibaro HCL.ACooper
04.05.2016 18:35Быстрее не всегда удобнее. Гораздо приятнее скомандовать телефону лежащему на тумбочке: «Привет Сири. Выключи телевизор. Выключи свет в спальне», чем высовываться из под одеяла и тянутся к телефону. Пусть даже сработает со второго раза.
Однако проблемы с распознаванием действительно существуют, вернее даже не с распознаванием, а с интерпретацией. Мне, например, так и не удалось заставить Сири выключить ёлку фразой «Выключи ёлку». Все время пытается выключить песню исполнителя Ёлка, которой у меня отродясь нет.mastini
04.05.2016 18:40Для таких случаев нужно переименовывать девайсы, типа «Елочная Лампа». Такие же проблемы с например «Включи Sonos» -> запустит аппликейшен, но если переименовать в «Колонки на Кухне», тогда все ок.
ACooper
04.05.2016 18:53Да, но эффект то был рассчитан на ребенка. А еще лучше, чтобы отвлекалась на фразу: «Ёлочка зажгись!».
Также пока не успел разобраться как управлять устройствами в разных комнатах, которые хотелось бы называть одинаково. Например: «Выключи телевизор в зале», «выключи телевизор на кухне». На сколько я понял, Insteon+ (хотя скорее всего это не он, а спецификация HomeKit) не позволяет присвоить устройству, пусть даже из разных комнат, одинаковое голосовое имя. Приходится все устройства обзывать по своему и запоминать как кого зовут.sisaenkov
04.05.2016 19:20+2В Tasker'е на андроиде есть возможность задавать переменные.
Например, произнесенная фраза для какого-либо действия всегда содержит фиксированное количество слов-переменных (для упрощения самого алгоритма). Каждой переменной может соответствовать несколько разных названий устройств, действий, помещений. Также через ИЛИ указываются различные синонимы к названиям устройств (батарея, обогреватель; вентиляция, вытяжка, вентилятор; и т.д.).
1. Шаблон для фразы: %action %device %into %room ('выключить' 'тёплый пол' 'на' 'кухне'; 'включить' 'обогреватель' 'в' 'спальне'; и т.д.)
2-21. %deviceid — ID конкретного исполнительного устройства подставляется в GET-запрос на основе распознанного названия помещения и устройства:
22-23. %actionparam — еще один аргумент GET-запроса, который равен либо TurnOn, либо TurnOff (актуально только для реле или подобных исполнительных устройств. Для диммеров строка отличается):
И сам GET-запрос:
Способ активации распознавания голоса может быть любым удобным. Я пробовал и автоматическое распознавание с последующим голосовым повторением сказанной мною фразой, и активация коротким встряхиванием телефона.
ACooper
04.05.2016 19:00Интересно, а если появятся популярные исполнители с именами Лампа и Свет, то как будем управлять голосом? Или теперь по этим именам приоритет навсегда застолблен именно за управление светом и лампами? А если прямо сейчас добавить в itunes несколько альбомов с данными «товарищами», как себя начнет вести Сири?
MAXXL
04.05.2016 19:43А можете привести примеры каким образом настраивали связку с Fibaro HCL?
sisaenkov
04.05.2016 19:49Через API. В ветке выше чуть подробнее расписал.
ACooper
04.05.2016 23:08Кстати, обнаружился неприятный момент: HomeKit имеет ограничение на 100 устройств. Незаметно, но количество устройств у меня перевалило за 100. Каким образом в конфиге указать устройства которыми я хочу управлять голосом и какие надо добавить в HomeKit, а какие нет?
wenomer
05.05.2016 13:58для контроллера Fibaro находится только www.npmjs.com/package/homebridge-fibaro-hc2, для HomeCenter2 а для lite как-то ничего.
Constin
Впечатляет!
Разницы нет, если вместо Vera3 будет стоять z-wave модуль RaZberry для Raspberry?
Constin
невнимательно прочитал, видимо разница есть, раз приложение только для vera.
Artemiy117
Да. разница есть. Так как запросы к Вере идут через http протокол. Как с этим у RaZberry — не в курсе. Если что-то подобное есть, то можно переписать app.js
Artemiy117
Для RaZberry лучше поставить nfarina/homebridge. И к нему плагин homebridge-zway