Страница 2 из 3

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Пт мар 11, 2016 1:13 pm
skysilver
Дмитрий Иванов писал(а):Сейчас ломаю голову, как распарсить шаблон, что бы передать в переменную имя канала. А как сделать тоже самое с именем канала, например СТС?
Вот тут не подскажу. С этим вопросом лучше в ветку по шаблонам поведения.
У меня заведено несколько шаблонов на конкретные каналы, но пользуюсь ими крайне редко - обычно только для демонстрации гостям голосового управления. :)

По вопросу включения канала по его номеру - есть варианты. В классе lgtv_rs232.class реализованы такие функции, как:
  • getChannelNumberByName($chName) (Принимает название ТВ-канала. Возвращает номер ТВ-канала, если команда успешно выполнена, иначе FALSE).
  • getChannelNameByNumber($channelNumber) (Принимает номер ТВ-канала. Возвращает название ТВ-канала, если команда успешно выполнена, иначе FALSE).
Соответственно можно написать метод, который будет переключать канал не по его названию, а по номеру.

Также в классе есть базовая функция command($command, $data), которая в качестве параметра $command может принимать значение 'channel select'. И если в $data подсунуть номер канала в hex-формате и тип вещания, то можно переключать каналы и таким способом, причем не только на цифровом кабельном вещании, а на любом.

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Пт мар 11, 2016 2:27 pm
Дмитрий Иванов
Все догнал сам:

Вклю(чи|чить) телевизор на (\w+)

$сh=$matches[2];
say("$сh");

Теперь застрял, как распарсить 2 слова, типа "Рен ТВ" ?... Может, кто подскажет?
Спасибо!

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Пт мар 11, 2016 3:12 pm
slgeo
а зачем их парсить дополнительно? $matches[3] соответственно )

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Пт мар 11, 2016 4:41 pm
Дмитрий Иванов
slgeo, спасибо!
Пока получается или для 2-х слов маску сделать (но не работает с одним):

фраза: "Включи телевизор на Рен ТВ"
шаблон: Вклю(чи|чить) телевизор на (\w+)(\s+)(\w*)
разбор: $ch=("$matches[2] $matches[4]");

или для одного:
фраза: "Включи телевизор на СТС"
шаблон: Вклю(чи|чить) телевизор на (\w+)
разбор: $ch=("$matches[2] $matches[4]");

пытался прикручивать в маску "|" (альтернативу) совсем запутался...

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Вс мар 13, 2016 9:42 pm
Дмитрий Иванов
Подвожу промежуточный итог своих экспериментов - не работает. Видимо причина в моем тв LG LH-5000..., Часть функций работает, а вот с переключением каналов - ни как... callMethod('LG32LW575S.selectTVchannels', array('channel'=>'СТС')); на реальной системе не срабатывает. Гадаю с чем это связано: или с самим методом, который, я так понял, как-то получает от телевизора имена цифровых каналов (а моя модель так, видимо, не умеет) или вся проблема, что на Малине не получается нормально запустить lgtv_rs232.class (с подключенным классом php_serial).
Решил я для начала разобраться с проблемой ошибки декларирования класса в строке require('php_serial.class.php'); Для этого на виртуалке поставил последнюю версию Debian, все необходимые компоненты, запустил MajorDoMo, скопировал все файлы (lgtv_rs232.class, php_serial.class.php, шаблоны) и получил ровно туже ошибку в логах апача (Fatal error: Cannot redeclare class phpSerial in /var/www/lib/php_serial.class.php on line 18). Я даже для чистоты эксперимента весь файл lgtv_rs232.class вычистил, оставив только декларирование класса serial - результат такой же. А как только комментирую эту строку - ошибки нет. Система Debian, поставленная с нуля. Повторяемость ошибки 100%. Помогите разобраться - куда копать?!
Спасибо!

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Пн мар 14, 2016 9:48 am
slgeo
Посмотри у меня в Connect-е шаблон "канал (.+)". Код простейший, работает на 1,2 и более слов. Правда заточено под спутн. ресивер, но суть одна и та же.

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Пн мар 14, 2016 11:38 am
skysilver
Дмитрий Иванов писал(а):Гадаю с чем это связано: или с самим методом, который, я так понял, как-то получает от телевизора имена цифровых каналов (а моя модель так, видимо, не умеет)
Вот такого точно нет. Соответствие имени канала его номеру прописывается в файле channels.csv, который должен лежать в /var/www/templates/app_lgtvrs232. Выглядит так:
SPOILERSPOILER_SHOW

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

