Android TV BOX, интеграция в Home Assistant и Yandex Алису

13 апреля 2021, 14:30

В тематических чатах по Home Assistant ребята часто спрашивают об одних и тех же интеграциях, на портале есть статьи, но для новичков они написаны очень сложно и не понятно. Вот я и решил написать статью от лица новичка.
У меня  Android TV Box ZTE B866 (с прошивкой от МТС).

Начну:

  1. Нужно настроить ADB (аддон ADB - Android Debug Bridge больше не работает).
  2. Установить кастомный компонент Yandex_smart_home.

Зайдите в Home Assistant configuration.yaml и введите данные медиаплеера. 

media_player:
  - platform: androidtv
    name: AndroidBox  
    host: 192.168.1.1 # Тут должен быть IP вышей приставки

Теперь нужно настроить TV Box, а именно, открыть права разработчика.

1600x_image.png?1617965326
На моем TV Box нужно зайти в технические настройки (приставку предоставил МТС).
1600x_image.png?1617965326
Заходим в "Настройки устройства".
1600x_image.png?1617965326
"Об устройстве".
1600x_image.png?1617965401
Листаем вниз до "Сборка", после чего кликаем 8 раз, пока не появится надпись, что режим разработчика включен.
1600x_image.png?1617965400
Выходим в меню настройки устройства и листаем вниз до пункта "Для разработчика".
1600x_image.png?1617965402
Ищем пункт "Отладка по USB", включаем, оставляем как есть, переходим к настройки Home Assistant.

После того как откроете права разработчика, нужно перезагрузить Home Assistat.

1600x_image.png?1617971906

После успешно проделанных действий, у вас на TV BOX появится цифровой отпечаток RSA, ставим галочку "Всегда разрешать отладки." и нажимаем кнопку ОК.

На этом интеграция Androin TV BOX закончена, осталось привести все в божеский вид и подружиться Yandex Алисой.

1600x_image.png?1617988519

Для тех, у кого не настроен "ui-lovelace.yaml", компонент сразу появится во вкладке "Обзор". Для тех, у кого он настроен, его не будет в "Обзоре" и его необходимо добавить. 

Ниже будет код на добавление медиаплеера и функциональных кнопок в "ui-lovelace.yaml". Прежде чем добавить, надо настроить скрипт на функциональные кнопки, которые отсутствуют, а именно, кнопка вверх, вниз, влево, вправо и т.д. Все настройки взял на сайте Home Assistant // Android TV.

Основные функции, которые можно добавить в скрипт:

  • POWER
  • SLEEP
  • HOME
  • UP
  • DOWN

  • LEFT
  • RIGHT
  • CENTER
  • BACK
  • MENU

С дополнительными можно ознакомиться на GitHub. Так как у меня не получилось их победить, не буду о них писать, а просто оставлю ссылку на GitHub.

# scripts.yaml

box_home:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера  
        command: HOME
box_power:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: POWER  
box_sleep:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: SLEEP        
box_up:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: UP        
box_down:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: DOWN        
box_left:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: LEFT        
box_right:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера  
        command: RIGHT        
box_center:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: CENTER       
box_back:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера  
        command: BACK        
box_menu:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: MENU               
box_mute:
  sequence:
    - service: androidtv.adb_command
      data:
        entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
        command: MUTE               
kinopoisk: 
  sequence:
  - service: androidtv.adb_command
    entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
    data:
      command: am start -a android.intent.action.VIEW -d -n ru.kinopoisk.tv/ru.kinopoisk.tv.presentation.splash.SplashActivity
# scripts.yaml
hdbox: 
  sequence:
  - service: androidtv.adb_command
    entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
    data:
      command: am start -a android.intent.action.VIEW -d -n dkc.video.hdbox/com.dkc.fs.ui.activities.SplashActivity
# scripts.yaml
megogo: 
  sequence:
  - service: androidtv.adb_command
    entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
    data:
      command: am start -a android.intent.action.VIEW -d -n com.megogo.application/net.megogo.tv.main.MainActivity
