Страница 9 из 11
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вт дек 10, 2019 4:11 pm
klv666
eslavnov писал(а): ↑Вт дек 10, 2019 2:23 pm
По поводу "ини файл не заполнился" - это очень странно. Уберите, пожалуйста, логин с паролем из ини файла, попробуйте еще раз запустить pylips без каких-либо аргументов. На телевизоре должен высветиться код, который вы вводите в Pylips. Что выдается в командой строке, после того, как вы вводите код с телевизора (сделайте скриншот, пожалуйста)?
Я через консоль cmd.exe запускал файл, см. скрин. Файл ини не заполнился.
- Pair.JPG (267.06 КБ) 4368 просмотров
Только что обнаружил, если запускать файл Pylips.py просто двойным кликом на секунду появляется консоль от питона, ввожу пин, пропадает. Вуаля ини файл заполнился.
Отправляю команду C:\python34\python.exe C:\philips\pylips.py --command post --path audio/volume --body '{"muted": false, "current": 18}' через консоль cmd.exe и получаю см. чкрин2
- звук.JPG (54.56 КБ) 4365 просмотров
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вт дек 10, 2019 7:21 pm
eslavnov
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}^"
Если эта команда сработает, то я обновлю документацию.
Спасибо еще раз за ваши комментарии!
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вт дек 10, 2019 7:35 pm
klv666
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}^"
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Пт дек 13, 2019 8:01 pm
klv666
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}
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Сб дек 14, 2019 2:57 pm
freesh
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);
чтобы видеть что не определяет.
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вс дек 15, 2019 7:04 am
klv666
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 - пусто
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вс дек 15, 2019 12:22 pm
freesh
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
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вс дек 15, 2019 6:38 pm
klv666
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
Не получается, ошибка где-то, в этом я полный ноль, даже не знаю что исправлять...
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Вс дек 15, 2019 9:53 pm
freesh
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);
Re: [Сценарий] Управление смарт ТВ Philips
Добавлено: Пн дек 16, 2019 4:30 am
klv666
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 пусто