Интеграция на EON TV в HomeAssistant

Интеграция на EON TV в HomeAssistant

Здравейте! В днешната статия ще опиша интеграция на 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, не се и замислих да подпиша новия си договор.

EON TV box

След седмица ми доставиха боксовете и новата телевизия тръгна. Качеството определено е по-добро, както и допълнителните функции. Въпреки всичко се започна с проблемите.

Недостатъци

Като основен недостатък се яви кабелната връзка между рутера и боксовете. Когато дойдоха момчетата за монтажа, надупчиха всичко с такер и опънаха доста кабели, до всеки телевизор по един.

Кабели
Кабели

Докато монтираха, разглеждах един от боксовете. На самия бокс имаше индикатор за WiFi. Попитах защо не ми включат боксовете през WiFi-а, отговорът беше, че самият бокс няма WiFi. Интересно!!!


EON TV Box 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 резултата от изпълнението на дадена команда (ако има резултат).


Интеграция на EON TV в HomeAssistant

Моят 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 сървър

След като сме установили връзка с машината, на която ще инсталираме ADB сървъра, въвеждаме следната команда(за Debian 10, за други ОС проверете в google):

sudo apt install android-tools-adb android-tools-fastboot

Инсталиране на ADB сървър
Инсталиране на ADB сървър

След това стартира инсталационният процес. На няколко пъти ще иска потвърждение с Y.


Инсталиране на ADB сървър

След като инсталацията завърши, чрез команда adb –help може да проверите дали всичко е наред. След изпълнение на командата трябва да видите резултат, подобен на този:


Инсталиране на ADB сървър

Ако всичко дотук е минало както трябва, можем да продължим с настройката на EON TV боксовете.

Подготовка на EON TV Box с AndroidTV

В момента имаме инсталиран ADB сървър, но той няма с кого да си комуникира. За да направим възможна комуникацията между ADB сървъра и AndroidTV бокса, е необходимо да активираме Development mode-a на AndroidTV бокса. Това става по следния начин:

  • Влизаме в настройките на устройството (EON TV box-а)

EON TV Box Settings

  • От менюто избираме опция „Предпочитания за устройството“

EON TV Box Settings

  • От новото меню избираме опция „Информация“

EON TV Box Settings

  • В следващото меню превъртаме до последната опция „Версия“

EON TV Box Settings

  • Сега натискаме 7 пъти бутона ОК на дистанционното, след 3-тото натискане на екрана ще се появи брояч с надпис „Напът сте да станете програмист, остават ви още 4“

EON TV Box Settings

  • След 7-мото натискане на бутона, режим Development mode е активиран

EON TV Box Settings

  • Връщаме се в предходното меню с бутона Bаck

EON TV Box Settings

  • В него скролваме до опция „Опции на програмиста“

EON TV Box Settings

  • В новото меню скролваме до опция „През USB“ и я активираме

EON TV Box Settings

  • Връщаме се в основното меню и от него избираме опция „Мрежа и интернет“

EON TV Box Settings

  • В новото меню ще видим IP-адреса на нашето EON устройство

EON TV Box Settings

  • Накрая излизаме и се връщаме в основния екран на 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.


EON TV Box и ADB сървър

Дотук виждаме устройствата, а сега можем да опитаме да се свържем към тях. За целта въвеждаме команда adb connect 192.168.1.118, като не забравяйте да смените с вашето IP. В резултат трябва да получите нещо подобно:


EON TV Box и ADB сървър

Ако връзката с бокса се установи безпроблемно, на екрана на телевизора ще получите съобщение дали да разрешите достъпа на ADB до AndroidTV устройството. Необходимо е да потвърдите.


EON TV Box Android TV

Сега може да преминем към интеграция на 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.


Интеграция на EON TV в HomeAssistant

Отваряме Конфигурация -> Интеграции, след което кликаме на бутона „Конфигуриране”.


Интеграция на EON TV в HomeAssistant

Ще се отвори прозорче, в което е необходимо да въведем IP адреса на нашия EON TV бокс. Потвърждаваме с бутон „Изпращане“.


Интеграция на EON TV в HomeAssistant

След това ще се отвори прозорец, който ще ни потвърди, че устройството е добавено успешно и можем да определим в коя зона се намира. Накрая приключваме с бутон „Край“.


Интеграция на EON TV в HomeAssistant

Тази процедура повтаряме са всеки бокс.

На базата на тази интеграция имаме стандартен 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 с вашия плейър.


Интеграция на EON TV в HomeAssistant

За да стартирате други инсталирани на бокса приложения, е необходимо да замените 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”.


Интеграция на EON TV в HomeAssistant

Сега задръжте за 8 секунди бутона на дистанционното на EON, който ви интересува. След 8-мата секунда ще получите нотификация, която съдържа командата, изпратена към бокса.


Интеграция на EON TV в HomeAssistant
Интеграция на EON TV в HomeAssistant

На база тези команди можем да изпълним следния скрипт, който да повтаря командата:

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 бокса:


HA EON TV
HA EON TV
HA EON TV

Сега вече не ме интересува къде децата са заврели дистанционното. Аз си управлявам EON-а през телефона – даже има и рима.

Това е всичко, с което мога да ви бъда полезен по темата – Интеграция на EON TV в HomeAssistant. Ще се радвам на вашите отзиви и мнения в коментарите.

Публикувано

One thought on “Интеграция на EON TV в HomeAssistant

  1. Силно съм заинтересуван от написаното, може ли връзка с Вас за допълнителни впроси?

Вашият коментар

Вашият имейл адрес няма да бъде публикуван.