HDMI матрица

матрица

HDMI матрица и умное управление ею.

В данной статье я расскажу что же такое HDMI матрица, а в частности, HDMI 4×2 matrix 4K x 2K 3D и как ею управлять из MajorDoMo.

Для желающих приобрести:

Моя модель, мой продавец (ССЫЛКА) к сожалению он задрал цену. 

Моя модель по приемлемой цене (ССЫЛКА), но нужно выяснить у продавца какой именно пульт он предлагает. Задача получить пульт с цифрами (один тык одно переключение). Бывают пульты только со стрелками (последовательный перебор с визуальным контролем) нам такой не подойдет! Бывают пульты где нужно нажать две кнопки OutX и цифру, такие пульты нам тоже не желательны. Нормальный пульт к матрице 4×2 вполне способен обеспечить две независимых группы кнопок см. картинку моего пульта на фото к этой статье.

Альтернатива (ССЫЛКА), я считаю что этот вариант и дешевле, и даже удобнее моего ввиду наличия оптического выхода.

Может кому то глянется 6×2 (ССЫЛКА), торопитесь, пока скидка.

У кого много устройств отображения вот 4×4 (ССЫЛКА), по цене она не многим дороже 6×2.

Что же такое HDMI матрица?

HDMI матрица это переключатель устройств-источников (компьютеры, ресиверы, DVD/Blue-ray, в общем, всего где есть HDMI) на один или сразу все мониторы/телевизоры.

Конечно же, ”все”, это я загнул, у устройства строго определенное количество входов и выходов. Но, гипотетически такие устройства можно ставить в стек, хоть это иногда и не очень удобно. В нашем случае… Впрочем, давайте разберем не хитрые обозначения из которых и так все станет ясно.

HDMI 4×2 matrix 4K x 2K

  • HDMI — Говорит о том что это устройство работает с HDMI.
  • 4×2 — 4 входа 2 выхода.
  • Matrix — у китайцев есть понятие переключатель Switch и понятие делитель Splitter, матрица объединяет обе эти функции.
  • 4K x 2K 3D — собственно, поддерживаемые форматы отображения.

Расстояния.

Если говорить о конкретно моей модели, то она обладает средними (наиболее часто заявленными) параметрами. Т.е. производитель обещает 5 метров в любую сторону без ухудшения качества. Если по простому 10 метров от устройства-источника до устройства отображения, при условии что матрица где то посередине.

Максимум это или нет? Сходу сложно ответить, тут скорее все зависит от кабеля и портов. Но лично я считаю что 10 метров не придел.

Однажды, некоторое время назад, мне срочно нужно было подключить телевизор к ресиверу 5м кабелем. Тогда я занимался их ремонтом. Необходимо было через JTAG оживить партию Dreambox. Скакать, с подпаянным LPT, к ящику висевшему на стене и обратно, совсем не хотелось. Поэтому, вместе с кучей ”трупов”, ребята мне привезли, красивый, запечатанный в блистере, 5м шнурок с позолоченными разъемами. И что вы думаете? По экрану, слева, пошла цветная рябь. На следующий день, скорее от отчаяния, я купил, за 300р, но-нейм, 5м кабель. Как сейчас помню, обычный кулек, запечатанный степлером, и надпись авторучкой 5м. Каково же было мое удивление, когда я увидел на телевизоре идеальную картинку. Кстати, в данный момент сигнал на телевизор идет именно через этот шнурок. Извините за блики, специально не стал их убирать, даю как есть:

матрица скриншот 1

Кабели.

Гипотетически, подключать что во вход, что на выход матрицы можно не только кабелем HDMI-HDMI, но и через любые преобразователи. Их на рынке великое множество. Допускаю даже что таким образом можно увеличить общую длину кабеля. Но, буду с вами откровенен, у меня нет необходимости в каких бы то ни было преобразователях и я их не использую. Могу сказать лишь про кабель HDMI-DVI, которым у меня подключен к матрице старый компьютер. Длина его так же 5м. DVI, кто в теме, везде полный (просто констатирую факт). Пробовал подключать через матрицу им, как источник так и монитор. Картинка идеальная, в обоих случаях. Оно и не мудрено, ведь заявленный производителем 4K это весьма неплохой запас. Совсем не удивлюсь, если на данной матрице прекрасно сработают кабели и более нежели 5 метров. Но, сейчас, я говорю лишь о том что лично проверил и что идеально у меня работает.