# scripts.yaml
ivi: 
  sequence:
  - service: androidtv.adb_command
    entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
    data:
      command: am start -a android.intent.action.VIEW -d -n ru.ivi.client/ru.ivi.client.activity.MainActivity
# scripts.yaml
okko: 
  sequence:
  - service: androidtv.adb_command
    entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
    data:
      command: am start -a android.intent.action.VIEW -d -n tv.okko.androidtv/ru.okko.tv.app.presentation.RootActivity
# scripts.yaml
wink: 
  sequence:
  - service: androidtv.adb_command
    entity_id: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 
    data:
      command: am start -a android.intent.action.VIEW -d -n ru.rt.video.app.tv/com.rostelecom.zabava.ui.splash.SplashActivity

Скрипт для КиноПоиска и остальным сервисам мне помог сделать Даманин Леонид, за что ему огромное спасибо (как добавить остальные сервисы, я пока не знаю, как только раскрою эту тайну, напишу статью и добавлю ссылку).
Для TV Box сделал отдельный пульт для проверки функционирования кнопок в "ui-lovelace.yaml", перед интеграцией в  Yandex Алису.

1600x_image.png?1618209540
# ui-lovelace.yaml
title: Home Assistant - сервер
views:
- title:  Пульт
  cards:
    - type: vertical-stack
      title: Пульт
      cards: 
      - type: horizontal-stack
        cards:    
          - type: button 
            entity: script.box_power
            name: ' '
            icon: mdi:power
            tap_action:
              action: toggle 
          - type: button               
          - type: button 
            entity: script.box_sleep
            name: ' '            
            icon: mdi:sleep
            tap_action:
              action: toggle            
          - type: button 
            entity: script.box_menu
            name: ' '            
            icon: mdi:menu
            tap_action:
              action: toggle            
          - type: button 
            entity: script.box_home
            name: ' '            
            icon: mdi:home
            tap_action:
              action: toggle            
      - type: horizontal-stack
        cards:
          - type: button
          - type: button           
          - type: button 
            entity: script.box_up
            name: ' '            
            icon: mdi:arrow-up
            tap_action:            
              action: toggle             
          - type: button             
          - type: button             
      - type: horizontal-stack
        cards:
          - type: button 
            entity: script.box_mute
            name: ' '            
            icon: mdi:volume-off
            tap_action:
              action: toggle             
          - type: button 
            entity: script.box_left
            name: ' '            
            icon: mdi:arrow-left
            tap_action:
              action: toggle            
          - type: button 
            entity: script.box_center
            name: ' '            
            icon: mdi:pokeball
            tap_action:            
              action: toggle              
          - type: button 
            entity: script.box_right
            name: ' '            
            icon: mdi:arrow-right
            tap_action:
              action: toggle                
          - type: button 
            entity: script.kinopoisk
            name: 'Кинопоиск'
            icon: mdi:video-minus             
            tap_action:
              action: toggle              
      - type: horizontal-stack
        cards:            
          - type: button
          - type: button           
          - type: button 
            entity: script.box_down
            name: ' '            
            icon: mdi:arrow-down
            tap_action:
              action: toggle              
          - type: button             
          - type: button 
            entity: script.box_back
            name: ' '            
            icon: mdi:backspace
            tap_action:
              action: toggle              
      - type: horizontal-stack
        cards:  
           - type: media-control
             entity: media_player.AndroidBox # Это имя которое вы указали в настройках медеа плеера 

Для корректной интеграции в Yandex Алису, осталось добавить то, что не будет отображаться, и то, что будет.

- exclude_entities отвечает за то, что не будет отображаться.
- entity_config отвечает за то, что отображается.

В исключение желательно добавить такие скрипты:

- script.box_power - Включение 
 - script.box_sleep - Сон
 - script.box_menu - Меню (на ваше усмотрение)
 - script.box_home - Домой (на ваше усмотрение)
 - script.box_mute - Отключить звук

