22/09/2011 23:42:45
Идея отображения на экране телевизора сообщений "Умного Дома" подсказана пользователем stpavel на форуме сайта. stpavel предложил отображать номер входящего телефонного звонка, который передается программной IP PBX Asterisk. В своем доме он использует спутниковый ресивер IPBox 910, который имеет возможность вывода на экран произвольного текста на уровне операционной системы. В моем OpenBox HD S5 такой возможности нет, а значит... ее нужно сделать.
Я поставил задачу немного шире. Неплохо было бы отображать на экране ТВ не только номера входящих звонков, но и другую информацию, которую Умный Дом посчитает важной. Например, можно отображать изображение с камеры вызывной панели домофона, когда с нее идет вызов, сообщать о критических ситуациях в работе систем, выводить информацию о температуре, опасном прогнозе погоды ("ожидается штормовая погода"), включении/выключении каких нибудь важных элементов дома ("включено отопление") и т.д. Речь не идет о выводе больших объемов текста, занимающих весь экран и мешающих просмотру фильмов. Имеет смысл выводить короткие сообщения на полупрозрачном фоне длительностью не более 10-15 секунд.
Для реализации поставленной задачи мне потребовалось установить компилятор для процессора STi, который используется в ресиверах OpenBox HD. Я использовал компилятор SH4 gcc от дистрибутива STLinux, установив средства разработки поверх Debian. Вообще установка STLinux на Debian не прошла гладко и потребовались некоторые манипуляции в ручном режиме. Также я скачал описание Fortis Plugin API версии 1.10, который работает с версиями прошивки 1.9.30 и выше.
В результате получилась небольшая программка, которая может выводить произвольный текст на экран телевизора.
/var/bin/showtext -t 'Incoming call: 84956063602'

Выводим на телевизор номер входящего звонка
Эта программа работает в ресивере, а значит ее нужно запускать удаленно с сервера. Для этого можно воспользоваться простым perl-скриптом от stpavel.
#!/usr/bin/perl
use Net::Telnet ();
$t = new Net::Telnet;
$host="192.168.0.12";
$user="root";
$t->open(Host => $host,
Port => 23);
$t->waitfor('/OpenboxS5 login:/i');
$t->print("$user");
$t->waitfor('/~ #/i');
$t->cmd("/var/bin/showtext -t '$ARGV[0]'");
Теперь для вывода входящего звонка, поступающего в Asterisk, нужно внести изменения в extensions.conf или extensions.ael (вариант stpavel).
[DID_trunk_1_default]
exten => s,1,System(/root/scripts/showtext.pl 'Incoming call: ${CALLERID(num)}' &)
exten => s,2,DIAL(SIP/102,20)
exten => s,2,Hangup()
Прекрасно, но мы пойдем еще дальше. Вызывная панель на калитке у меня подключена к Asterisk, а камера панели к ZoneMinder. Статья на эту тему уже почти написана и появится на сайте в ближайшие дни. Необходимо вывести изображение с камера вызывной панели на телевизор в момент когда была нажата кнопка вызова. Таким образом 42" плазма превращается в монитор домофона. Для этой задачи мне пришлось немного разобраться в принципах работы с изображениями на уровне API для OpenBox, а также с библиотекой libjpeg. В результате был написан plugin, который умеет выводить любое изображение на экран телевизора.
/var/bin/showpic -f /var/etc/input.jpg -s 25 -x 50 -y 70
Здесь -f (имя файла), -s (количество секунд), x (координата X на экране), y (координата Y на экране). Таким образом я могу по команде сервера (аналогично выводу текста) выводить изображение на экран телевизора с камер наблюдения, вызывной панели или любые другие картинки, заранее загруженные на сервер по протоколу FTP.

Вместо Владимира Владимировича можно вывести на канале Русская Ночь изображение с домофона.
Вообще, конечно, существуют плагины для OpenBox для просмотра JPEG и вывода текста, но все они управляются пультом. Мои же плагины полезны именно в системах домашней автоматизации, когда необходимо инициировать вывод на экран текста или графики с сервера с помощью telnet.
Параметры плагинов
Usage: showtext -t <"text"> [-s <seconds> -x <screen x> -y <screen y>] Usage: showpic -f <filename> [-s <seconds> -x <screen x> -y <screen y>]
Плагины доступны для скачивания (разработаны на API 1.10, только для версий прошивки 1.9.30 и выше):
showtext (Ver 0.1)
showpic (Ver 0.1)
Пример использования программы showpic. Вы закачали файл my_pic.jpg по FTP в каталог /var/etc/
Затем зайдите на ресивер через telnet и выполните команду:
/var/bin/showpic -f /var/etc/my_pic.jpg -x 50 -y 50 -s 20
Не забудьте установить права "+x" для запуска плагина с помощью telnet или файлового менеджера (Far, Total Commander)
Используя скрипт аналогичный приведеному выше для отображения номера входящего звонка, вы можете по какому-то событию отображать любые jpeg файлы: кадр с камеры наблюдения, фотографию человека, который зашел на территорию участка, авторизовавшись через 1-wire Touch Memory, графическое представление какого-либо сообщения от системы Умного Дома и многое другое. Файлы могут быть предварительно закачены в папку /var ресивера или же динамически загружаться по FTP в момент события. Так как ресивер подключен к Ethernet, процесс закачки файла и выполнения плагина занимает очень мало времени - менее секунды.
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.