Подведем промежуточный итог.

Имея в своем арсенале недорогую HDMI матрицу, мы можем:

Существенно расширить количество подключаемых, на постоянной основе, к устройствам отображения, источников.

Дублировать картинку, в моем случае на два, устройства отображения (например, смотреть одновременно интересное кино в гостиной и на кухне).

Избавиться от проблемы одной кнопки. Это когда невозможно точно указать конкретный вход на телевизоре. Т.е. необходим перебор входов, тыканьем в кнопку Source с визуальным контролем.

Убрать с глаз долой куда, нибудь в кладовку, все шумящие, гудящие и громоздкие источники.

Ну и наконец, выбирать на любом подключенном устройстве отображения любой из 4 подключенных источников.

Почему именно 4х2?

Здесь все банально, цена. Например есть матрицы и 8×8. Есть матрицы с повторителями в которых вместо стандартного кабеля применяется витая пара. Там и дистанции уже посолиднее. И много чего еще вкусного. Но, цена на такие устройства ой как кусается. Ниже я их приведу, чисто для обзора.

8×8 (ССЫЛКА), 8×8 HDBaseT (ССЫЛКА).

Используя же 4х2 в связке с MajorDoMo, абсолютно ничего нам не мешает все это дело масштабировать. Более того, гипотетически, две матрицы можно использовать в стеке (пока не пробовал но планирую). Не очень удобно конечно, -вход и -выход, но, тем не менее, очень интересно. В любом случае, управление в MajorDoMo очень гибко, поэтому, в конечном итоге, для обычного пользователя это будет выглядеть как единственный клик или голосовая команда.

Недостатки?

Их в данной матрице, аж, всего один. Пропадание изображения на всех устройствах отображения, не более чем на секунду, в момент переключения источников. Это сродни переключению канала на ресивере. Но одно дело переключать каналы самому и  совсем другое когда это делает кто то, да еще из другой комнаты. Впрочем, не так страшен черт как его малюют. Матрица это не TV каналы, а всего лишь, вспомогательное устройство. Ее переключение не столь частое явление, чтобы вызывать действительно серьезное раздражение. В общем, к этому все быстро привыкают. И через пару дней, уже никто не обращает на такую мелочь внимание. Ну, а дополнительным стимулом, при всех удобствах и экономии на устройствах-источниках, является цена самой матрицы.

Подход.

Матрица это устройство которое, как и другая бытовая техника, в доме, управляется с помощью IR пульта ДУ. Ранее мы с вами разобрали Broadlink RM, который является универсальным, обучаемым пультом, способным тесно интегрироваться с системой MajorDoMo. Думаю, ход действий очевиден:

  1. Мы обучаем наш RM командам пульта матрицы.
  2. Создаем свойства. В классе Rooms Объекта Hall и в классе Rooms Объекта Bedroom.
  3. Пишем, для матрицы, универсальный сценарий, чтобы иметь возможность управлять ей несколькими способами (кнопка, голосовая команда и т.д.).
  4. Собственно, реализуем в MajorDoMo эти способы.
  5. Ну и бонусом, попробуем простенькую многоходовочку выполняющую, одной командой, сразу несколько обычно разрозненных действий.

Обучаем наш RM командам пульта матрицы.

Обучить RM можно двумя способами:

  1. Как я упоминал ранее, это стандартный способ, когда мы с помощью штатного приложения e-control, обучаем наш RM командам пульта. Сохраняем, на облако, резервную копию всех пультов которым обучен e-control. И наконец, импортируем с облака резервную копию уже в плагин Broadlink MajorDoMo.
  2. Обучаем RM непосредственно из плагина Broadlink.

Какой способ выберите вы это дело вашего личного предпочтения. Как по мне, то самым рациональным видится следующий подход: На первом этапе обучаем e-control всему чему только можно, потом экспорт и импорт в плагин. Далее, если что то нужно будет добавить, добавляем уже непосредственно из плагина. Так мы ”убьем” несколько “зайцев“ сразу. Будем иметь два обученных источника управления, не придется по новой присваивать командам объекты и свойства, не нужно будет подчищать дубли.

Я не буду рассказывать, как обучить RM команде из e-control, это все многократно описано, стоит вам только набрать в поисковике “Обучение Broadlink RM” там все более чем просто. На крайний случай, если будет что то непонятно, обсудим это в комментариях.

