Gastello007

 
<<< Back

Управление телевизором на Android TV (linux)

Управление телевизором на Android TV

И так есть телевизор на Android TV, в мое случае это Xiaomi tv 4s 43.
В качестве операциинной системы сервера умного дома используется Ubuntu x64.
Софт для включения смотри мою предъидущую статью.
И софт управления телевизорм на базе AndroidTV ADB (Android Debug Bridge) (почитать можно тут )

ВНИМАНИЕ (на некоторых системах с процессорами ARM могут быть проблемы с ADB так, как в установчном пакете есть баг разработчика из-за чего не создаются сертефикаты которые необходимы для подключения к телевизору)

ПОЕХАЛИ!
Установим ADB

sudo apt-get update
sudo apt install android-tools-adb

Теперь проверям подключение к телевизору

adb connect IP-телевизора

Если есть коннект супер, если нет ищем в чем проблема.

Теперь займемся настройкой Majordodmo
Благодарю комрада VItt c 4pda.ru давшему мне нужный пинок и срипты для сценариев.
Далее его скрипты и мои наработки.
Скрипт на конект к телику.
ADBconnect

exec('adb connect #ip_addr# 1> /tmp/readings.txt');
exec('sleep 1');
$erroutput = exec('cat /tmp/readings.txt');
var_dump ($erroutput);

Срипт на отправку команд
ADBkeyevent

$keyevent = $params['keyevent'];
$command = 'adb shell input keyevent '.$keyevent.' 2> /var/www/readings.txt';
exec($command);
$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'devices/emulators found')<>null)
{
    rs('ADBconnect');
    exec($command);
}

Вызывется командой
rs ('ADBkeyevent', array('keyevent'=>20));
Списко команд для телевизора

0 -->  "KEYCODE_UNKNOWN" 
1 -->  "KEYCODE_MENU" 
2 -->  "KEYCODE_SOFT_RIGHT" 
3 -->  "KEYCODE_HOME" 
4 -->  "KEYCODE_BACK" 
5 -->  "KEYCODE_CALL" 
6 -->  "KEYCODE_ENDCALL" 
7 -->  "KEYCODE_0" 
8 -->  "KEYCODE_1" 
9 -->  "KEYCODE_2" 
10 -->  "KEYCODE_3" 
11 -->  "KEYCODE_4" 
12 -->  "KEYCODE_5" 
13 -->  "KEYCODE_6" 
14 -->  "KEYCODE_7" 
15 -->  "KEYCODE_8" 
16 -->  "KEYCODE_9" 
17 -->  "KEYCODE_STAR" 
18 -->  "KEYCODE_POUND" 
19 -->  "KEYCODE_DPAD_UP" 
20 -->  "KEYCODE_DPAD_DOWN" 
21 -->  "KEYCODE_DPAD_LEFT" 
22 -->  "KEYCODE_DPAD_RIGHT" 
23 -->  "KEYCODE_DPAD_CENTER" 
24 -->  "KEYCODE_VOLUME_UP" 
25 -->  "KEYCODE_VOLUME_DOWN" 
26 -->  "KEYCODE_POWER" 
27 -->  "KEYCODE_CAMERA" 
28 -->  "KEYCODE_CLEAR" 
29 -->  "KEYCODE_A" 
30 -->  "KEYCODE_B" 
31 -->  "KEYCODE_C" 
32 -->  "KEYCODE_D" 
33 -->  "KEYCODE_E" 
34 -->  "KEYCODE_F" 
35 -->  "KEYCODE_G" 
36 -->  "KEYCODE_H" 
37 -->  "KEYCODE_I" 
38 -->  "KEYCODE_J" 
39 -->  "KEYCODE_K" 
40 -->  "KEYCODE_L" 
41 -->  "KEYCODE_M" 
42 -->  "KEYCODE_N" 
43 -->  "KEYCODE_O" 
44 -->  "KEYCODE_P" 
45 -->  "KEYCODE_Q" 
46 -->  "KEYCODE_R" 
47 -->  "KEYCODE_S" 
48 -->  "KEYCODE_T" 
49 -->  "KEYCODE_U" 
50 -->  "KEYCODE_V" 
51 -->  "KEYCODE_W" 
52 -->  "KEYCODE_X" 
53 -->  "KEYCODE_Y" 
54 -->  "KEYCODE_Z" 
55 -->  "KEYCODE_COMMA" 
56 -->  "KEYCODE_PERIOD" 
57 -->  "KEYCODE_ALT_LEFT" 
58 -->  "KEYCODE_ALT_RIGHT" 
59 -->  "KEYCODE_SHIFT_LEFT" 
60 -->  "KEYCODE_SHIFT_RIGHT" 
61 -->  "KEYCODE_TAB" 
62 -->  "KEYCODE_SPACE" 
63 -->  "KEYCODE_SYM" 
64 -->  "KEYCODE_EXPLORER" 
65 -->  "KEYCODE_ENVELOPE" 
66 -->  "KEYCODE_ENTER" 
67 -->  "KEYCODE_DEL" 
68 -->  "KEYCODE_GRAVE" 
69 -->  "KEYCODE_MINUS" 
70 -->  "KEYCODE_EQUALS" 
71 -->  "KEYCODE_LEFT_BRACKET" 
72 -->  "KEYCODE_RIGHT_BRACKET" 
73 -->  "KEYCODE_BACKSLASH" 
74 -->  "KEYCODE_SEMICOLON" 
75 -->  "KEYCODE_APOSTROPHE" 
76 -->  "KEYCODE_SLASH" 
77 -->  "KEYCODE_AT" 
78 -->  "KEYCODE_NUM" 
79 -->  "KEYCODE_HEADSETHOOK" 
80 -->  "KEYCODE_FOCUS" 
81 -->  "KEYCODE_PLUS" 
82 -->  "KEYCODE_MENU" 
83 -->  "KEYCODE_NOTIFICATION" 
84 -->  "KEYCODE_SEARCH" 
85 -->  "TAG_LAST_KEYCODE"

