Здравейте! В днешната статия ще опиша интеграция на EON TV в HomeAssistant.
За мен телевизорът е важна част от ежедневието. Не че съм голям телеман, но обичам нещо да ми говори, докато си кодя.
Преди години бях на кабелна телевизия и бях автоматизирал всичко, благодарение на BroadLink RM mini 3 и IR команди. Пусках, спирах телевизора, сменях канали, усилвах и намалявах звука. Използвах Home Assistant и мобилния си телефон като дистанционно. Поставих по еднин BroadLink RM mini 3 във всяка стая, за да управлявам всички телевизори вкъщи. След това преминах на телевизията на Виваком. За нея също изградих автоматизациите си на базата на BroadLink RM mini 3, тъй като самите устройства на Виваком работеха чрез IR команди.
Всичко работеше нормално, но след изтичане на договора ми и силната медийна кампания, реших да премина на EON TV. Поинтересувах се допълнително и се оказа, че EON TV Box-а си е стандартен TV Box с AndroidTV. Точният модел на боксовете е SDOTT0202. След като бях убеден, че има интеграция на Home Assistant и AndroidTV, не се и замислих да подпиша новия си договор.
След седмица ми доставиха боксовете и новата телевизия тръгна. Качеството определено е по-добро, както и допълнителните функции. Въпреки всичко се започна с проблемите.
Недостатъци
Като основен недостатък се яви кабелната връзка между рутера и боксовете. Когато дойдоха момчетата за монтажа, надупчиха всичко с такер и опънаха доста кабели, до всеки телевизор по един.
Докато монтираха, разглеждах един от боксовете. На самия бокс имаше индикатор за WiFi. Попитах защо не ми включат боксовете през WiFi-а, отговорът беше, че самият бокс няма WiFi. Интересно!!!
Веднага щом си тръгнаха, се заех да проверя това и се оказа, че самите боксове си имат WiFi, но е заключен софтуерно. Как се активира WiFi-a на EON TV бокс, можете да прочетете в статията „Активиране на WiFi на EON TV Box“ (скоро).
Следващият недостатък беше дистанционното. Дистанционното на EON не е IR, то работи през Bluetooth. Това означава, че тук няма да мога да използвам BroadLink RM mini 3, който имам. Това може би не е чак толкова голям проблем, защото AndroidTV предлага пълна интеграция с Home Assistant.
Последният недостатък, който открих, беше, че дистанционното е пряко обвързано с конкретен бокс. Т.е., не можете да вземете дистанционното от едната стая и да го ползвате в другата. При мен това е проблем, тъй като децата постоянно ги разнасят из стаите(може би сега ще престанат). Това е и основната причината да ползвам телефона си като дистанционно.
Изисквания към интеграция на EON TV в HomeAssistant
Основните ми изисквания относно интеграцията бяха да мога да командвам EON TV през Home Assistant вместо през дистанционното му. Исках да мога да:
- Усилвам и намалява звука с опция mute
- Сменям каналите
- Превключвам канали чрез бутоните с номерата
- Стартирам различни apps на бокса
- Контролирам самия бокс, както и от дистанционното – бутони нагоре, надолу, ляво, дясно, ок, back и home
- И последно разбира се, да мога да го включвам и изключвам
На базата на тези опции бих могъл да изградя и доста автоматизации. Например, стартиране на телевизора и превключване на каналите, за да гледам вечерните новини. Да направя автоматизация, чрез която, ако детето е гледало повече от два часа, телевизорът да се изключва и др.
Подготовка на ADB сървър
За да изградим интеграция на EON TV в Home Assistant, е необходимо първо да си инсталираме ADB (Android Debug Bridge) сървър. Идеята е той да се свързва с AndroidTV устройството и да му подава команди. Какви команди ще подаде ADB сървъра към AndroidTV устройството решаваме ние, като подаваме командите от Home Assistant. От своя страна, ако е необходимо, ADB връща към Home Assistant резултата от изпълнението на дадена команда (ако има резултат).
Моят Home Assistant е инсталиран върху Lenovo ThinkCenter M73 с Debian 10. Върху Debian 10-ката са разпънати контейнери и върху тях – Home Assistant. Машинката е слаба, но се държи по-добре от Raspbery-то. Реших, че ще е най-добре, ако ADB сървъра ми е инсталиран върху същата машина, върху която и Home Assistant. Така всичко се намира на едно място и е по-лесно за поддръжка.
Тук е важно да отбележа, че за ADB сървър можем да използваме всяка машина в мрежата ни, без начение дали е Windows, Linux, Mac, стига Home Assistant да я вижда.
Инсталиране на ADB сървър
Първо е необходимо да се свържем чрез SSH към нашата машина, върху която искаме да инсталираме ADB сървъра. В моя случай това е Debian 10, върху който върви и самият Home Assistant. За връзка към сървъра използвам Putty. Важно е да отбележа, че инсталацията се прави върху Debian 10, а не върху самия контейнер на Home Assistant.
След като сме установили връзка с машината, на която ще инсталираме ADB сървъра, въвеждаме следната команда(за Debian 10, за други ОС проверете в google):
sudo apt install android-tools-adb android-tools-fastboot
След това стартира инсталационният процес. На няколко пъти ще иска потвърждение с Y.
След като инсталацията завърши, чрез команда adb –help може да проверите дали всичко е наред. След изпълнение на командата трябва да видите резултат, подобен на този:
Ако всичко дотук е минало както трябва, можем да продължим с настройката на EON TV боксовете.
Подготовка на EON TV Box с AndroidTV
В момента имаме инсталиран ADB сървър, но той няма с кого да си комуникира. За да направим възможна комуникацията между ADB сървъра и AndroidTV бокса, е необходимо да активираме Development mode-a на AndroidTV бокса. Това става по следния начин:
- Влизаме в настройките на устройството (EON TV box-а)
- От менюто избираме опция „Предпочитания за устройството“
- От новото меню избираме опция „Информация“
- В следващото меню превъртаме до последната опция „Версия“
- Сега натискаме 7 пъти бутона ОК на дистанционното, след 3-тото натискане на екрана ще се появи брояч с надпис „Напът сте да станете програмист, остават ви още 4“
- След 7-мото натискане на бутона, режим Development mode е активиран
- Връщаме се в предходното меню с бутона Bаck
- В него скролваме до опция „Опции на програмиста“
- В новото меню скролваме до опция „През USB“ и я активираме
- Връщаме се в основното меню и от него избираме опция „Мрежа и интернет“
- В новото меню ще видим IP-адреса на нашето EON устройство
- Накрая излизаме и се връщаме в основния екран на EON
След като активирахме Development mode на EON TV Box-овете, можем да проверим връзката между тях и ADB сървъра. За целта отварям нова сесия към машината на, която е ADB (преди това затворете всички останали отворени сесии). В SSH-a въвеждаме команда adb devices. Ако всичко е наред, трябва да получите списък с всичките Android устройства с активиран Development mode. При мен това са два EON TV бокса, съответно с IP-та 192.168.1.118 и 192.168.1.119.
Дотук виждаме устройствата, а сега можем да опитаме да се свържем към тях. За целта въвеждаме команда adb connect 192.168.1.118, като не забравяйте да смените с вашето IP. В резултат трябва да получите нещо подобно:
Ако връзката с бокса се установи безпроблемно, на екрана на телевизора ще получите съобщение дали да разрешите достъпа на ADB до AndroidTV устройството. Необходимо е да потвърдите.
Сега може да преминем към интеграция на EON TV в HomeAssistant.
Интеграция на EON TV в HomeAssistant
Първо трябва да активираме AndroidTV интеграцията в Home Assistant. За целта отваряме конфигурационния файл на Home Assistant – configuration.yaml и въвеждаме следната конфигурация:
media_player:
- platform: androidtv
name: EON_livingroom_atv
host: 192.168.1.118
adb_server_ip: 192.168.1.9
exclude_unnamed_apps: true
- platform: androidtv
name: EON_badroom_atv
host: 192.168.1.119
adb_server_ip: 192.168.1.9
exclude_unnamed_apps: true
След това записваме конфигурацията и рестартираме Home Assistant. Тук въвеждаме конфигурация за два бокса, съответно с IP-та 192.68.1.118 и 192.168.1.119. Параметърът adb_server_ip определя кой е ADB сървъра, в моя случаи е с IP – 192.168.1.9. По този начин Home Assistant ще се обърне към ADB сървъра и ще му подаде определена команда за определено устройство. ADB сървърът ще се свърже с конкретното AndroidTV устройство и ще изпълни командата като вземе резултата от нея, ако има такъв. Ако е необходимо и ако има резултат от изпълнението на командата, ADB сървъра ще я препрати към Home Assistant. След рестарта ще забележите, че Home Assistant е открил нови устройства и е добавил нова интеграция за AndroidTV.
Отваряме Конфигурация -> Интеграции, след което кликаме на бутона „Конфигуриране”.
Ще се отвори прозорче, в което е необходимо да въведем IP адреса на нашия EON TV бокс. Потвърждаваме с бутон „Изпращане“.
След това ще се отвори прозорец, който ще ни потвърди, че устройството е добавено успешно и можем да определим в коя зона се намира. Накрая приключваме с бутон „Край“.
Тази процедура повтаряме са всеки бокс.
На базата на тази интеграция имаме стандартен player, чрез който имаме достъп до следните функции на EON TV:
- Усилване и намаляване на звука, плюс опция mute
- Включване и изключване на самия EON TV Box
- Зареждане на приложения (автоматично открива няколко, като YouTube, Spotify и др., но не и приложението на EON)
- Бутони за превъртане напред и назад
- Путони play/stop
Всичко това е чудесно, но не покрива изискванията ми напълно, така че се захванах първо с това да го накарам да стартира определени приложения, които са инсталирани върху бокса.
Стартиране на приложения
Основният проблем е, че искам да мога да стартирам най-вече приложението на EON от Home Assistant. Можете да изпълните следния скрипт в „Инструменти за разработчици“, за да стартирате приложението на EON:
service: media_player.select_source
data:
source: com.ug.eon.android.tv
target:
entity_id: media_player.android_tv_192_168_1_119
Не забравяйте да смените android_tv_192_168_1_119 с вашия плейър.
За да стартирате други инсталирани на бокса приложения, е необходимо да замените com.ug.eon.android.tv с ID-то на приложението, което искате да стартирате. За да научите ID-то на дадено приложение, вижте следното видео:
Управление на EON TV Box
Следващата цел, която си бях поставил, беше да мога да управлявам целия бокс през Home Assistant без да ползвам неговото дистанционно. За да направя това, трябва да изпращам команди до бокса, които отговарят на съответните бутони на дистанционното. Например, този скрипт изпълнява натискането на бутона „HOME“ от дистанционното:
service: androidtv.adb_command
data:
command: HOME
target:
entity_id: media_player.android_tv_192_168_1_118
Оставам списък на командите, които работят безпроблемно:
- Бутон – CENTER / OK
- Бутон – BACK
- Бутон – DOWN
- Бутон – LEFT
- Бутон – RIGHT
- Бутон – VOLUME_UP
- Бутон – VOLUME_DOWN
- Бутон – MUTE
Чрез тези команди бихме могли да осъществим базов контрол над EON TV бокса. За да изпълните друга команда, заменете HOME от примера по-горе със стойност от списъка. За всяка команда можем да създадем скрипт и да изградим Lovelace панел за управлевение на EON TV под формата на дистанционно.
Отстраняване на проблеми
И тук всичко е много добре, но се сблъсках с един проблем. Обичам вечер да гледам новините по 18 канал. Исках да изградя автоматизация, която да прави следното:
- В 20:00 часа ми се праща нотификация на телефона с въпрос дали желая да гледам вечерните новини и в коя стая. – Ок
- След като потвърдя и избера стаята, ако телевизорът е изключен, се включва. – Ок
- Ако EON TV бокса е изключен, се включва. – Ок
- Ако е необходимо, се променят настройките на HDMI. – Ок
- Стартира се приложението на EON. – Ок
- Превключва се на 18 канал – ПРОБЛЕМ
Оказа се, че всички стандартни команди за AndroidTV, относно бутоните от 0 до 9, не работят с EON TV бокса. Затова се наложи да направя sniffing на командите на дистанционното. Оказа се доста просто упражнение. Първо отворете „Инструменти за разработчици” от основното меню на Home Assistant. След това изберете „Услуги“ от горните табове. В полето „Услуга” изберете „Android TV: Learn sendevent”. В полето „Цели” изберете устройството, което искате да sniff-ите. На края потвърдете с бутона „Call service”.
Сега задръжте за 8 секунди бутона на дистанционното на EON, който ви интересува. След 8-мата секунда ще получите нотификация, която съдържа командата, изпратена към бокса.
На база тези команди можем да изпълним следния скрипт, който да повтаря командата:
service: androidtv.adb_command
target:
entity_id: media_player.android_tv_192_168_1_118
data:
command: "sendevent /dev/input/event3 4 4 458782 && sendevent /dev/input/event3 1 2 1 && sendevent /dev/input/event3 0 0 0"
Този скрипт ще изпрати към EON бокса команда, която да превключи на канал 1. Чрез комбинацията на няколко такива скрипта, мога да превключвам каналите чрез бутоните.
Оставям списък с изчетените команди на цялото дистанционно:
Команди за бутоните от 0 до 9
- Бутон – 1 – ‘sendevent /dev/input/event3 4 4 458782 && sendevent /dev/input/event3 1 2 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 2 – ‘sendevent /dev/input/event3 4 4 458783 && sendevent /dev/input/event3 1 3 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 3 – ‘sendevent /dev/input/event3 4 4 458784 && sendevent /dev/input/event3 1 4 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 4 – ‘sendevent /dev/input/event3 4 4 458785 && sendevent /dev/input/event3 1 5 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 5 – ‘sendevent /dev/input/event3 4 4 458786 && sendevent /dev/input/event3 1 6 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 6 – ‘sendevent /dev/input/event3 4 4 458787 && sendevent /dev/input/event3 1 7 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 7 – ‘sendevent /dev/input/event3 4 4 458788 && sendevent /dev/input/event3 1 8 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 8 – ‘sendevent /dev/input/event3 4 4 458789 && sendevent /dev/input/event3 1 9 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 9 – ‘sendevent /dev/input/event3 4 4 458790 && sendevent /dev/input/event3 1 10 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – 0 – ‘sendevent /dev/input/event3 4 4 458791 && sendevent /dev/input/event3 1 11 1 && sendevent /dev/input/event3 0 0 0’
Специфични за дистанционното бутони
- Бутон – Приложения – ‘sendevent /dev/input/event3 4 4 786850 && sendevent /dev/input/event3 1 580 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Видеотека – ‘sendevent /dev/input/event3 4 4 786565 && sendevent /dev/input/event3 1 627 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Радио – ‘sendevent /dev/input/event3 4 4 786579 && sendevent /dev/input/event3 1 386 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – TV програма – ‘sendevent /dev/input/event3 4 4 786573 && sendevent /dev/input/event3 1 362 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Профил – ‘sendevent /dev/input/event3 4 4 458818 && sendevent /dev/input/event3 1 67 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Гласово търсене – ‘sendevent /dev/input/event3 4 4 786977 && sendevent /dev/input/event3 1 217 1 && sendevent /dev/input/event3 0 0 0 && sendevent /dev/input/event3 4 4 786977 && sendevent /dev/input/event3 1 217 0 && sendevent /dev/input/event3 0 0 0 && sendevent /dev/input/event4 1 201 1 && sendevent /dev/input/event4 1 201 0 && sendevent /dev/input/event4 0 0 0’
- Бутон – Превъртане назад – ‘sendevent /dev/input/event3 4 4 786612 && sendevent /dev/input/event3 1 168 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Превъртане напред – ‘sendevent /dev/input/event3 4 4 786611 && sendevent /dev/input/event3 1 208 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Play/Pause – ‘sendevent /dev/input/event3 4 4 786637 && sendevent /dev/input/event3 1 164 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Канали нагоре – ‘sendevent /dev/input/event3 4 4 786588 && sendevent /dev/input/event3 1 402 1 && sendevent /dev/input/event3 0 0 0’
- Бутон – Канали на долу – sendevent /dev/input/event3 4 4 786589 && sendevent /dev/input/event3 1 403 1 && sendevent /dev/input/event3 0 0 0′
Потребителски интерфейс
След като имах всички команди за дистанционното на EON TV бокса, създадох скрипт за всеки един бутон. На базата на тези скриптове изградих следното табло в Home Assistant, с което да управлявам EON бокса:
Сега вече не ме интересува къде децата са заврели дистанционното. Аз си управлявам EON-а през телефона – даже има и рима.
Това е всичко, с което мога да ви бъда полезен по темата – Интеграция на EON TV в HomeAssistant. Ще се радвам на вашите отзиви и мнения в коментарите.
Силно съм заинтересуван от написаното, може ли връзка с Вас за допълнителни впроси?