17 сентября 2017 г.

Драйвер iRidium для управления ТВ Sony Bravia

Для одного из проектов потребовалось реализовать управление телевизором SONY Bravia. Попробовал сделать управление через HTTP запросы к WEB серверу телевизора. Основой изысканий послужила статья 2014г. В принципе все что там было описано удалось применить к телевизору 2017г. выпуска - модель KD-75XE8596.

В первой версии такой способ не оправдал себя тем, что после нажатия кнопки на панели управления iRidium проходит порядка 5-6 секунд до реакции на телевизоре. Иногда это время увеличивалось до 10-12 секунд. Панель к сети подключалась по Wi-Fi (IEEE 802.11n), телевизор подключен к сети по Ethernet через гигабитный коммутатор подключенный к беспроводной точке. Никаких промежуточных устройств в виде сервера не было. Команды посылались на ip адрес телевизора в локальной сети.

Но оказалось, что я задал слишком частый опрос ТВ о его статусе: запрос уровня громкости, статуса электропитания (включен/выключен) и информация о программе и канале. Как только я увеличил время запроса с 1 сек до 3 сек - все команды стали выполняться почти сразу. Максимальная задержка составляет не более 1 секунды. Такая же задержка бывает и при управлении со штатного пульта ТВ.

Единственное что не удалось реализовать - управление телевизором при помощи голоса. При чем сам голосовой поиск вызвать можно, а вот как при этом передавать голос на ТВ не очень понятно. В штатном пульте это сделано при помощи Bluetooth, который активируется в пульте после нажатия кнопки с микрофоном.

Некоторые особенности работы драйвера:

  • на телевизоре был настроен Public Pass Key, который позволяет использовать единый пароль для доступа к телевизору и не запрашивать при добавлении нового устройства код авторизации. В принципе ничто не мешает реализовать запрос авторизации с вводом кода, но в данном случае я посчитал это излишним. Возможно для более ранних моделей Bravia этот метод авторизации не применим и надо реализовывать запрос авторизации.
  • установка громкости возможна как пошагово - нажатием кнопок Vol+ и Vol-, так и передачей явного значения громкости: через метод драйвера SetVolumeInfo
  • загрузка списка доступных команд происходит при инициализации драйвера от самого ТВ. В случае если ответа нет или он вернулся с ошибкой - запрос повторяется каждые 3 секунды.
  • в примере все элементы управления на странице рекурсивно привязываются по событию Release к функции вызывающей из драйвера метод SendCommand, которому передается имя вызвавшего метод элемента формы. В случае если это был элемент с именем SetVolume (слайдер регулировки уровня громкости), то в драйвере обрабатывается также переданное в метод значение элемента Value. Для всех остальных команд свойство Value не используется.


Ссылка на тестовый проект: https://yadi.sk/d/Y4IML1TA1T8lDw