Сценарий для запуска приложений
ADBapp

$app = $params['app'];
$command = 'adb shell monkey -p '.$app.' -c android.intent.category.LAUNCHER 1 2> /var/www/readings.txt';
exec($command);
$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'emulators found')<>null)
{
    rs('ADBconnect');
    exec($command);
}

Вызывется командой
rs ('ADBapp', array('app'=>'ru.rt.video.app.tv'));

Далее необходимо создать нужные вам классы и объекты в моем случае это
Tv / TVLivingroom
Мой объект input
Мои свойства

Key      
oldvalue         
TvLive       
vol  
Volfact      

Сценарий для проверки фактического звука
ADBVolfact

 if (gg('TVLivingroom.online' )=='1'){
 exec('adb shell dumpsys audio 2> /var/www/readings.txt');
$volfact =exec('adb shell dumpsys audio | grep -n Current | sed -n 1p |awk \'{print$5}\' | cat  | sed  \'s/,$//\'');
setGlobal("input.Volfact",$volfact);

$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'devices/emulators found')<>null)
{
    rs('ADBconnect');
 $volfact = exec(' adb shell dumpsys audio | grep -n Current | sed -n 1p |awk \'{print$5}\' | cat  | sed  \'s/,$//\'');
 setGlobal("input.Volfact",$volfact);

}} 

**
Перед создаеним метода необхимо в консоли линукс запустить adb shell dumpsys audio посмотреть после какого слова у вас идет уровень звука и порпавить Current на свое (допустим Current вместо Vol) и посчить на какой позиции само значение и поменять здеся print $5 ( допустим 4 вместо 5)

Сценарий управления уровнем звука
ADBVol

$volparam = $params['volparam'];
$command = 'adb shell service call audio 7 i32 3 i32 '.$volparam.' i32 1> /var/www/readings.txt';
exec($command);
$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'devices/emulators found')<>null)
{
    rs('ADBconnect');
    exec($command);
}

Метод volum связан со свойством volum

$vol = $this->getProperty ('vol');
$volfact = $this->getProperty ('Volfact');

if ($vol !=$volfact) {
rs ('ADBVol', array('volparam'=>$vol ));
 setGlobal("input.oldvalue",$vol);} else 
 {setGlobal("input.oldvalue",$vol);} 

Метод volfact связан со свойством volfact

 $vol = $this->getProperty ('vol');
$volfact =  $this->getProperty ('Volfact');
if ($volfact !=$vol) {setGlobal("input.vol",$volfact);}

Метод key связан со свойством key (переключение каналов)

$key  = $this->getProperty ('key');
$s = (string)$key;
$as=$s[0];
$bs=$s[1];
$cs=$s[2];
$str =$key;
$as +=7;
$bs +=7;
$cs +=7;
//$keyeventa = $as;
//$keyeventb = $bs;
//$keyeventc = $cs;
$commanda = 'adb shell input keyevent '.$as.' 2> /var/www/readings.txt';
$commandb = 'adb shell input keyevent '.$bs.' 2> /var/www/readings.txt';
$commandc = 'adb shell input keyevent '.$cs.' 2> /var/www/readings.txt';
$commandrun = 'adb shell input keyevent 4 2> /var/www/readings.txt'; 
 $pr = "".mb_strlen($str,'UTF-8');
if ($pr==1){
 exec($commanda);
exec($commandrun);
$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'devices/emulators found')<>null)
{ 
    rs('ADBconnect');
    exec($commanda);
exec($commandrun);
}} elseif  ($pr==2){  

exec($commanda);
exec($commandb);
exec($commandrun);
$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'devices/emulators found')<>null)
{ 
    rs('ADBconnect');
    exec($commanda);
exec($commandb);
exec($commandrun);
}}
else{ 
exec($commanda);
exec($commandb);
exec($commandc);
exec($commandrun);
$erroutput = exec('cat /var/www/readings.txt');
if (strpos($erroutput,'devices/emulators found')<>null)
{ 
    rs('ADBconnect');
    exec($commanda);
exec($commandb);
exec($commandc);
exec($commandrun);
}}

Дальше можно все привязать яндексхоуму и управлять телеком с мобилки лежа в кроватке если пульт далеко))
Дальше только простор для вашей фантазии!
Спасибо камрадам Lorgus и Xor за советы и неоценимую помощь.

Discuss (5) (14)

See also:
2020-10-19 Функции питона в альфа версии Мажордомо
2020-10-09 Функция getObjectsByClass для Phyton3 ver.2 Beta (обновил)
2019-10-01 Отключение и включение компьютера удаленно
2019-09-03 Устройства Онлайн пинг Синего зуба (LINUX/WIN)

Москва, Россия

На форуме: Gastello007