Что касается плагина то там все еще проще. Но!, я исхожу из того что вы прочли мою статью про RM. Посетили на форуме MajorDoMo, веточку посвященную модулю Broadlink. И уже интегрировали свой RM в свой MajorDoMo.

К делу.

Переходим в модуль, Меню администрирования/УСТРОЙСТВА/Broadlink, находим в списке наш RM-PRO. Напротив, справа нажимаем кнопочку Data (три полоски). В самом низу ранее экспортированного или пустого списка мы увидим кнопку Обучить коду и слева от нее поле Добавить:. Внимательно смотрим на пульт от нашей матрицы, осознаем что там два цифровых блока OutA и OutB. Пока работаем с блоком OutA! Вписываем в поле Добавить: tv1_in1 (что означает устройство отображения №1 источник №1). Жмем кнопку Обучить коду. На RM загорится красный светодиод. Берем пульт от матрицы и “стреляем” в RM кнопкой 1 из блока OutA.

Внимание! Подержать кнопочку на родном пульте нужно, не отпуская, секунды две-три. Держать пульт стоит по ближе к RM, думаю сантиметров 10 самое то.

У вас должна появиться строчка с названием команды(tv1_in1) и кодом, а светодиод на RM погаснет. Ну и наконец, жмем синюю кнопочку Сохранить.

Все, мы только что добавили свою первую кнопочку, которая выведет на первый наш монитор устройство-источник №1. Эту же операцию мы повторим для всех оставшихся кнопок блока OutA, а потом и для всех кнопок блока OutB. В результате у вас должно получиться 8 команд со следующими названиями: tv1_in1, tv1_in2, tv1_in3, tv1_in4 и tv2_in1, tv2_in2, tv2_in3, tv2_in4. Где tv1_in1 соответствует кнопке 1 OutA на пульте матрицы, tv1_in2 кнопке 2 OutA и т. д.

Добавим свойства.

Основные комнаты у нас должны быть добавлены из коробки, так что нам будет очень просто.

Главное административное меню/ОБЪЕКТЫ/Объекты/+(Rooms Rooms/Locations)/Hall/Самая нижняя вкладка Свойства. Опускаемся в самый низ, видим два поля Свойство и Значение. В поле свойство пишем: tv1_in1 в поле значение: 1 и жмем кнопочку Добавить. По этому же принципу добавляем и три остальные свойства, только у них в значение записываем 0.

Тоже самое повторяем и в Главное административное меню/ОБЪЕКТЫ/Объекты/+(Rooms Rooms/Locations)/Bedroom/Самая нижняя вкладка Свойства только вместо tv1_… указываем tv2_…

Пишем, для матрицы, универсальный сценарий.

Идем в Главное административное меню/ОБЪЕКТЫ/Сценарии жмем кнопочку Добавить новый сценарий. В поле Название пишем: HDMI-matrix1 В поле Описание пишем: Выбор входа для OutA канала, матрицы 1. И нажимаем кнопочку Добавить. После этого у вас откроется полное окно редактирования сценария. В разделе Код выберите PHP и скопировав отсюда, вставьте в это поле следующее: $in_matrix1=»»; $status_in1=gg(«Hall.tv1_in1»); $status_in2=gg(«Hall.tv1_in2»); $status_in3=gg(«Hall.tv1_in3»); $status_in4=gg(«Hall.tv1_in4»); if ($status_in1==1) { $in_matrix1=’tv1_in1′; } elseif ($status_in2==1) { $in_matrix1=’tv1_in2′; } elseif ($status_in3==1) { $in_matrix1=’tv1_in3′; } elseif ($status_in4==1) { $in_matrix1=’tv1_in4′; } brLinkCommand($in_matrix1);

После того как вставите, нажмите на кнопочку Сохранить. Все, наш сценарий готов.

Код примитивный и не красивый, но на данном этапе он сложнее и не нужен, сейчас главной нашей задачей является разобраться как вообще выглядит типовой сценарий.

Давайте разберемся.

В строчке: $in_matrix1=»»;

мы объявляем пустую переменную in_matrix1 которую далее будем использовать для подстановки имени команды RM.

В этих строчках: $status_in1=gg(«Hall.tv1_in1»); $status_in2=gg(«Hall.tv1_in2»); $status_in3=gg(«Hall.tv1_in3»); $status_in4=gg(«Hall.tv1_in4»);

