Дружим HomeKit с Алисой, благодаря Homebridge или другим системам автоматизации.

Как же давно идут разговоры о желании сообщества научить Алису и Яндекс.Станцию управлять устройствами умного дома. И даже есть уже несколько сервисов, которые могут помочь с этим, но все они не решали задачу полноценно. И требовали либо подключение IFTTT, либо использование «волшебного заклинания», либо настройки определенной системы автоматизации. И вот сегодня нам написал один из подписчиков с просьбой посмотреть на разработанный им сервис для подключения Алисы к Homebridge.

Вот что он пишет:

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

Мой дом функционирует на основе сервера HomeBridge. Про его настройку и использование на хабре и других ресурсах написано множество статей (раз, два, три), потому я не буду останавливаться на этом. Не изучив вопрос основательно, я был уверен в том, что в каталоге навыков Алисы уже полно решений для взаимодействия с системами управления умным домом. Оказалось, что на момент написания статьи большая часть навыков по тематике «Умный дом» требует устройство с дисплеем для работы, что не подходит для станции. Единственным навыком с виду отвечающим требованиям и умеющим работать без дисплея был «Альфред». Навык не подошел мне по причине того, что он жестко завязан на сервис — IFTTT. Допустим я хочу создать виртуальный переключатель, функционирующий в системе умного дома и позволяющий привязывать сценарии к его текущему состоянию. Альфред использует сервис WebHook для IFTTT с помощью которого можно только воздействовать на триггер создаваемый в апплете IFTTT, но нет возможности получить текущее состояние апплета (можно перевести переключатель в положение вкл или выкл, но нельзя узнать в каком состоянии сейчас переключатель).

Для решения вышеописанной задачи как раз и создан сервис Alice-HomeBridge, предназначенный для связи голосового помощника Яндекс.Алиса и различных систем управления умным домом. Далее в качестве примеров настроек будем рассматривать конфигурацию HomeBridge, но данный подход применим и для других систем таких как Home AssistantopenHAB и других.

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

Изменить или узнать состояние переключателей можно с помощью специально сформированного GET запроса к сервису.

Для того чтобы сервис мог взаимодействовать с голосовым ассистентом «Алиса» создан навык «Ленивый Джимми».

Скажите Алисе: «Запусти навык ленивый Джимми» и он предложит вам сообщить код активации, который вы можете найти в своем личном кабинете.

После активации вы можете изменить состояние ваших переключателей с помощью команд «Включи» или «Выключи». Например, если вы скажете «Включи Свет», состояние переключателя «Свет» изменится на положительное. Если вы скажете просто «Свет», то состояние переключателя изменится на противоположное.

Для того чтобы диалог звучал более естественно присутствует возможность создавать переключатели с более понятными названиями, например, «С Утречком», тогда вы сможете сказать Алисе «Скажи Джимми С Утречком» и состояние переключателя изменится.

Осталось настроить HomeBridge. Для примера будем использовать расширение cmdswitch2. Создадим для HomeKit переключатель с названием «Alice Button 1».

{
  "platform": "cmdSwitch2",
  "name": "CMD Switch",
  "switches": [
    {
      "name": "Alice Button 1",
      "on_cmd": "curl --silent \"http://alicehomebridge.org/alice/switches.php?switch=34&hb=ADB7BYBT728O&state=set&val=true\"",
      "off_cmd": "curl --silent \"http://alicehomebridge.org/alice/switches.php?switch=34&hb=ADB7BYBT728O&state=set&val=false\"",
      "state_cmd": "curl --silent \"http://alicehomebridge.org/alice/switches.php?switch=34&hb=ADB7BYBT728O&state=get\" | grep -oh \"true\"",
      "polling": true,
      "interval": 2
    }
  ]
}

Для того чтобы не перегружать сервер лишними запросами значение параметра interval ставим не меньше 2 секунд.

Все готово.

Теперь, если сказать «Алиса скажи ленивому Джимми с утречком», переключатель «Alice Button 1» изменит состояние. Вот демонстрация того, как все работает в совокупности с настроенными сценариями HomeKit:

Полная версия файла конфигурации HomeBridge

 

И еще пару слов от автора:

P. S. Большинство систем управления умными домами, например, HomeKit, поддерживают создание сценариев. Вы можете создать сценарий, который хотели бы использовать в определенной ситуации, например, когда вы просыпаетесь и назначить его вызов на событие «Включение переключателя С Утречком».

P. P. S. Мой сервис только развивается и еще, мягко сказать, далек от идеала. Но и Алиса некоторые фразы, время от времени, в упор отказывается воспринимать. Например, она прекрасно передает навыку фразу «Включи свет», но фразу «Доброе утро» не передаст. Надеюсь в Яндекс знают о проблеме и скоро ее исправят. Жду ваших комментариев.

С разрешения автора за основу была взята статья с habr.com .

Author

Наш главный гайд-мастер. Инструкции и обзоры его конёк. Иногда перебарщивает с личным мнением.