Использование ИК для управления техникой в системах автоматизации: общие замечания и конкретные примеры
При создании системы домашней автоматизации обычно сложно обойтись только оригинальными исполнительными устройствами, особенно если речь идет о работе в сценариях мультимедиа и управлении климатом. Речь здесь может идти о телевизорах, проекторах, ресиверах, медиаплеерах, кондиционерах и другой технике. При этом не всегда есть возможность использовать «правильное» оборудование, имеющее поддержку фирменных интерфейсов управления. Чаше всего, этот вопрос связан с финансовыми соображениями.
В некоторых случаях можно рассчитывать на наличие последовательного интерфейса, который, при правильной реализации, позволяет эффективно интегрировать оборудование в систему благодаря наличию документированного набора команд и поддержке обратной связи, например, для проверки статуса устройства. В качестве адаптера в данном случае можно использовать описанные недавно устройства Global Cache, не забывая о том, что для каждого клиента потребуется индивидуальный канал управления.
Определенная надежда есть на реализацию управления через IP-сеть в новых моделях, но сейчас в описанной ситуации часто приходится иметь дело с управлением по ИК. Инфракрасные пульты управления сегодня являются стандартным способом для взаимодействия с мультимедийным оборудованием. Одни просты в использовании и недороги в изготовлении, однако имеют и определенные недостатки.
Первым из них является необходимость наличия прямой видимости от пульта до приемника. Второй — отсутствие возможности индивидуальной адресации устройств (если, например, используется несколько одинаковых усилителей). С этим проблемами можно справиться установкой ИК-передатчика непосредственно на окошко приемника требуемого устройства, как это реализовано у Global Cache. Третьим, важность которого в бюджетных решениях спорна, назовем отсутствие обратной связи. Четвертым, пожалуй, наиболее существенным, является отсутствие в большинстве случаев документированной базы ИК-кодов.
Для решения последней проблемы применяется несколько способов, которые также сложно считать идеальными. Первый вариант — использование «обучающего» устройства для записи кодов с существующего пульта ДУ. Второй — работа с подготовленной заранее базой данных кодов.
Недостаток первого способа — невозможность получения отсутствующих на пульте команд. Чаще всего эта проблема встречается в мультимедийных инсталляциях, когда требуется обеспечить переключение ресивера или телевизора на какой-то определенный вход для коммутации и отображения необходимого сигнала. С учетом широкого набора входов, многие устройства сегодня имеют только одну или две кнопки для его выбора перебором. При этом обеспечить гарантированное «попадание» на нужный вход при любых начальных условиях невозможно. Эту задачу можно решать разными способами, например запоминанием входа или установкой дополнительных коммутаторов с «правильным» управлением, но это неудобно или дорого. Аналогичное замечание касается и управления питанием, где практически всегда есть только функция «переключить питание», а не отдельные кнопки включения и выключения. Еще одним нюансом в описываемом сценарии является погрешность при измерении, поскольку частота модуляции не фиксирована и приемник пытается определить ее по входящему сигналу, так что даже одна команда, записанная несколько раз, может иметь разные коды.
Не менее проблематична работа и с готовыми базами кодов. Часто они используют сортировку не по конкретной модели устройства или пульта, а в виде производитель-тип оборудования-набор кодов. При этом последних может быть более десятка, что потребует много времени на подбор и не гарантирует успешного результата.
Правда наличие подобных баз предоставляет богатую информацию для анализа существующих у производителя возможных модификаций команд. Здесь также упомянем о существовании различных вариантов записи ИК-команд и специализированные утилиты для конвертации форматов. Идеальным вариантом в данном случае стоит считать именно описание команд в оригинальном бинарном формате, а не в виде «оцифровок». К сожалению, встречается он достаточно редко.
Отметим, что управление кондиционерами имеет свои особенности, связанные с наличием одновременных регулировок нескольких рабочих параметров, что еще больше затрудняет их управление через ИК-порт.
Стоит заметить, что гарантировать наличие описанных выше функций, выходящих за рамки штатного ИК-пульта управления конечно никто не будет. Однако современный уровень унификации при изготовлении электронных устройств дает надежду на поддержку не представленных на пульте команд.
Таким образом, мы видим, что для реализации требуемых функций потребуется приложить серьезные усилия и при определенном везении все может получиться, но гарантий, к сожалению, нет никаких. В этом материале мы на конкретных примерах расскажем о решении данной задачи. Надеемся, что эта информация окажется полезной для наших читателей.
Global Cache iTach Flex В данном материале мы использовали устройство iTach Flex из последнего поколения компактных адаптеров Global Cache. Модель существует в версиях для подключения к проводной сети и Wi-Fi.
Устройство для варианта Wi-Fi, который мы тестировали, имеет корпус с размерами всего 31×65×13 мм (не считая разъемов кабелей), что позволяет установить его где угодно. Модификация с RJ-45 будет немного крупнее из-за разъема.
Корпус изготовлен из черного пластика. Беспроводная антенна встроенная. Присутствует специальная металлическая рамка для крепления. Она устанавливается на одном или двух шурупах, а адаптер просто защелкивается на ней.
На корпусе есть светодиодный индикатор статуса, кнопка для подключения к беспроводной сети по WPS и сброса настроек, а также окошко ИК-приемника для обучения. С одного из торцов установлен вход питания (стандартный microUSB) и многофункциональный миниджек 3,5 мм для подключения кабелей Flex Link.
Благодаря последнему элементу, модель получилась уникально универсальной. На настоящий момент поддерживаются следующие варианты: последовательный порт, один ИК-передатчик, один ИК-бластер, три ИК-передатчика (один может быть бластером).
Как и ранее рассмотренного семейства iTach, ИК-бластер предназначен для использования на большом расстоянии (в комнате) и может оправлять команды на разные устройства. А обычный ИК-передатчик предназначен для крепления на окошке приемника конкретного устройства. Ожидается реализация поддержки управления сухими контактами и подключения сенсоров. В этом материале мы подключали к адаптеру ИК-бластер, поскольку управлять нужно было несколькими устройствами в комнате.
Для управления можно использовать как знакомый по iTach вариант TCP с отправкой команд на определенный порт, а также новый HTTP API. Установка основных параметров работы осуществляется через встроенный веб-сервер.
Отметим, что Global Cache имеет собственную онлайн-базу ИК-кодов, отсортированных по производителю и записанных в виде команд для отправки на их собственные адаптеры.
Телевизор LG серии LM66×2012 года выпуска Модель оборудована большим количеством видеовходов, поддерживает 3D и подключение к сети, имеет порты USB. На штатном пульте управления присутствует одна кнопка для включения/выключения питания и одна кнопка открытия меню для переключения источников. В последнем случае потребуется подтверждение операции, а в случае наличия подключения к сети в списке будут присутствовать и медиасерверы, что делает невозможным «слепую» установку на заданный вход.
Минимальный набор требований к телевизору в составе домашнего кинотеатра — включение и выключение питания разными командами и установка на определенный вход. Дополнительно можно говорить о реализации просмотра эфирного телевидения, где будут нужны выбор канала и регулировка громкости.
Для начала используем встроенный в iTach Flex датчик для записи кодов штатного пульта. Все кнопки нам сейчас не потребуются, достаточно определиться только с основными. После запуска программы iLearn и подключения к адаптеру необходимо поднести пульт к приемнику и нажимать кнопки
Теперь можно проанализировать результаты. Как мы видим, каждая команда, если не учитывать необходимой для самого адаптера части «sendir,1:1,1,37914,1,1,», имеет префикс »341,170,», далее идут тридцать две пары чисел и замыкает команду суффикс »22,1520,341,85,22,3700». В данном случае, нас будут интересовать как раз данные пары чисел. Они кодируют команду в двоичном формате, где »22,21,» обозначает »0», а »22,63,» обозначает »1», причем первым идет младший бит. Заметим, что из-за особенностей оцифровки некоторые числа могут немного отличаться, например »20» вместо »21» или »65» вместо »63». Но сути это не меняет и удобнее сразу привести все к одинаковому виду поиском и заменой.
Декодирование команды дает нам четыре байта. Подобный вариант, называемый обычно «протоколом NEC», используется достаточно часто и представляет собой сочетание двух байт адреса, одного байта команды и его повтора в инверсном виде (»0» заменяются на »1» и наоборот).
В частности для нашего примера мы получаем: [OK] 04 FB 44 BB, [VOLUP] 04 FB 02 FD, [VOLDN] 04 FB 03 FC. Интересно, что здесь второй байт адреса является инверсным для первого. Далее есть два варианта: зная адрес, составить строки для каждого из возможных значений команды и проверить их на устройстве — или поискать готовые команды в сети. Второй подход приводит нас на сайт Remote Central, где мы можем обнаружить документ производителя с подробным описанием команд управления телевизорами близких по году выпуска серий. Сравнение таблицы в нем с нашими записями показывает идеальное совпадение по записанным командам. Теперь нужно найти коды для требуемых нам операций и перекодировать их в обратном направлении в команды для iTach Flex. Например, из [POWERON] 04 FB C4 3B и [POWEROFF] 04 FB C5 3A мы получаем соответственно«sendir,1:1,1,38004,1,1,341,171,22,21,22,21,22,65,22,21,22,21,22,21,22, 21,22,21,22,65,22,65,22,21,22,65,22,65,22,65,22,65,22,65,22,21,22,21,22, 65,22,21,22,21,22,21,22,65,22,65,22,65,22,65,22,21,22,65,22,65,22,65,22, 21,22,21,22,1523,341,86,22,3800«и«sendir,1:1,1,38004,1,1,341,171,22,21,22,21,22,65,22,21,22,21,22,21,22, 21,22,21,22,65,22,65,22,21,22,65,22,65,22,65,22,65,22,65,22,65,22,21,22, 65,22,21,22,21,22,21,22,65,22,65,22,21,22,65,22,21,22,65,22,65,22,65,22, 21,22,21,22,1523,341,86,22,3800».
Заключительный этап — проверка работоспособности команд. Он также поможет, если в найденной таблице есть неоднозначное соответствие. Для этой задачи используем программу iTest.
Для удобства и ускорения процесса мы установили около ТВ IP-камеру, что позволило наблюдать за процессом прямо с экрана компьютера. Проверка показала, что задача была полностью выполнена. Результат, записанный в обычном текстовом формате, можно скачать здесь.
Отметим, что использование готовых баз могло и не дать результата. Например, в базе Global Cache для телевизоров LG представлено семь наборов команд, причем явных пунктов для переключения на заданный вход HDMI в них нет. Хотя, скорее всего, один из представленных вариантов выбора входа мог бы и сработать.
Комплект домашнего кинотеатра Onkyo HTX-22HD Эта задача явно будет посложнее — модель достаточно старая и не очень популярная, особенно в «серьезных» инсталляциях. Однако со своей задачей многоканального ресивера для медиаплеера вполне справляется и сегодня. Как и с описанным выше телевизором здесь есть несколько задач — отдельные команды для включения и выключения питания, выбор конкретного входа и регулировка громкости. С последним проблемы нет — можно просто скопировать коды для этих кнопок. Но для управления питанием используется одна кнопка пульта, а для выбора входа — две кнопки для перехода к следующему и предыдущему входу. Также могут быть потенциально интересны функции выбора режима обработки многоканального звука.
Сначала стоит прояснить ситуацию со входами. В этом устройстве, как и на многих других в данном классе, физическому входу в настройках ресивера устанавливается соответствие подключенному оборудованию. Заводское состояние выглядит следующим образом:
Вход Функция Coaxial Digital In CD HDMI 1 VCR/DVR HDMI 2 CBL/SAT Line 1 Tape Line 2 Tuner Optical Digital In 1 DVD Optical Digital In 2 Game/TV Теперь, как и с телевизором, запишем некоторые или все команды существующего пульта через приемник в iTach Flex. Здесь мы тоже видим характерное начало в строках — «sendir,1:1,1,38095,1,1,» как параметры отправки пакета и »341,171,» как префикс. Далее идут знакомые тридцать две пары чисел протокола NEC, а вот суффиксы встречаются разные. Сложно понять, насколько это существенно, но, на всякий случай запишем и их в рабочую таблицу.
В случае Onkyo мы имеем два байта адреса и один байт команды, который повторяется в инвертированном виде четвертым байтом пакета. Адрес, вероятно, как-то связан с суффиксом, а всего на основных кнопках пульта мы смогли насчитать три адреса — D2 06, D2 07 и D2 08.
Вариант прямого перебора в подобных условиях явно требует слишком много времени. Так что попробуем снова обратиться к упомянутому выше сайту с информацией о кодах разных производителей, для телевизора это очень помогло. К сожалению, в найденных на этом ресурсе файлах не удалось найти упоминания именно нашей модели ресивера, да и похожих адресов в таблице на первый взгляд не было.
Анализ данных показал, что если сравнивать только команды и не учитывать адрес, то можно найти сходство. Например, для увеличения громкости используется команда 02, для уменьшения — 03, а для отключения звука — 05. В таблице с теми же адресами, что и управление громкостью нашлась команда включения питания (04). Модификация оцифрованной строки [VOLUP] с адресом D2 06 на эту команду (нужно исправить всего пару чисел) показала, что мы на правильном пути — ресивер включался и не менял своего состояния при повторной отправке, будучи уже включенным. Команда выключения питания в документе имела другой адрес. Так что мы подставили команду 47 в строку команды [SETUP], имеющую адрес D2 07 и отличающийся суффикс. Это тоже сработало.
Таким образом, до нахождения команд перехода на нужный вход оставалось совсем немного. Однако, еще раз внимательно просмотрев найденный документ, на одном из листов была обнаружена таблица, указывающая на то, что приемник и пульт могут иметь альтернативные заменяемые списки адресов из определенных наборов. Сделано это, видимо, для возможности управления однотипными устройствами в одном помещении. Так что после замены наших адресов на D2 6D, D2 6C, D2 AC мы смогли проверить соответствие оцифрованным данным и найти все необходимые команды для переключения на нужный вход. После этого, с учетом разных суффиксов, была составлена таблица команд для данного устройства. Скачать ее можно по ссылке. Отметим, что логические названия входов в ней были заменены на физические исходя из заводских настроек.
Медиаплеер Dune HD С учетом того, что данная серия плееров поддерживает управление по сети (на сайте производителя приводится информация о API), от ИК-пульта в данном случае могут потребоваться только функции раздельного включения и выключения. Здесь производитель сделал подарок, опубликовав с разделе поддержки соответствующий документ, добавив в него необходимые команды включения и выключения с кодами 00 BF 5F A0 и 00 BF 5F A1 соответственно. Заметим, что работа второй команды зависит от настройки режима выключения плеера. Устройство может или переходить в спящий режим (с сохранением работоспособности сетевых функций) или выключаться полностью (до подачи ИК-команды на включение).
После оцифровки нескольких кнопок пульта в iTach Flex можно получить требуемое «окружение» для наших кодов — приставку «sendir,1:1,1,38186,1,1,342,170,» и суффикс »22,1547,342,85,22,3800». Результат после добавления непосредственных команд можно посмотреть в отдельном текстовом файле.
Использование команд в iRiduim После нахождения требуемых кодов, попробуем использовать их в проекте автоматизации. В первом примере мы взяли продукт iRidium. Несмотря на то, что он имеет встроенную базу кодов Global Cache, по описанным выше причинам рекомендуется использовать именно новые найденные и проверенные коды.
Для удобства работы с командами можно создать собственную (пользовательскую) базу данных для требуемых устройств. Это позволит использовать их в нескольких проектах. При создании устройств в новой базе вы указываете название, производителя, тип и комментарий. После этого можно запрограммировать для устройства любое число команд. При этом заносить в параметры нужно не весь код, а только основную часть после частоты, числа повторов и смещения. Эти параметры будут указываться уже в свойствах передатчика Global Cache. Отметим, что, несмотря на формально немного отличающуюся частоту, все три устройства успешно работали при указании общего значения 38000.
После составления дизайна проекта с кнопками и другими элементами можно приступить к программированию действий. Проще всего это делать перетаскиванием команды из дерева устройств проекта на кнопки. Для реализации функций непрерывной регулировки (например, громкости), нужно использовать не только действие «Press», но и «Hold». Заметим, что для ИК управления реализовать быструю установку уровня громкости слайдером не получится, поскольку обратной связи от управляемого устройства в системе нет, как и возможности в виде параметра указать нужный уровень. А вот для RS-232 подобный сценарий в некоторых случаях может быть реализуем.
В данном проекте мы использовали простейший вариант удаленного управления — каждая кнопка соответствует своей команде. Но система iRidium позволяет реализовать и более сложные сценарии, например можно назначить одной кнопке включение сценария «Просмотр кинофильма», включающий соответствующее управление светом, включение всех участвующих в сценарии устройств (и отключение мешающих), необходимую коммутацию входов и выходов, открытие всплывающего окна управления медиаплеером.
В качестве такого варианта используем загруженные с сайта iRidium образцы интерфейса и панелей управления плеером Dune. После их объедения в одном проекте, настроим вызов меню управления плеером с одной из основных страниц. Причем в скрипт запуска добавим соответствующие ИК-команды для включения и настройки аудио-видео оборудования.
Кроме того, учитывая, что звук у нас декодируется и выводится через ресивер, для удобства управления с одной страницы можно заменить команды управления громкостью с плеера на ресивер. Как мы писали выше, обратной связи здесь нет, так что остается только относительное управление кнопками «громче» и «тише».
Заключение Использование ИК-канала для управления аудио/видеотехникой и другим оборудованием может являться единственным способом автоматизировать работу с ним, особенно в недорогом сенменте. Несмотря на очевидные недостатки этого метода, основным из которых в данном случае является отсутствие обратной связи, данный метод вполне работоспособен и позволяет реализовать достаточно гибкие сценарии. В целом, никаких сложностей в реализации описанных вариантов, не считая поиска требуемых кодов, мы не встретили.
Процесс поиска и составления требуемых команд способен превратиться в запутанный исследовательский процесс. Существенную помощь здесь оказывают интернет-ресурсы, на которых собирается информация об используемых ИК-кодах. Анализ представленных данных и поиск аналогий часто позволяет с относительно небольшими затратами найти необходимые для реализации проекта команды.
В качестве управляющего адаптера можно использовать как упомянутые в материале готовые устройства Global Cache, так и другие аналогичные модели, например собранные самостоятельно на основе микроконтроллеров, проекты для которых широко представлены в интернете. Что касается интеграции в систему управления, то наиболее удобным представляется вариант работы по компьютерной сети, но в некоторых ситуациях будет достаточно и локальных подключений через USB или последовательный порт. Сетевой вариант, в частности, интересен тем, что может быть использован с различным программным обеспечением, например в составе решений Fibaro и через интернет.
Полный текст статьи читайте на iXBT