Найти тему
HASSStas: Рецепты HomeAssistant

Media Player: управляем SmartTV и Kodi через HomeAssistant

Оглавление

К сожалению, телевизор у меня не "умный" ни разу, в нём не то, что бы SmartTV, вообще никаких интерфейсов нет. Логичным шагом в своё время стала покупка ТВ-бокса с Android на борту. На бокс был установлен медиа-комбайн Kodi, установленный лончером по умолчанию, кроме которого, в общем-то, запускается только YouTube. Вот такой аскетизм.

И вот пришла пора всем этим рулить из HomeAssistant.

Подключение приставки на Android (AndroidTV)

Для управления медиасистемами в HomeAssistant предусмотрена штатная интеграция Media Player. Тем, у кого, например, Philips или Samsung - повезло больше, поскольку созданы отдельные компоненты под телевизоры этих марок, для всех остальных - есть штатная реализация Media Player под Android TV (которая, в общем-то, работает и с обычным Android).

Первое, что нам нужно для подключения - это знать IP-адрес нашей коробочки. Второе - убедиться, что с сервера, на котором крутится HomeAssistant, наша коробочка доступна и слушается через adb:

adb connect 192.168.1.123

Если сервер начнёт ругаться, что не знает команду adb - нужно поставить библиотеки. Для Ubuntu это выглядит так:

sudo apt-get install android-tools-adb

Если соединение прошло успешно - можно настраивать плагин (в configuration.yaml):

media_player:
- platform: androidtv
  host: !secret tvbox_ip
  adb_server_ip: 127.0.0.1
  name: TV BOX
  apps:
    "kodi": "Kodi"
    "com.liskovsoft.videomanager": "YouTube"

, здесь tvbox_ip - адрес нашей коробочки, adb_server_ip - адрес сервера, с которого мы подключаемся к боксу через adb, name - название устройства, которое будет отображаться в HomeAssistant, apps - список приложений, названия которых будут отображаться в карточке Media Player (у меня в качестве YouTube используется приложение Smart YouTube TV с телевизионным интерфейсом). Список apps нужен в первую очередь для того, чтобы превратить длинные наименования приложений в короткие и понятные названия, которыми проще будет оперировать при управлении и создании автоматизаций.

После создания конфигурации и перезапуска HomeAssistant можно добавить карточку MediaPlayer к себе на панель управления:

Кроме стандартной карточки проигрывателя есть ещё кастомный плагин Mini Media Player с широкими возможностями. Эти возможности и примеры карточек можно увидеть на странице плагина на GitHub. Я вынес кнопки в отдельную панель и сейчас моя карточка выглядит так:

-2

Подключение Kodi

Интеграция Media Player, кроме управления устройствами, имеет возможность управлять отдельными распространёнными приложениями, : iTunes, Spotify, Plex или Kodi. Все виды интеграций можно посмотреть тут, меня же интересует (пока что) только Kodi.

Чтобы подключить Kodi, нужно активировать в настройках Kodi доступ через веб-интерфейс, а затем прописать доступ в configuration.yaml:

media_player:
- platform: kodi
  host: !secret kodi_ip
  port: !secret kodi_port

Перезапускаем HomeAssistant и добавляем стандартную карточку:

-3

Или кастомный плагин:

-4

Плейлисты в Kodi

Зачем вообще городить Kodi отдельно от общего Android TV? Плагин для Kodi умеет больше, чем общий плагин для управления боксами - он определяет источник медиа (музыка, сериалы, фильмы), показывает обложки, позволяет синхронизировать медиатеку из HomeAssistant и всякое другое.

Мне в первую очередь от плагина нужен был запуск музыки из панели управления, чтобы не вставать лишний раз в поисках пульта. Делается это с помощью сервиса media_player.play_media.