Мы записываем в четыре переменных status_in1status_in4 текущее состояние блока OutA нашей матрицы. Посмотрим на примере первой переменной. Помните, когда я рассказывал как устроена структура, упоминал про функции gg и sg, так вот, функцией Гет Глобал: gg(«Hall.tv1_in1»); мы из свойства Hall.tv1_in1 считываем его текущее значение, проще говоря 0 или 1. На Hall пока не смотрите, он просто указывает на то что устройство отображения находится в зале. Таким образом значения мы считываем у всех 4 свойств.

Далее, путем не хитрой проверки: if ($status_in1==1) { $in_matrix1=’tv1_in1′; } elseif ($status_in2==1) { $in_matrix1=’tv1_in2′; } elseif ($status_in3==1) { $in_matrix1=’tv1_in3′; } elseif ($status_in4==1) { $in_matrix1=’tv1_in4′; }

мы находим ту самую единственную виртуальную кнопку из четырех, у которой значение 1(Вкл). И записываем ее имя в переменную in_matrix1 которую заготовили в самом начале. Проще говоря, если у нас включен tv1_in3, то именно tv1_in3 и запишется в in_matrix1. Вот прямо так, как есть и запишется tv1_in3.

Ну и наконец мы отправляем команду нашему RM чтобы он ”стрельнул” по матрице необходимым нам кодом: brLinkCommand($in_matrix1);

А теперь уж совсем по простому.

У нас есть 4 виртуальных кнопки(их устройство мы разберем далее). Просто знайте что только одна из 4 в один момент времени может быть ВКЛ, т.е. иметь значение 1. У остальных трех всегда будет 0. В нашем случае это АКСИОМА! Мы жмем на кнопку №2 ее значение меняется на 1, у остальных, тут же, значение меняется на 0. И сразу после этого запускается наш сценарий который выберет из 4 возможных нужное нам имя команды для RM, запишет его в переменную in_matrix1. Которая посредством команды brLinkCommand($in_matrix1); отправит с RM нужный код (который хранится у нас под именем tv1_in2) на матрицу.

По этому же принципу мы реализуем и второй сценарий для OutB , просто меняем в нем tv1_… на tv2_… а $in_matrix1 на $in_matrix2. В имени тоже не забудем 1 поменять на 2. В принципе, это может быть и продолжением первого сценария. В моем случае, разбил это на два сценария, и положил в отдельную категорию, мне, просто, так удобнее. Вы делайте как удобнее вам.

Боле того, сюда же(не зависимо от того какой подход вы выберите) можно будет, потом, добавить сценарии и для второй матрицы…

Позже, когда придет понимание, код можно будет сделать гораздо красивее, но об этом как нибудь потом. Пока оно и так прекрасно работает.

Как видите, все сложно только на первый взгляд, одна практическая попытка и от сложностей не остается и следа.

Реализуем способы управления.

Давайте теперь рассмотрим, на примере голосовых команд(так интереснее), как же реализован наш виртуальный четырех кнопочный переключатель. Для этого идем в: Главное меню/ОБЪЕКТЫ/Шаблоны поведения.

Сделаем четыре трехуровневые, голосовые команды:

  • Уровень первый: Алиса — Это команда ключ активирующая ввод с микрофона(она уже создана на уровне приложений).
  • Уровень Второй: Монитор в зале.
  • Уровень третий (названия устройств я выбрал наобум)
  1. Компьютер.
  2. Сервер.
  3. Смарт.
  4. Ресивер.

Так это выглядит схематично, а вот так в жизни:

— ”Алиса, монитор в зале ресивер.” или — ”Алиса, монитор в зале сервер.”

На что вы получите ответ: — ”Сделано!” и нужную картинку на мониторе.

Если после слов: Монитор в зале вы запнетесь Алиса попросит у вас: -”Выберите источник?”. Скажете, например: — ”Алиса, Ресивер”. На мониторе увидите ресивер и услышите:  — ”Сделано!”. Передумаете и промолчите, через 10 секунд услышите в ответ: -«Ну, не хотите как хотите…». Это называется контекстное поведение. Т.е. Алиса (MajorDoMo), может общаться с вами не только в режиме команд, но так же и в режиме диалога. Иногда это выглядит довольно забавно.

Приступим.

Находясь в пункте: Шаблоны поведения создаем новый шаблон, кнопка: Добавить новую запись с именем: Монитор в зале

