Как я уже говорил раньше, я считал рекламу главной проблемой капитализма и поэтому постоянно на нее покупаюсь. На самом деле оказалось, что проблема капитализма в стагнирующем рынке - пока рынок растет от капитализма есть польза, как только рынок перестает расти капитализм превращается в олигополию и от этого всем один только вред. Как бы то ни было в одной рекламно-но востной статье я увидел, что на али предлагают умную колонку 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 позволяет только включать и выключать устройства. Что-то более сложное, включающее обратное взаимодействие - например "маруся, скажи какая температура в спальне" он сделать не может. Для этого надо писать полноценный скилл. Но это уже совсем другая история.

Комментарии (6)


  1. Loggus66
    03.02.2022 17:25
    +3

    Но это всё равно требует взаимодействия с сервисами мэйла. Вот ежели, скажем, от умной колонки оставались бы задействованы только динамик и микрофон, а за распознаванием речи HA обращался бы на внутренний API в локалке или любой сторонний сервис - было бы интереснее.

    Пока я освоил только "говорильную" часть через HA путём обращения к Google TTS. Весело, но мало. Существует ли ПО распознавания речи для локального использования?


    1. mPolr
      03.02.2022 18:33
      +3

      Первая мысль после прочтения заголовка "Как подружить марусю и home assistant" - Но зачем?


    1. m0tral
      04.02.2022 02:19

      Зачем? Ведь ML используется для этого, если нужен уровень Алисы, Маруси, Алексы, вот когда TinyML дойдет до вменяемого уровня для speеch to text, а TTS и Алиса умеет нативно и "локально". Ну и что у Яндекс, что, как я понял и у Маруси, навыки это ужасный костыль, который сводит на нет все юзабилити


      1. kAIST
        04.02.2022 09:25

        У Алисы ТТS не идёт локально.


    1. Jury_78
      04.02.2022 10:27

      Существует ли ПО распознавания речи для локального использования?

      Так есть же Rhasspy.

      Я вот пытаюсь найти более простое - голосовые команды, но все попадается на основе ИИ.

      Может кто подскажет?


    1. endoftime
      05.02.2022 11:07

      Существует. Есть примеры для ha на 4 пда и иксбити.

      Сразу отмечу. Качество локального распознавания - никакое. Ресурсов нужно много. Так что пока для английского языка лучше всего Амазон (не Гугл). Для русского - Яндекс (особенно учитывая насколько у них уже продвинутые диалоги).