Поскольку плейлистов у меня организовано никогда не было а музыку я запускал исключительно по исполнителю, то первым моим шагом было создание отдельных папок с исполнителями на диске, откуда играется музыка и вызов сервиса play_media с указанием папки, откуда играть. У такого подхода есть существенный минус - при запуске проигрывателя сначала вся папка сканируется и собирается плейлист, что создаёт большую задержку между нажатием кнопки и, собственно, музыкой.

Я отказался от такого подхода и решил собрать смарт-плейлисты. Вкратце: смарт-плейлисты в Kodi - это фильтры, с помощью которых из всей медиатеки выбирается нужная музыка, например, по исполнителю, по ключевым словам или по любому другому параметру. Недостаток смарт-плейлистов тот же, что и при проигрывании папки с музыкой - чем больше музыки попадает под фильтры, тем больше времени нужно для подготовки плейлиста при каждом запуске.

В итоге я пришёл к старым добрым традиционным плейлистам, в которые я занёс самостоятельно все нужные мне композиции и сохранил в формате m3u.

Подход для запуска любого их вышеперечисленных способов одинаковый: я создал объект input_select c перечнем всех плейлистов и при выборе одного из них передавал название плейлиста в автоматизацию в виде переменной.

Объект input_select создаётся в меню Настройки - Вспомогательное - Выпадающий список:

-5

Задаём название, иконку и добавляем опции - названия плейлистов. Важно! Плейлисты надо задавать именно в том виде, в каком они хранятся в хранилище Kodi. Одна неверная буква или лишний пробел - и плейлист запускаться не будет.

-6

Следующий этап: создать автоматизацию запуска плейлиста при выборе одного из значений (в automations.yaml):

- alias: Играть
  platform: state
    entity_id: input_select.pleilist
action:
service: media_player.play_media
data_template:
entity_id: media_player.kodi
media_content_type: DIRECTORY
media_content_id: "special://profile/playlists/music/{{ states('input_select.pleilist') }}.m3u"

Теперь достаточно добавить на панель в любое удобное место наш выпадающий список:

-7

И готово, при выборе плейлиста он запускается. Аналогичным способом можно запускать любое медиа из файла (подставить нужные пути в media_content_id) или отдельными методами Kodi.

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

Автоматизация на основе контента Kodi

Ещё одна причина, по которой стоит отдельно настроить Kodi, если вы его используете - определение типа воспроизведения для создания автоматизации. Например, включение интимного освещения при запуске кино или что-нибудь ещё при включении музыки.

Моя автоматизация для режима "кино" (automations.yaml):

- alias: Время для фильма
  trigger:
  - platform: state
    entity_id: media_player.kodi
    to: 'playing'
  condition:
  - condition: state
    state: 'below_horizon'
  - condition: or
    conditions:
    - condition: template
      value_template: '{{ states.media_player.kodi.attributes.media_content_type == "tvshow" }}'
    - condition: template
      value_template: '{{ states.media_player.kodi.attributes.media_content_type == "movie" }}'
  action:
  - service: script.cinema

Тут самое сложное - это разобраться с условиями (conditions). Триггер срабатывает, когда состояние media_player.kodi переходит в playing и выполнены условия: солнце за горизонтом (зачем нам свет включать, если и так светло?) и (media_content_type = tvshow или media_content_type = movie). Условия в HomeAssistant записываются именно так, с этим ничего не поделать. Когда срабатывает триггер - запускается action, в моём случае заранее заданный скрипт (scripts.yaml):

sequence:
- service: remote.send_command
data:
entity_id: remote.broadlink
device: Ceiling
command: Darken
num_repeats: 10

Поскольку у меня пока управлять особо нечем, то режим "кино" подразумевает просто убавление яркости потолочного светильника до минимума. При первой же возможности куплю торшер и переделаю автоматизацию на выключение потолочного светильника и включение торшера. Ну или ещё чего-нибудь.

На этом всё. Шер, лайк, подписки, комментарии. Бложик я веду не ради монетизации, но всё равно приятно знать, что кто-то читает и интересуется.