Опрос


Что для Вас Умный Дом?


Результаты

Вывод на экран ТВ сообщений Умного Дома через OpenBox HD

22/09/2011 23:42:45

Плагины обновлены 11.07.2015

Идея отображения на экране телевизора сообщений "Умного Дома" подсказана пользователем stpavel на форуме сайта. stpavel предложил отображать номер входящего телефонного звонка, который передается программной IP PBX Asterisk. В своем доме он использует спутниковый ресивер IPBox 910, который имеет возможность вывода на экран произвольного текста на уровне операционной системы. В моем OpenBox HD S5 (а позже SX6) такой возможности нет, а значит... ее нужно сделать.

Я поставил задачу немного шире. Неплохо было бы отображать на экране ТВ не только номера входящих звонков, но и другую информацию, которую Умный Дом посчитает важной. Например, можно отображать изображение с камеры вызывной панели домофона, когда с нее идет вызов, сообщать о критических ситуациях в работе систем, выводить информацию о температуре, опасном прогнозе погоды ("ожидается штормовая погода"), включении/выключении каких нибудь важных элементов дома ("включено отопление") и т.д. Речь не идет о выводе больших объемов текста, занимающих весь экран и мешающих просмотру фильмов. Имеет смысл выводить короткие сообщения на полупрозрачном фоне длительностью не более 10-15 секунд.

Для реализации поставленной задачи мне потребовалось установить компилятор для процессора STi, который используется в ресиверах OpenBox HD. Я использовал компилятор SH4 gcc от дистрибутива STLinux, установив средства разработки поверх Debian. Вообще установка STLinux на Debian не прошла гладко и потребовались некоторые манипуляции в ручном режиме. Также я скачал описание и библиотеку Fortis Plugin API, с помощью которой создавались плагины.

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

/var/bin/showtext -t 'Incoming call: 84956063602'

Вывод на экран OpenBox HD произвольного текста
Выводим на телевизор номер входящего звонка

Эта программа работает в ресивере, а значит ее нужно запускать удаленно с сервера. Для этого можно воспользоваться простым 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. Статья на эту тему уже почти написана и появится на сайте в ближайшие дни. Необходимо вывести изображение с камера вызывной панели на телевизор в момент когда была нажата кнопка вызова. Таким образом 50" плазма превращается в монитор домофона. Для этой задачи мне пришлось немного разобраться в принципах работы с изображениями на уровне 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 HD
Вместо Владимира Владимировича можно вывести на канале Русская Ночь изображение с домофона.

Вообще, конечно, существуют плагины для 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>]

Для ресиверов Openbox S5/S7/S8
Плагины доступны для скачивания (разработаны на API 1.10, только для версий прошивки 1.9.30 и выше):
showtext (Ver 0.1)
showpic (Ver 0.1)

Для ресиверов Openbox SX4/SX6
Плагины доступны для скачивания (разработаны на API 1.22):
showtext (Ver 0.2)
showpic (Ver 0.2)

Внимание! Для корректной работы плагина showtext необходимо загрузить файл шрифта sfam.ttf в папку /var/etc ресивера!

Пример использования программы 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
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



Добавить комментарий:



Сортировка комментариев: Последние сверху | Первые сверху

2015-07-24 18:45:24 | kodr
Опишите пожалуйста полный процесс сборки плагина и содержание Ваших програм. Хочется проделать тоже самое для Fulan Spark. Если получится поделюсь.


2015-07-11 11:00:59 | Andrey_B
Проверил. Немного подправил плагин. Но теперь нужно, чтобы файл шрифта sfam.ttf лежал в папке /var/etc


2015-07-05 10:04:54 | Andrey_B
Александр, прошу прощения, еще не смотрел, но обязательно проверю.


2015-07-03 14:25:19 | Адамовский Александр
С плагином вывода текста для Openbox SX6 ничего не получилось?


2015-05-24 01:17:01 | Роман
Здравствуйте Andrey_B! Благодарю Вас за интересные статьи, идеи которых, после воплощения в реальность, делают "ВопЛАтИтеЛЕй" немного счастливее . Я владею OPENBOX S9 HD PVR и полагаю он идентичен S5. Не могли бы Вы прописать пример (при помощи команды telnet) для OPENBOX S9 HD PVR:
1) Пробуждение (идентично на пульте)
2) Переключение на 215 канал.
3) Переключение каналов "Ch Up" "Ch Down"
4) Выключение (идентично на пульте)
или возможно использовать другой способ дистанционного включения (выключения, управления) ресивера?
P.S. Ресивер подключен на прямую через RS 232.


2015-05-23 10:26:34 | Andrey_B
Александр, хорошо, проверю.
Напишу, если что-то получится.


2015-05-22 10:11:23 | Адамовский Александр
Приобрел Openbox SX6, попробовал Ваши плагины - вывод изображения работает, а вот вывод текста нет. Вы не могли бы посмотреть, может нужно обновить плагин. Прошивка у меня стоить последняя, пробовал откатываться на пред-пред-пред-последнюю - та же история.


2012-11-28 13:11:57 | Александр
У Galaxy Innovations крайняя прошивка ver. 1.10.57 от 08.06.2012. Значит причина не в версии API, а в опеновской реализации ПО. Ранее тоже не все плагины от опенов запускались. Буду мучать STLinux 2.4


