четверг, 3 февраля 2022 г.

Как подружить марусю и home assistant

Как я уже говорил раньше, я считал рекламу главной проблемой капитализма и поэтому постоянно на нее покупаюсь. На самом деле оказалось, что проблема капитализма в стагнирующем рынке - пока рынок растет от капитализма есть польза, как только рынок перестает расти капитализм превращается в олигополию и от этого всем один только вред. Как бы то ни было в одной рекламно-но востной статье я увидел, что на али предлагают умную колонку Xiaomi Mi AI Speaker мощностью 12 Вт за 3 680 рублей с марусей от mail.ru внутри. Это дешевле, чем Яндекс станция мини. Посмотрел - вроде у маруси есть API, думаю надо брать - там разберемся.

Что умеет маруся как умная колонка - играет музыку с VK, управляет видео с Wink по подписке VK Combo за 169 руб./мес, есть поддержка некоторых умных домов. Поддерживает умный дом Xiaomi, но только в русском регионе - обычно для Xiaomi все выбирает регион китай потому что для китая число поддерживаемых устройств гораздо больше. Есть поддержка Yeelight, Roborock. Может позвонить на аккаунт VK или на другую марусю. Развлечения - типа новости, анекдоты, время, таймер, будильник, поиск. Позвонить с моего телефона не может, хотя колонка и может подключаться к телефону как bluetooth гарнитура. Ну в общем с самим телефоном особо не взаимодействует. DLNA нет. С календарем не взаимодействует, почту проверяет только в аккаунте mail.ru. Может вызвать такси с сервиса Ситимобил. Есть API для разработки скилов. Есть пуши для скилов, но если я понимаю все правильно, то колонку нельзя заставить что-то сказать "просто так" - например по событию от умного дома.

Но я то покупал колонку для того, чтобы не брать с полки телефон, когда надо выключить свет в спальне. Оказалось, что у маруси есть кастомная поддержка умного дома через Web Hooks (пункт DIY Hooks в списке умных домов маруси). Добавили ее в канун 2021 года. Поддерживает только включение-выключение. Этой фиче явно не уделяется много внимания - ждать чего-то нового не стоит - например в android приложении пункт DIY Hooks немного глючит. Есть возможность задать свои Http Headers (например для авторизации). Есть возможность передать json в теле запроса. Http запрос отправляется с внешнего адреса, поэтому для интеграции надо будет выставить web интерфейс home assistant в интернет. Не всегда обязательно иметь для этого белый IP - например, если у вас роутер ZyXel, то можно использовать их сервис KeenDNS.

Мой умный дом работает в основном под управлением HomeAssistant. И Mi Home немножко. HomeAssistant не создан для простых людей - чтобы им пользоваться нужны некоторые специальные навыки и знания. Поэтому и инструкции особо не нужны - народ догадливый - сам разберется. Но я все же оставлю это здесь, для тех, кто еще размышляет о покупке маруси или установке home assistant.

Для доступа к сервисам Home Assistant через web нам понадобится долгосрочный токен доступа. Идем в HomeAssistant - левая колонка навигации, самый низ, имя или иконка пользователя, жмем. В открывшейся странице "Профиль" пункт "Долгосрочные токены доступа" - генерируем и сохраняем.



Затем идем на сайт с описанием HomeAssistant web API и вясняем, что нам надо отправить POST запрос на URL `/api/services/<domain>/<service>`.

Чтобы понять какой сервис нам надо дернуть идем в HomeAssistant - Панель разработчика - Службы - ищем нужную службу и нужный объект (цель). Я выбрал сервис "Выключатель: Turn on (switch.turn_on)", цель - "пространство Bedroom". Можно протестировать сервис нажав "Вызвать службу" и убедиться, что он действительно делает то, что вы от него ожидаете. После этого жмем "Перейти в режим Yaml" и смотрим что там.



Получился вот такой YAML:


Исходя из этого нам надо сделать такой http запрос:

URL: https://<hass_addr>/api/services/switch/turn_on

Http Headers: 

  • Authorization: Bearer $LONG_LIVING_TOKEN
  • Content-Type: application/json, 

Body (payload): {"area_id": "bedroom"}

Можно попробовать выполнить этот запрос через curl и убедиться, что все работает.

```

LONG_LIVING_TOKEN='...'

HASS_ADDR='...'

curl -X POST -H "Authorization: Bearer $LONG_LIVING_TOKEN" \

  -H "Content-Type: application/json" \

  -d '{"area_id": "bedroom"}' \

  "https://${HASS_ADDR}/api/services/switch/turn_off"

```


Все, мы готовы к настройке маруси. Готовим yaml файл со списком устройств и http запросами, которые необходимо вызвать для включения и выключения устройства. Вот пример от разработчиков маруси - yaml файл, который разработчики маруси отображают в приложении. Вот список типов устройств. Думаю тип устройства нужен, чтобы маруся лучше могла распознать действие. Ну, например, свет можно включить, а кофеварку запустить.



Свой yaml файл для включения и выключения света в спальне я выложил на GitHub, без LongLivingToken и без адреса сервера - моя вера в людей не стопроцентна.

Вам надо создать свой yaml файл на основе примеров, вставить туда адрес своего доступного из интернета Home Assistant сервера и свой Long Living Token. Адреса типа 192.168.х.х или 10.х.х.х не подойдут! Затем этот файл надо как-то передать на телефон и в процессе настройки скопировать в буфер обмена. В android приложении есть кнопка загрузить файл, но она не работает.

Заходим в приложение маруся на смартфоне, настройки, выбираем "Умный дом", листаем список умных домов вниз, выбираем "DIY Hooks", жмем "Войти в VK", выбираем "Умный дом загрузка описания формата YAML или JSON" и вставляем наш YAML файл и жмем "Сохранить".


Далее следует шаманство. После сохранения описания оно появляется в списке, но его можно из списка удалить. Нам так не надо, нам надо выбрать. Чтобы кнопка действия с описанием стала "Выбрать" нужно подшаманить - я жал назад до выхода на экран со списком умных домов, опять выбирал "DIY Hooks", жал (или не жал) "Войти в VK" и видел список, в котором кнопка была "Выбрать". Возможно тут придется поэкспериментировать. Возможно это проблема Android, в iOS приложении все хорошо. Нажимаем кнопку "выбрать" на нашем созданном описании. И все, после этого можно пользоваться. Просто говорим "маруся включи свет в спальне".

Нормального обновления JSON описания устройств я не увидел. Чтобы обновить (например для добавления нового устройства) - я отключаю в марусе Умный дом DIY Hooks (маруся - настройки - "Умный дом" - "DIY Hooks" - кнопка "Отключить сервис"), потом заново его настраиваю. Но старые настройки не исчезают - можно откатиться к предыдущей работающей конфигурации.
Для настройки нескольких устройств надо просто все устройства добавить в список. Когда будете копипастить, не забудьте исправить id устройства.
Удачной автоматизации.
Стоит напомнить, что марусин Умный дом DIY Hooks позволяет включать и выключать устройства. Что-то более сложное, включающее обратное взаимодействие - например "маруся, скажи какая температура в спальне" он сделать не может. Для этого надо писать полноценный скилл. Но это уже совсем другая история.

Комментариев нет:

Отправить комментарий