К сожалению, телевизор у меня не "умный" ни разу, в нём не то, что бы 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. Я вынес кнопки в отдельную панель и сейчас моя карточка выглядит так:
Подключение 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 и добавляем стандартную карточку:
Или кастомный плагин:
Плейлисты в Kodi
Зачем вообще городить Kodi отдельно от общего Android TV? Плагин для Kodi умеет больше, чем общий плагин для управления боксами - он определяет источник медиа (музыка, сериалы, фильмы), показывает обложки, позволяет синхронизировать медиатеку из HomeAssistant и всякое другое.
Мне в первую очередь от плагина нужен был запуск музыки из панели управления, чтобы не вставать лишний раз в поисках пульта. Делается это с помощью сервиса media_player.play_media.
Поскольку плейлистов у меня организовано никогда не было а музыку я запускал исключительно по исполнителю, то первым моим шагом было создание отдельных папок с исполнителями на диске, откуда играется музыка и вызов сервиса play_media с указанием папки, откуда играть. У такого подхода есть существенный минус - при запуске проигрывателя сначала вся папка сканируется и собирается плейлист, что создаёт большую задержку между нажатием кнопки и, собственно, музыкой.
Я отказался от такого подхода и решил собрать смарт-плейлисты. Вкратце: смарт-плейлисты в Kodi - это фильтры, с помощью которых из всей медиатеки выбирается нужная музыка, например, по исполнителю, по ключевым словам или по любому другому параметру. Недостаток смарт-плейлистов тот же, что и при проигрывании папки с музыкой - чем больше музыки попадает под фильтры, тем больше времени нужно для подготовки плейлиста при каждом запуске.
В итоге я пришёл к старым добрым традиционным плейлистам, в которые я занёс самостоятельно все нужные мне композиции и сохранил в формате m3u.
Подход для запуска любого их вышеперечисленных способов одинаковый: я создал объект input_select c перечнем всех плейлистов и при выборе одного из них передавал название плейлиста в автоматизацию в виде переменной.
Объект input_select создаётся в меню Настройки - Вспомогательное - Выпадающий список:
Задаём название, иконку и добавляем опции - названия плейлистов. Важно! Плейлисты надо задавать именно в том виде, в каком они хранятся в хранилище Kodi. Одна неверная буква или лишний пробел - и плейлист запускаться не будет.
Следующий этап: создать автоматизацию запуска плейлиста при выборе одного из значений (в 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"
Теперь достаточно добавить на панель в любое удобное место наш выпадающий список:
И готово, при выборе плейлиста он запускается. Аналогичным способом можно запускать любое медиа из файла (подставить нужные пути в 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
Поскольку у меня пока управлять особо нечем, то режим "кино" подразумевает просто убавление яркости потолочного светильника до минимума. При первой же возможности куплю торшер и переделаю автоматизацию на выключение потолочного светильника и включение торшера. Ну или ещё чего-нибудь.
На этом всё. Шер, лайк, подписки, комментарии. Бложик я веду не ради монетизации, но всё равно приятно знать, что кто-то читает и интересуется.