2012-11-27 23:27:59 | Andrey_B
Александр, обновил прошивку ресивера до 1.11.18 (последняя на текущий момент для S5). Плагины работают без проблем, в том числе вывод картинки. Я ставил STLinux 2.4


2012-11-27 10:36:30 | Александр
Да все так. По поводу viewcam, я думаю если при звонке с вызывной панели подавать на тв видео пусть даже таким несовершенным псевдо-видео способом wget jpeg с частотой 2-4 кадра в секунду на время, пока не будет открыт замок или просто секунд на 10-20, ничего страшного с процессором ресивера не произойдет. Все поинтересней, чем статический кадр :) . Да и еще вопрос - какой версией STLinux Вы пользовались. Я пытаюсь прикрутить 2.3. Может есть смысл попробовать 2.4?


2012-11-27 00:09:11 | Andrey_B
Александр, я устанавливал STLinux на Debian. Ну, конечно поплясал с бубном, прочел магические заклинания, потеребил амулеты, все как положено. Часа два ушло наверное. Что конкретно делал не помню. Но факт в том, что получилось. У меня обе программы работают, но прошивка не последняя. Беру таймаут. Так как телевизор оккупирован домочадцами (я то его смотрю только когда футбол... там или биатлон), нужно выбрать время, чтобы обновиться и протестировать. Если работать не будет, я свяжусь с вами, чтобы получить новый API.
viewcam, конечно, видел пару лет назад. Не знаю как сейчас, а тогда для передачи данных использовалась программа wget, которая скачивала на ресивер в цикле jpeg-файлы. Как-то мне это не очень понравилось, учитывая температуру процессора и вообще load avarage ресивера. Может сейчас по-другому.
Что касается фантастики, то оно, то есть светлое будущее, уже близко. Только не с нашими ресиверами. Я думаю, через поколение-два (ресиверов, конечно) пойдут полноценные такие linux/android/бог-весть-что-еще-системы с клиентами IP-телефонии, браузерами, почтами и всем-таким прочим. Просто сейчас спрос еще не до конца созрел. Как только народ постепенно начнет со спутников уходить в IP-телевидение, наши восточные братья выпустят все что нужно для чтобы "назад в будущее-2" перестало было фантастикой ;)


2012-11-26 15:32:51 | Александр
Здравствуйте. У меня спутниковый ресивер GI S8290 - аппаратный клон Вашего Openbox S5. Плагин showtext работает идеально. А showpic не работает. Автору огромный респект. Даже по хронологии записей на форуме, можно судить как оперативно Вы работаете. Я новичок в кросс-компиляции, но тоже решил попробовать. Все никак не могу разобраться с установкой STlinux на федору, уже разные версии пробовал 11, 14, 17… некорректно отрабатывает родной скрипт установки install all-sh4-glibc, по пакетам устанавливать очень муторно – много критичных зависимостей… stmyum поставил – тоже не устанавливает запрашиваемые rpm. Пока разбираюсь.
Вы делали плагины под Fortis Plugin API версии 1.10, который работает с версиями прошивки 1.9.30 и выше. Сейчас актуальный API v1.13.1 – в инете еле нашел на иорданском сайте любителей спутникового тв, с помощью онлайн-переводчика с арабского прошел там регистрацию и скачал-таки этот последний англоязычный API. Могу выслать Вам на почту, чтобы Вы могли доработать плагин showpic (если захотите, Вы на ресивере, наверное, тоже прошивки периодически обновляете). Также, если это возможно, прошу выложить на сайте или выслать на мейл исходники Ваших плагинов. И еще такая мысль – для ресиверов нашей платформы есть плагин (причем с сырцами) viewcam (сделан фанами Octagon), там реализован вывод изображения на экран ТВ с онлайн-видеокамер, дающих картинку в формате mjpeg. Пройдя через Zoneminder у Вас видеопоток из аналогового PAL/NTSC кодируется в цифру и в принципе его уже можно привести к любому виду. Вопрос – можно ли выводить на экран ТВ не только фото, но и видео и (из области фантастики) сопровождать все это воспроизведением поточного аудио с вызывной панели через астериск и какой-нибудь транскодер?


2012-10-06 15:25:49 | Andrey_B
Акаль, действительно для вашей камеры необходимо устройство видеозахвата. Любое, которое поддерживается в Linux. Выбираете любую модель и прежде чем покупать проверяете в Интернете - есть поддержка в Linux.
Я лично использую платы захвата на базе Philips SAA7134/SAA7135 и Brooktree/Conexant BT878


2012-10-06 11:37:21 | Акаль
Андрей, скажите а каким образом подключить камеру с домоф.панели к компьютеру с linux и zoneminder? Для этого нужна плата видеозахвата? Какие платы видеозахвата с USB для этого подойдут? Что нужно для подключения камеры KPC-VBN190PHDV в таком же случае?


2012-09-12 17:34:01 | Andrey_B
Vladimir, а они нужны? В принципе, там ведь все достаточно просто.


2012-09-11 22:40:00 | Vladimir
Супер. Сорсы будут?


2012-08-17 21:38:39 | Dima
супер, попробовал на OpenBox HD S4 - работает!