Итак, предлагаю обсудить тему уменьшения количества пультов в доме.
В моём случае - есть очень удобный пульт от плазмы 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
Для наших целей нужно будет добавить пару строк в конфиг Энигмы:
1) заходим в терминал;
2) останавливаем Энигму:
init 4 3) в файл /etc/enigma2/settings дописываем строки:
config.hdmicec.logenabledserial=true config.hdmicec.logenabledfile=true 4) запускаем Энигму:
init 3 После этого в файл /tmp/hdmicec.log будет записываться весь журнал обмена.
Выглядит он примерно так:
Дальше жмём кнопки на пульте ТВ и смотрим коды в журнале.
Если хочется обратного эффекта, то есть другой инструмент:
В скрипте начиная со строки 103 есть закомментированный блок:
Если снять значок комментария (#), то после перезагрузки Энигмы из интерфейса плагина можно будет выдавать любые команды в телевизор, и смотреть на результат.
Список команд с описанием - в присоединённом эксельном файле.
Далее: обработку принятых от телевизора команд добавляем в функцию
messageReceived (по примеру уже написанных).
Например, я добавил отклик на запросы телевизора "Request Vendor ID" (запрос производителя ресивера), и "Request a status of device" (запрос состояния ресивера):
Спойлер :
elif message == 0x8c: # request vendor id address = addresstv cecmessage = 0x87 # send vendor id cecmessagetwo = 0x00 cecmessagethree = 0x1d cecmessagefour = 0xec # 001dec - Marusys, 000934 - DreamMultimedia, 001c62 - LG cmd = struct.pack('BBBB',cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour) logcmd = "[VTI HDMI-CEC] send cec message %x:%x:%x:%x to %x" % (cecmessage,cecmessagetwo,cecmessagethree,cecmessagefour,address) 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, которые нигде не документированы. Надеюсь, в видеооборудовании других марок не такие кардинальные отличия от стандартов.