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

в 11:07, , рубрики: home automation, howto, nodejs, siri, vera, z-wave, Беспроводные технологии, голосовое управление, Разработка для интернета вещей

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

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

Автор: Artemiy117

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js