1,Первый,
2,Россия 1,
3,Россия 2,
4,НТВ,
5,Спб 5 Канал,
6,Россия К,
7,Россия 24,
8,Карусель,
9,ОТР,
10,ТВ Центр,
11,ТНТ,
12,Shopping live,
13,СТС,
14,Рен ТВ,
15,МТС-ИНФО,
16,Первый городской HD,
17,Disney,
18,Перец,
19,ТВ-3,
20,Ю ТВ,
При вызове метода callMethod('LG32LW575S.selectTVchannels', array('channel'=>'СТС')); будет произведен поиск канала СТС по его имени в файлике channels.csv, и ТВ переключится на 13-ый канал. Разумеется, нужно в методе писать имя канала на той же раскладке, что в channels.csv. А командами в консоли линукса (например, через minicom) у вас каналы переключаются?
Дмитрий Иванов писал(а):Решил я для начала разобраться с проблемой ошибки декларирования класса в строке require('php_serial.class.php'); Для этого на виртуалке поставил последнюю версию Debian, все необходимые компоненты, запустил MajorDoMo, скопировал все файлы (lgtv_rs232.class, php_serial.class.php, шаблоны) и получил ровно туже ошибку в логах апача (Fatal error: Cannot redeclare class phpSerial in /var/www/lib/php_serial.class.php on line 18). Я даже для чистоты эксперимента весь файл lgtv_rs232.class вычистил, оставив только декларирование класса serial - результат такой же. А как только комментирую эту строку - ошибки нет.
Видимо, где-то уже подсасывается php_serial.class.php. Попробуйте поиском пройтись по всему каталогу /var/www и найти все вхождения php_serial.
Другой вариант - в файле lgtv_rs232.class.php заменить строку

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

require('php_serial.class.php'); 
на

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

require_once('php_serial.class.php'); 

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Вт мар 15, 2016 12:15 am
Дмитрий Иванов
skysilver Спасибо!
Ура, с большего разобрался!
require_once('php_serial.class.php'); - помогло - апач больше не ругается... других вхождений (искал текстовым поиском) не обнаружено.
Углубленно вник в инструкцию, вот выдержка.
SPOILERSPOILER_SHOW
TV.jpg
TV.jpg (77.2 КБ) 8124 просмотра
таким образом, для включения 17 канала, нужно дать команду:

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

ma 01 00 11 10
- последнее число идентификатор диапазона (10 DTV). Поэтому в классе lgtv_rs232 изменил одну строку:

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

$this->data = substr($chHex, 0, 2) . ' ' . substr($chHex, 2, 3) . ' 90';
строкой:

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

$this->data = substr($chHex, 0, 2) . ' ' . substr($chHex, 2, 3) . ' 10';
последняя цифра указатель диапазона...
Осталось все причесать и настроить нормальное распознавание.

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Вт мар 15, 2016 12:23 am
Дмитрий Иванов
slgeo
Спасибо, маска "(.+)" подошла! Вроде корректно и с одним и двумя словами работает!

Re: Управление телевизорами LG через последовательный порт R

Добавлено: Вт июл 18, 2017 4:35 pm
Albert
skysilver писал(а): ... В меню MajorDoMo добавил пункт и элементы контроля телевизором. Получилось вот так (интерфейс ПДУ позаимствовал у LuckyFIA): Основное меню.jpg, Управление каналами.jpg, Пульт ДУ.jpg
Код меню следующий:
...<link type="text/css" rel="stylesheet" href="../templates/app_lgtvrs232/css/style.css" />...
все импортировал, модуль LG Smart TV установлен, сопряженного устройства естественно нет, templates/app_smarttv/images/ присутствует, в итоге Управление каналами.jpg присутствует, а вот пульта ДУ нет. В чем может быть проблема? Или нужен дополнительный код меню для пульта? Можно его выложить сюда тоже?