[Сценарий] Управление смарт ТВ Philips

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение klv666 » Вт дек 10, 2019 4:11 pm

eslavnov писал(а):
Вт дек 10, 2019 2:23 pm

По поводу "ини файл не заполнился" - это очень странно. Уберите, пожалуйста, логин с паролем из ини файла, попробуйте еще раз запустить pylips без каких-либо аргументов. На телевизоре должен высветиться код, который вы вводите в Pylips. Что выдается в командой строке, после того, как вы вводите код с телевизора (сделайте скриншот, пожалуйста)?
Я через консоль cmd.exe запускал файл, см. скрин. Файл ини не заполнился.
скринПоказать
Pair.JPG
Pair.JPG (267.06 КБ) 4262 просмотра
Только что обнаружил, если запускать файл Pylips.py просто двойным кликом на секунду появляется консоль от питона, ввожу пин, пропадает. Вуаля ини файл заполнился.

Отправляю команду C:\python34\python.exe C:\philips\pylips.py --command post --path audio/volume --body '{"muted": false, "current": 18}' через консоль cmd.exe и получаю см. чкрин2
скрин2Показать
звук.JPG
звук.JPG (54.56 КБ) 4259 просмотров
eslavnov
Сообщения: 8
Зарегистрирован: Вс дек 08, 2019 1:25 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение eslavnov » Вт дек 10, 2019 7:21 pm

klv666 писал(а):
Вт дек 10, 2019 4:11 pm