Включение приставки, сон и отключение звука будут уже автоматически добавлены в медиаплеер, не вижу смысла их дублировать.

Добавляем нужное в "configuration.yaml" и перезагружаем Home Assistant.

yandex_smart_home:
  filter:
    exclude_entities: # Скрипты которы не отображаются в Yandex Алисе
      - script.box_power
      - script.box_sleep
      - script.box_menu
      - script.box_home
      - script.box_mute
        
  entity_config: # Скрипты которы отображаются в Yandex Алисе
     media_player.AndroidBox: # Это имя которое вы указали в настройках медеа плеера 
       name: Приставка
     script.box_up:
       name: Вверх
     script.box_down:  
       name: Вниз     
     script.box_left:
       name: Влево     
     script.box_right:
       name: Вправо 
     script.kinopoisk:
       name: Кинопоиск
     script.box_center:
       name: Применить  
     
1600x_image.png?1618216062

Последний шаг. Переходим в Yandex Алису и добавляем новые устройства.

1600x_image.png?1618216062

Если у вас уже есть интеграция с Home Assistant, то нужно обновить список устройств, если нет - добавляем новые устройства.

k02-3.jpg

После того, как устройства добавились, осталось назначить комнату.

1600x_image.png?1618218168

Выше писал, что не стоит добавлять кнопку включения, отключение звука, так как они появились автоматически.

Основные голосовые команды:

  • Включи приставку
  • Убери звук на приставке
  • Включи звук на приставке
  • Приостанови приставку
  • Сними приставку с паузы
  • Увеличь звук на приставке
  • Сделай приставку тише
  • Включи следующий канал на приставке

В команде слово "приставка" - это то, как вы назвали ваш TV Box.

Для тех, кто обратил внимание на функцию "Источник" и хочет ей воспользоваться, то мой дружеский совет - не стоит. Задумка у разработчиков хорошая, но сама функция неудобная в использовании, а именно, нужно проговаривать большую голосовую команду, чтобы все заработало.
Команды:
  • Поставь первый источник сигнала на приставке.
  • Поставь второй источник сигнала на приставке.
  • Поставь третий источник сигнала на приставке.
    И так далее.
Также медиаплеер, в удобном для него порядке, устанавливает источники.

media_player:
  - platform: androidtv
    name: AndroidBox
    host: 192.168.1.1 # Ваш IP приставки
    apps:
      mobi.azon: "Зона"
      YouTube: "YouTube"
      Play Store: "Play Store"
      Google Cast: "Google Cast"

После того, как вы добавили exclude_unnamed_apps в "configuration.yaml", нужно перезагрузить Home Assistant. После перезагрузки необходимо обновить список устройств в Yandex Алиса, функция станет доступной. Также в медиаплеере Home Assistant будет доступен список тех команд, которые вы прописали в  "configuration.yaml".



1600x_image.png?1618221013