В поле шаблон пишем: монитор в зал(е|и)

В поле Kод. PHP:

sayReply(‘Выберите источник’,10);

Ниже ставим галочку: Использовать как контекст

В поле: время ожидания команды ставим: 10

И в поле: По истечении выполнить пишем: sayReply(‘Ну, не хотите как хотите…’,10);

Жмем внизу синюю кнопку: Сохранить

Все, наш второй уровень готов, приступим к третьему.

Снова идем в: Шаблоны поведения и создаем новый шаблон.

Доступно в контексте: Монитор в зале

Название: компьютер

Шаблон: (компьютер)

Код, PHP: $zero=0; $one=1; sg(‘Hall.tv1_in1’,$one); sg(‘Hall.tv1_in2’,$zero); sg(‘Hall.tv1_in3’,$zero); sg(‘Hall.tv1_in4’,$zero); runScript(‘HDMI-matrix1’); sayReply(«Компьютер выведен на дисплей»,10);

Жмем кнопку Сохранить.

Теперь взглянув на код вы без труда увидите как задаются статусы кнопок(одна включена/три выключены).

Далее по такому же принципу создаем шаблоны: сервер, смарт и ресивер. Думаю несложно догадаться что компьютер везде меняется на сервер, а в коде переменная one  передвигается на строчку ниже, то бишь вторая строчка будет sg(‘Hall.tv1_in2’,$one); а в первую запишем zero т.е.: sg(‘Hall.tv1_in1’,$zero); И т. д. Пока не сделаем все 4 шаблона.

Не забывайте выбирать контекст!

По такому же принципу, делаются и кнопки меню, и кнопки на сценах. Ну и таким же образом совсем несложно записать это все в отдельный сценарий. Здесь основополагающую роль играет именно код.

Напоследок попробуем ту самую, простенькую многоходовочку что я обещал в начале.

1. Делаем новый сценарий называем его: Обзор.

2. Добавляем в сценарий код: $zero=0; $one=1; $dev=»tv2_on_off»; brLinkCommand(‘tv_on_off’); sayReply(«Телевизор включен»,5); sleep(30); sg(‘Hall.tv1_in1’,$one); sg(‘Hall.tv1_in2’,$zero); sg(‘Hall.tv1_in3’,$zero); sg(‘Hall.tv1_in4’,$zero); runScript(‘HDMI-matrix1’); sayReply(«Компьютер выведен на дисплей»,10); sleep(30); sg(‘Hall.tv1_in1’,$zero); sg(‘Hall.tv1_in2’,$one); sg(‘Hall.tv1_in3’,$zero); sg(‘Hall.tv1_in4’,$zero); runScript(‘HDMI-matrix1’); sayReply(«Сервер выведен на дисплей»,10); sleep(30); sg(‘Hall.tv1_in1’,$zero); sg(‘Hall.tv1_in2’,$zero); sg(‘Hall.tv1_in3’,$one); sg(‘Hall.tv1_in4’,$zero); runScript(‘HDMI-matrix1’); sayReply(«Смарт выведен на дисплей»,10); sleep(30); sg(‘Hall.tv1_in1’,$zero); sg(‘Hall.tv1_in2’,$zero); sg(‘Hall.tv1_in3’,$zero); sg(‘Hall.tv1_in4’,$one); runScript(‘HDMI-matrix1’); sayReply(«Ресивер выведена на дисплей»,10); sleep(30); brLinkCommand(‘tv_on_off’); sayReply(«Телевизор выключен»,5);

И сохраняем его кнопкой Сохранить.

3. Обучаем наш RM команде tv_on_off кнопка включения/выключения телевизора на его пульте.

4. Выключаем телевизор кнопкой с его пульта. Возвращаемся в Сценарии, жмем значок молнии напротив сценария Обзор, подтверждаем действие в выскочившем окошке и смотрим на телевизор. Он включится, скажет об этом, покажет нам по 30 секунд, каждый источник подключенный к матрице, а затем выключится и скажет об этом.

Вот, примерно, таким образом можно делать сколь угодно сложные сценарии.

На сегодня достаточно, думаю матрица вас не сильно утомила. Дальше будет веселее. 😀

А в следующей статье мы немного расслабимся и поговорим об одном из вариантов публикации нашего сервера в Интернет.

Встречайте, сервис VPNKI.RU!

От Ovcher