Только что обнаружил, если запускать файл Pylips.py просто двойным кликом на секунду появляется консоль от питона, ввожу пин, пропадает. Вуаля ини файл заполнился.
О, спасибо! Похоже, что тут какой-то баг связанный с тем, что в первом случае вы запускаете Pylips.py из другой директории, а во втором - из той же, где settings.ini. Я в прошлом релизе добавил поддержку сторонних ini-файлов и, похоже, что-то поломал :( Я потестирую и поправлю это, спасибо!
klv666 писал(а):
Вт дек 10, 2019 4:11 pm

Отправляю команду C:\python34\python.exe C:\philips\pylips.py --command post --path audio/volume --body '{"muted": false, "current": 18}' через консоль cmd.exe и получаю см. чкрин2
Ага, Windows видимо и вправду по-другому парсит эту строку... Попробуйте следующую команду:
C:\python34\python.exe C:\philips\pylips.py pylips.py --command post --path audio/volume --body ^"{^"^"muted^"^": false, ^"^"current^"^": 18}^"

Если эта команда сработает, то я обновлю документацию.

Спасибо еще раз за ваши комментарии!
За это сообщение автора eslavnov поблагодарил:
klv666 (Вт дек 10, 2019 7:35 pm)
Рейтинг: 1.16%
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение klv666 » Вт дек 10, 2019 7:35 pm

eslavnov писал(а):
Вт дек 10, 2019 7:21 pm


Ага, Windows видимо и вправду по-другому парсит эту строку... Попробуйте следующую команду:
C:\python34\python.exe C:\philips\pylips.py pylips.py --command post --path audio/volume --body ^"{^"^"muted^"^": false, ^"^"current^"^": 18}^"

Если эта команда сработает, то я обновлю документацию.

Спасибо еще раз за ваши комментарии!
УРРРА! Заработало! У вас лишний pylips.py копировался видать, вот так сработало:
C:\python34\python.exe C:\philips\pylips.py --command post --path audio/volume --body ^"{^"^"muted^"^": false, ^"^"current^"^": 18}^"
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение klv666 » Пт дек 13, 2019 8:01 pm

freesh писал(а):
Пт дек 06, 2019 11:12 am

Если вида {"param1": 1432, "param2": 3123} то это json его можно разобрать на переменные. т.е.
$json = json_decode($result, true);
А потом обращаться $json["param1"] - тут будет переменная полученная

Полезно, имхо, для запроса статуса т.е. после этих комманд - обрабатываешь ответ получая какая щас громкость/канал
powerstate - Returns current power state of the TV ('On' or 'Off')
volume - Returns current volume and mute status
current_channel - Returns current channel (if in TV mode)
current_app - Returns current app (Android TVs only)

Попробовал вернуть значение громкости, что-то не получилось, использовал следующий код

Код: Выделить всё

$cmd='C:\python34\python.exe C:\philips\pylips.py --command volume';
exec($cmd,$result);
$json = json_decode($result, true);
$a = $json["current"];
setGlobal('Cube.111', $a);
В общем свойствах Cube.111 пусто(

А через консоль команда C:\python34\python.exe C:\philips\pylips.py --command volume отдает
Request sent!
{"muted":false,"current":4,"min":0,"max":60}
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение freesh » Сб дек 14, 2019 2:57 pm

klv666 писал(а):
Пт дек 13, 2019 8:01 pm
freesh писал(а):
Пт дек 06, 2019 11:12 am

Если вида {"param1": 1432, "param2": 3123} то это json его можно разобрать на переменные. т.е.
$json = json_decode($result, true);
А потом обращаться $json["param1"] - тут будет переменная полученная

Полезно, имхо, для запроса статуса т.е. после этих комманд - обрабатываешь ответ получая какая щас громкость/канал
powerstate - Returns current power state of the TV ('On' or 'Off')
volume - Returns current volume and mute status
current_channel - Returns current channel (if in TV mode)
current_app - Returns current app (Android TVs only)

Попробовал вернуть значение громкости, что-то не получилось, использовал следующий код

Код: Выделить всё

$cmd='C:\python34\python.exe C:\philips\pylips.py --command volume';
exec($cmd,$result);
$json = json_decode($result, true);
$a = $json["current"];
setGlobal('Cube.111', $a);
В общем свойствах Cube.111 пусто(

А через консоль команда C:\python34\python.exe C:\philips\pylips.py --command volume отдает
Request sent!
{"muted":false,"current":4,"min":0,"max":60}
$a = $json['current']; - вот так попробуй.
А вообще для теста сделай промежуточные выводы в лог Алисы например:

Код: Выделить всё

$cmd='C:\python34\python.exe C:\philips\pylips.py --command volume';
exec($cmd,$result);
say($result);
$json = json_decode($result, true);
say($json);
$a = $json['current'];
say($a);
setGlobal('Cube.111', $a);
чтобы видеть что не определяет.
Raspberry pi3, xiaomi, sonoff rf.
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение klv666 » Вс дек 15, 2019 7:04 am

freesh писал(а):
Сб дек 14, 2019 2:57 pm

чтобы видеть что не определяет.
после say($result);

["!!!! ['C:\\\\philips\\\\pylips.py', '--command', 'volume']","Sending GET request to https:\/\/192.168.1.213:1926\/6\/audio\/volume","Request sent!","{\"muted\":false,\"current\":5,\"min\":0,\"max\":60}"]

остальные say - пусто
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение freesh » Вс дек 15, 2019 12:22 pm

klv666 писал(а):
Вс дек 15, 2019 7:04 am
freesh писал(а):
Сб дек 14, 2019 2:57 pm

чтобы видеть что не определяет.
после say($result);

["!!!! ['C:\\\\philips\\\\pylips.py', '--command', 'volume']","Sending GET request to https:\/\/192.168.1.213:1926\/6\/audio\/volume","Request sent!","{\"muted\":false,\"current\":5,\"min\":0,\"max\":60}"]

остальные say - пусто
Хм, значит json_decode не декодирует строку, возможно из-за лишней инфы Sending GET request to ...
Ну можно попробовать вырезать {\"muted\":false,\"current\":5,\"min\":0,\"max\":60} вот это часть - с помощью substr и strpos (искать { })
что-то типа $j=substr($result,strpos($result,"{"),strlen($result)-strpos($result,"{"));
Только поиграйся там +1 -1 внутри substr чтобы он лишнего не обрезал в итоге у тебя должно остаться {\"muted\":false,\"current\":5,\"min\":0,\"max\":60}
Потом убрать \ - $j=str_replace("\","",$j);
и потом эту строчку уже скармливать json_decode
Raspberry pi3, xiaomi, sonoff rf.
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение klv666 » Вс дек 15, 2019 6:38 pm

freesh писал(а):
Вс дек 15, 2019 12:22 pm

Хм, значит json_decode не декодирует строку, возможно из-за лишней инфы Sending GET request to ...
Ну можно попробовать вырезать {\"muted\":false,\"current\":5,\"min\":0,\"max\":60} вот это часть - с помощью substr и strpos (искать { })
что-то типа $j=substr($result,strpos($result,"{"),strlen($result)-strpos($result,"{"));
Только поиграйся там +1 -1 внутри substr чтобы он лишнего не обрезал в итоге у тебя должно остаться {\"muted\":false,\"current\":5,\"min\":0,\"max\":60}
Потом убрать \ - $j=str_replace("\","",$j);
и потом эту строчку уже скармливать json_decode
Не получается, ошибка где-то, в этом я полный ноль, даже не знаю что исправлять...
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение freesh » Вс дек 15, 2019 9:53 pm

klv666 писал(а):
Вс дек 15, 2019 6:38 pm
freesh писал(а):
Вс дек 15, 2019 12:22 pm

Хм, значит json_decode не декодирует строку, возможно из-за лишней инфы Sending GET request to ...
Ну можно попробовать вырезать {\"muted\":false,\"current\":5,\"min\":0,\"max\":60} вот это часть - с помощью substr и strpos (искать { })
что-то типа $j=substr($result,strpos($result,"{"),strlen($result)-strpos($result,"{"));
Только поиграйся там +1 -1 внутри substr чтобы он лишнего не обрезал в итоге у тебя должно остаться {\"muted\":false,\"current\":5,\"min\":0,\"max\":60}
Потом убрать \ - $j=str_replace("\","",$j);
и потом эту строчку уже скармливать json_decode
Не получается, ошибка где-то, в этом я полный ноль, даже не знаю что исправлять...
Для начала надо привести строчку в норму, попробуй так:

Код: Выделить всё

$cmd='C:\python34\python.exe C:\philips\pylips.py --command volume';
exec($cmd,$result);
say($result);
$json=substr($result,strpos($result,"{"),strlen($result)-strpos($result,"{"))
say($json);  //Вот тут у тебя должно быть только  {\"muted\":false,\"current\":5,\"min\":0,\"max\":60} если пропадает например первая скобочка { то поиграйся $json=substr($result,strpos($result,"{")-1,strlen($result)-strpos($result,"{")+1);
$json=str_replace("\","",$json); //тут у тебя должны убраться \ т.е. остаться вот так {"muted":false,"current":5,"min":0,"max":60} 
say($json);
Raspberry pi3, xiaomi, sonoff rf.
klv666
Сообщения: 175
Зарегистрирован: Вс янв 20, 2019 10:48 am
Благодарил (а): 64 раза
Поблагодарили: 19 раз

Re: [Сценарий] Управление смарт ТВ Philips

Сообщение klv666 » Пн дек 16, 2019 4:30 am

freesh писал(а):
Вс дек 15, 2019 9:53 pm

Для начала надо привести строчку в норму, попробуй так:

Код: Выделить всё

$cmd='C:\python34\python.exe C:\philips\pylips.py --command volume';
exec($cmd,$result);
say($result);
$json=substr($result,strpos($result,"{"),strlen($result)-strpos($result,"{"))
say($json);  //Вот тут у тебя должно быть только  {\"muted\":false,\"current\":5,\"min\":0,\"max\":60} если пропадает например первая скобочка { то поиграйся $json=substr($result,strpos($result,"{")-1,strlen($result)-strpos($result,"{")+1);
$json=str_replace("\","",$json); //тут у тебя должны убраться \ т.е. остаться вот так {"muted":false,"current":5,"min":0,"max":60} 
say($json);
Ошибка где-то, сверху страницы мажордомо появляется строка

Warning: strpos() expects parameter 1 to be string, array given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(151) : eval()'d code on line 10 Warning: strlen() expects parameter 1 to be string, array given in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(151) : eval()'d code on line 10

а в say пусто
Ответить