Итак, предлагаю обсудить тему уменьшения количества пультов в доме.
В моём случае - есть очень удобный пульт от плазмы LG, после которого VU+ в руки брать не хочется. И ещё открывается интересная возможность: программно из ресивера управлять работой телевизора - переключать режимы 4:3/16:9, громкость и т.д.
Тема предполагает желание копаться в плагинах на питоне. Если такого желания нет - смысла читать статью дальше тоже нет.
Модуль HDMI-CEC встроен практически во все прошивки, и в теории позволяет управлять всеми устройствами, соединёнными по HDMI, одним пультом. Скорость там небольшая, ~30 байт/сек, но для управления хватит. На практике - единого обязательного стандарта нет, и каждый производитель норовит приделать свои особые команды. LG видимо решил идти этим путём, и в стандартной конфигурации у меня HDMI-CEC не работает.
Далее, к вшитому модулю цепляется плагин на питоне, который в разных прошивках реализован по разному:
- BlackHole - полностью закрыт. Внешне видно, что функции похожи, но разбираться методом тыка - неинтересно; - OpenPli - всё открыто, полная реализация стандарта; - VTI - всё открыто, но в ядерном модуле (как минимум в версии VTI 3.1) есть ошибка, препятствующая полной реализации.
Ну, OpenPli я попробовал, но никакого терпения не хватает настроить всё в ней под себя. Может потом когда-нибудь, когда времени будет больше.
Остановился на VTI. Плагин ставится в /usr/lib/enigma2/python/Plugins/SystemPlugins/HDMICEC/plugin.py
Для наших целей нужно будет добавить пару строк в конфиг Энигмы:
После этого в файл /tmp/hdmicec.log будет записываться весь журнал обмена.
Выглядит он примерно так:
Спойлер:
[VTI HDMI-CEC] received cec message 87 from 0 [VTI HDMI-CEC] received cec message 0 from 0 [VTI HDMI-CEC] received cec message 89 from 0 [VTI HDMI-CEC] ** WakeUpMessage ** send message: 4 to address 0 [VTI HDMI-CEC] ** ActiveSourceMessage ** send message: 82:10:0 to address f [VTI HDMI-CEC] ** Active VU Message ** send message: 85 to address f [VTI HDMI-CEC] received cec message 87 from 0 [VTI HDMI-CEC] send cec message 82:10:0 to f [VTI HDMI-CEC] send cec message 8e:0 to f [VTI HDMI-CEC] received cec message 0 from 0 [VTI HDMI-CEC] received cec message 89 from 0 [VTI HDMI-CEC] received cec message 89 from 0 [VTI HDMI-CEC] received cec message 82 from 0
Дальше жмём кнопки на пульте ТВ и смотрим коды в журнале. Если хочется обратного эффекта, то есть другой инструмент: В скрипте начиная со строки 103 есть закомментированный блок:
Спойлер:
# only used for testing # self.list.append( self.hdmiinputaddress ) # self.list.append( self.hdmiinputvalue1 ) # self.list.append( self.hdmiinputvalue2 ) # self.list.append( self.hdmiinputvalue3 ) # self.list.append( self.hdmiinputvalue4 ) # self.list.append( self.hdmilogenabledfile ) # self.list.append( self.hdmilogenabledserial ) # end testing
Если снять значок комментария (#), то после перезагрузки Энигмы из интерфейса плагина можно будет выдавать любые команды в телевизор, и смотреть на результат. Список команд с описанием - в присоединённом эксельном файле.
Далее: обработку принятых от телевизора команд добавляем в функцию messageReceived (по примеру уже написанных). Например, я добавил отклик на запросы телевизора "Request Vendor ID" (запрос производителя ресивера), и "Request a status of device" (запрос состояния ресивера):
elif message == 0x1a: # request a status of device address = addresstv cecmessage = 0x1b # send a status of device cecmessagetwo = 0x11 # play cmd = struct.pack('BB',cecmessage,cecmessagetwo) logcmdtwo = "[VTI HDMI-CEC] send cec message %x:%x to %x" % (cecmessage,cecmessagetwo,address)
Отступы строго соблюдаем - в питоне это критично! Как видно, вполне можно притвориться и дримбоксом. По идее, эти строчки должны улучшить распознавание и работу разных моделей ТВ с ресивером.
Чтобы сделать пробуждение ресивера от телевизора, надо править в этой-же функции messageReceived строку: elif message == 0x85: # request active source подставляем вместо 0x85 нужный код (я временно подставил 0x87), и ресивер будет просыпаться по команде с телевизора.
Теперь об обещанном ляпе в VTI: команды HDMI-CEC содержат собственно код команды, и параметры. Так вот, параметры в VTI просто решили не принимать! То есть в случае команды с параметрами - получить её просто не удастся. Зачем они это сделали - непонятно.
Добавлено 15 сентября | 2011г. | 19:21:20 Ну вот - в моём случае это всё. Синхронного включения/выключения я добился, а дальше продвинуться не удаётся: телевизор всё передаёт исключительно параметрами в команде 89, которые нигде не документированы. Надеюсь, в видеооборудовании других марок не такие кардинальные отличия от стандартов.
Nomad, ситуация двоякая, когда просто постиш, обычно удаляют, но если конкретно поделу, то мирятся с английским, притом на форуме есть English Corner .....
Ну вот, с одной стороны понимание есть, хотя и частичное: разработчики выдали мне тестовую версию ядра VTI с полной реализацией HDMI-CEC. Коды от телевизора увидел. Но вот с другой стороны - полностью глухо: описания параметров команды 0x89 нигде нет, а саппорт LG тупо посылает с такими вопросами подальше. Так что если хотите нормального управления по HDMI-CEC - не берите LG.
Nomad, Проще непользавться этой примочкой во всем остальном телики LG очень неплохи в умелых руках.... Поройся на форуме ixbt, там народец даже свои прошивки под телики lg собирает, если я конечно не ошибаюсь, может инфа которая тебе требуется есть там....
Поройся на форуме ixbt, там народец даже свои прошивки под телики lg собирает, если я конечно не ошибаюсь, может инфа которая тебе требуется есть там....
Я в курсе прошивок под Saturn 6 (LG), и всего что с ними связано. Ни у кого этой инфы нет, кроме самой LG. Arno наверное может выяснить её с дизасмом в руках, но ему это не надо. Ну и ладно - всё равно разберусь по мере накопления информации/логов/статистики. Может и дизасм возьму, если совсем нечего делать будет.
У меня телевизор Samsung UE-46D7000 LS подключен через ресивер Yamaha rx 767 к Gis 9895 . Tак вот если выключить Gis 9895 то выключится всё, если выключить телевизор, тоже всё выключится. Если включить Gis 9895 включается всё. Если включить телевизор включается всё, но через примерно 30 сек, т.е не в момент включения телевизора, а в момент когда телевизор выдает обратный сигнал аудио по HDMI. После включения кнопками пульта телевизора можно управлять Gis 9895., а если в в плагине изменить elif message == 0x85: # request active source на 87, то после включения телевизора всё включается сразу, но Gis 9895 не реагирует на кнопки пульта телевизора. Есть какие нибудь мысли?
Добрый вечер. Может кто скинет готовый ipk пакет Добавлено 15 октября | 2011г. | 22:32:26 Блин вот это с тормозил. Разобрался где его стянуть. Добавлено 15 октября | 2011г. | 22:35:07