Если будут вопросы, пишите в комментариях! Спасибо, что дочитали до конца =)


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Anton Stolov (soulassassino)
    Anton Stolov (soulassassino) 3 месяца назад

    Лойс, собственно это может выступать наглядным мануалом для интеграции любого Гугло-девайса. Например Xiaomi TV у меня интегрирован ровно точно так же.

    • Георгий Дьяконов (Dyakonovg)

      Антон, подскажите плиз, Вы научились открывать любую нужную вкладку в приложении через медиа плеер?

      • Anton Stolov (soulassassino)
        Anton Stolov (soulassassino) 3 месяца назад

        Привет! Не совсем понял, о каких вкладках идёт речь?

        • Георгий Дьяконов (Dyakonovg)

          например зайти открыть приложение и выбрать меню настроек

          • Anton Stolov (soulassassino)
            Anton Stolov (soulassassino) 3 месяца назад

            Ммм, нет таким не задавался, выбором задавался аппликухи, что бы был вменяемый список из уже существующих андроиндо-сервисов, что либо конкретно выбирать внутри аппы, честно сказать задача не стояла у меня. А приведи пример, какой кейс?

            • Георгий Дьяконов (Dyakonovg)
              Георгий Дьяконов (Dyakonovg) отредактировано 3 месяца назад

              есть приложение ru.mts.mtstv, внутри есть несколько кнопок(ссылок): главная, ТВ, фильмы, сериалы, приложения.
              я хочу без плясок с бубном зайти в ТВ и выбрать ТВ каналы.
              Сейчас у меня прописан скрипт который проходит по этому не легкому пути чтобы включить ТВ сигнал

              • Anton Stolov (soulassassino)
                Anton Stolov (soulassassino) 3 месяца назад

                Ну скрипт я так понимаю, через использования стрелок?

                • Георгий Дьяконов (Dyakonovg)

                  Это сделал, выглядит как костыль )) хочется по другому, но не понимаю как (

                  • Anton Stolov (soulassassino)
                    Anton Stolov (soulassassino) 3 месяца назад

                    Ну почему же костыль, прямое повторение мануальных действий. Тут вопрос в том, что я не уверен, что можно уже будучи в аппликухе, что-то слать ей, что бы она открывала или сеттинги или прочее, шорт-карты какие-то, хз, но не задавался вопросом, но твой вариант выглядит как на меня добротным, особенно если он отрабатывает на 100% всегда. ;)

              • (suanfa)
                (suanfa) 3 месяца назад

                Это точно возможно. Делал с dkc.video.hdbox Самому бы вспомнить как)))
                Команда похожа на те, что приведены выше am start ...
                У каждой странички есть свой путь, так сказать. В плей маркете есть специальные приложения для диагностики запросов внутри других приложений. (с его помощью поверх приложения отображаются строчки текста с данными). Узнав путь можно его в команду

                
                
                • Георгий Дьяконов (Dyakonovg)

                  Activity launcher, у меня не получилось запустить, если вспомните как делать, дайте знать, дополню этой информацией статью

                  • (suanfa)
                    (suanfa) 3 месяца назад

                    Нашел старые записи.

                    am start --user -3 -a android.intent.action.VIEW -d "hdvb://hd.vb/film/kinopoisk/?id=931677" dkc.video.hdbox
                    am start --user -3 -a android.intent.action.VIEW -d "hdvb://hd.vb/browse/9" dkc.video.hdbox
                    am start --user -3 -a android.intent.action.VIEW -d "hdvb://hd.vb/film/kinopoisk/?id=931677?tab=video" dkc.video.hdbox
                    am start --user -3 -a android.intent.action.VIEW -d "hdvb://hd.vb/search/?q=Dunkirk" dkc.video.hdbox
                    am start --user -3 -a android.intent.action.VIEW -d "hdvb://hd.vb/browse/1" dkc.video.hdbox
                    Вот такие команды работали с год назад.
                    Основывался на вот этой информации https://github.com/hdvbplayer/...

                    Если разберетесь как запустить  следующую серию из последнего просмотренного сериала буду очень рад ознакомиться с этой информацией))) Также хотелось бы сделать оповещения из приложения, если появляется новая серия (в той озвучке и с какого ресурса постоянно смотришь) сериала, который добавлен в избранное. Но это кажется более сложным в реализации.

  2. (zxcnick)
    (zxcnick) 3 месяца назад

    Ошибка в конфигурацииНАЧАТЬ ПРОВЕРКУ

    Component error: box_right - Integration 'box_right' not found.

    Component error: box_power - Integration 'box_power' not found.

    Component error: box_sleep - Integration 'box_sleep' not found.

    Component error: box_down - Integration 'box_down' not found.

    Component error: box_mute - Integration 'box_mute' not found.

    Component error: box_center - Integration 'box_center' not found.

    Component error: box_back - Integration 'box_back' not found.

    Component error: box_home - Integration 'box_home' not found.

    Component error: box_left - Integration 'box_left' not found.

    Component error: box_menu - Integration 'box_menu' not found.

    Component error: box_up - Integration 'box_up' not found.

  3. (DRON)
    (DRON) 3 месяца назад

    Добрый вечер. Подскажите, через adb у вас включается телевизор? 

    • Георгий Дьяконов (Dyakonovg)

      У меня Android tv zte b866

    • (iluhis)
      (iluhis) 3 месяца назад

      нужно настроить поддержку CEC HDMI на приставке чтоб приставка могла командровать вкл/выкл телеку. Там, если я не ошибаюсь, не все телеки и не все порты HDMI поддерживают это. У меня так подписан только один порт HDMI

  4. (DRON)
    (DRON) 3 месяца назад

    У них принципиальное отличие? 

    на сколько я смог понять, приставка/тв уходит в сон и не управляется через adb. Для себя нашёл единственное решение, ir пульт. Вдруг не туда смотрел)

    • Георгий Дьяконов (Dyakonovg)

      У меня спокойно приставка включается, не засыпает. Посмотрю завтра может есть спящий режим 
      Я свой глупый ТВ подключил через СЕС и теперь все одновременно включается.  

  5. (alazart)
    (alazart) отредактировано 3 месяца назад

    Я заморочился темой управления приставками через Алису и для ряда автоматизаций мне нужен статус приставки (idle, play, pause и др.) Но у каждого плеера могут быть свои особенности, которые можно прописать в секции state_detection_rules. Но для кинопоиска я так и не смог выяснить/подобрать корректные настройки. Приставка упорно считает, что видео paused, несмотря на то, что Кинопоиск воспроизводит видео. У кого-то получилось его побороть?

    Кстати, Xiaomi MiBox уходят в глубокий сон и не просыпаются, есть возможность не давать им засыпать (отключать экран) через меню разработчика, но это решение мне не нравится. А для автоматического переподключения adb после того как устройство проснётся (включится) прописал скрипт в cron.

    Ниже пример моего пульта

    1000x_image.jpg?1618387635
  6. (HD_Gluk)
    (HD_Gluk) 3 месяца назад

    А телеканалы так можно добавить на Android tv телевизоре, что бы скажем Алиса могла переключить из любого источника сразу на нужный телеканал? (Как это реализовано в родной интергации Алисы таликов LG)

  7. Алексей Скорятин (ixkor)
    Алексей Скорятин (ixkor) 3 месяца назад

    Эх, заходя сюда надеялся что Алису научились ставить внутрь самого Android TV, заместо гуглосистента. Но нет(

  8. Андрей Куликов (nightguest)
    Андрей Куликов (nightguest) 3 месяца назад

    This add-on is in a deprecated state!

    This add-on was created at the time, that the best solution for communicating with an Android device from Home Assistant, was using an Android Debug Bridge.

    However, the time has changed. Right now, the Home Assistant project recommends using built-in Python implementation, which renders this add-on obsolete.

    Additionally, this add-on will become problematic to maintain in the future, as the packages used are stalled.

    Therefore, this add-on is now deprecated.

  9. (viktor6)
    (viktor6) 3 месяца назад

    Тоже интересует как управлять тв каналами. Например хочу сделать будильник чтобы ТВ бок запускал приложение sweet tv  и включался определённый тв канал

  10. (Symbol)
    (Symbol) отредактировано 2 месяца назад

    Только собрался добавить свою тв приставку, как компонент ADB - Android Debug Bridge был полностью и безвозвратно удален с магазина НА, считается устаревшим решение по интеграции андроид устройств )). Жаль, отличная и интересная была статья.

  11. Сергей Шишкин (sergey.sh.vl@gmail.com)

    У меня xiaomi TV. Команды навигации и громкости отрабатываю, как и команда SLEEP, но после из сна телевизор уже не выходит командами. Кто-нибудь знает как побороть?

К списку статей

Устройства в материале

Xiaomi Mi TV Box 4S Pro

Производитель: Xiaomi
Заказать на:

Скидки для сообщества

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Тематические чаты

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
25 сентября 2020, 11:49
Сенсорный монитор для управления умным домом. Настройка и использование.
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
29 октября 2019, 07:59
Умный домофон на базе nodeMCU с прошивкой ESPHome.