Содержание

Авибус: Универсальный дисплей

«Авибус: Универсальный дисплей» – это приложение, отображающее динамической контент из АСУ на дисплее (например, табло рейсов, табло расписания, дисплей покупателя, рекламный дисплей или даже прогноз погоды). Приложение может работать как на рабочих компьютерах, так и на мини компьютерах под управлением ОС Windows, Linux (основанные на Debian).

Примеры некоторых экранов приложения:

direct&512

Табло расписания автовокзала

direct&512

Табло отправлений/прибытий автовокзала

direct&512

Дисплей покупателя: выбор рейсов

direct&512

Дисплей покупателя: выбор мест

direct&512

Дисплей покупателя: оплата заказа

Архитектура приложения

Приложение содержит модуль отображения web-страниц и видео на экране монитора. Обмен данными с отображаемой web-страницей и сервером 1С осуществляется через клиент-серверный модуль, поддерживающий протокол SOAP. Также в приложении существует модуль автоматического выполнения действий в соответствии с файлом конфигурации.

Контекст – конкретная web-страница, видео ролик, представляет из себя конкретный файл, например Дисплей_покупателя_рейсы.html, Логотип_автовокзала.html, Реклама_автовокзала.avi;

direct&676

Установка (Windows)

Для работы требуются компоненты Microsoft Visual C++ Redistributable Package.

Необходимо распаковать содержимое архива в любую папку, далее – скопировать файлы контента из папки demo_content в рабочую папку: %localappdata%/unidisplay/. При запуске unidisplay.exe создастся файл настроек unidisplay.ini в папке: %appdata%/unidisplay.

Для регистрации информационного дисплея на сервере 1С необходимо запустить его один раз и завершить выполнение программы. В системе будет создан информационный дисплей Администрирование – Настройки «Управление автовокзалами» – Информационные дисплеи .

Далее необходимо настроить созданный информационный дисплей.

Вид табло – определяет наборы данных, доступных для информационного дисплея.
Наименование – название информационного дисплея.
Пользователь – указывается пользователь, от имени которого будет авторизоваться информационный дисплей.
Источники данных – указываются Остановка или Рабочее место для получения изменяющихся данных, например, данные от рабочего места кассира для режима дисплей покупателя.

Режимы работы приложения

По определенным событиям сервер 1С инициирует передачу данных с идентификатором их типа универсальному дисплею. Эти данные сохраняются в буфере и доступны по запросу html страницы отображаемой на универсальном дисплее.

Также от сервера 1С могут передаваться команды прямого управления для включения того или иного контекста, установки параметров универсального дисплея и т.д.

Помимо режима получения команд от сервера 1С, приложение может работать в автономном режиме, правила автономной работы описываются в конфигурационном файле default.rules в папке приложения.

При первом старте универсальный дисплей регистрируется на сервере 1С «Авибус: Управление автовокзалами» и становится доступным для настройки через интрфейс 1С.

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

В каждый момент работы приложение отображает один конкретный контекст: web-страницу или видеоролик. Команда отображения контекста, переданная от сервера, имеет приоритет и выполняется незамедлительно. Некоторые контексты имеют приоритет и могут быть переключены только вручную, например, контекст экстренных сообщений.

При отображении контекста, представляющего собой динамическую web-страницу, изменяющуюся информацию от сервера web-страница получает при помощи опроса локального web-сервиса приложения. Пример использования с jQuery Soap:

$.soap({
    url: 'http://localhost:8080/display/',
    method: 'getData',
    namespaceQualifier: 'ns',
    namespaceURL: 'urn:display',
    data: {key: 'schedule_table'},
 
    success: function (soapResponse) {
        // обработка soapResponse
 
        $data = $(soapResponse.toString()).find("ns\\:data");
        xmlDoc = $.parseXML(Base64.decode($data.find("data").text()));
        $xml = $( xmlDoc );
        makeBoard($xml);
        departVer = Number($data.find("ver").text());
    },
    error: function (SOAPResponse) {
        // обработка ошибки
    }
});

Данные, отправляемые сервером 1С самостоятельно или по запросу приложения, помечаются идентификатором, каждая новая порция данных с одним и тем же идентификатором перезаписывает старую и увеличивает на единицу номер версии данных. Доступны следующие виды данных:

На каждый экран можно вывести консоль отладки по горячей клавише Ctrl+Shift+L, чтобы закрыть ее необходимо нажать клавишу Esc.

Основные настройки

Все основные настройки приложения хранятся в текстовом файле unidisplay.ini в папке %USERPROFILE%/AppData/Roaming/unidisplay/.

Пользователь, от имени которого авторизуется универсальный дисплей, должен состоять в группе доступа с профилем Информационный дисплей

[General]
;URL сервера 1С "Авибус: Управление автовокзалами"
remote_server_url=http://demo.avibus.pro/albatros/ws/UDisplayPort/

;Порт локального web-сервиса
local_server_port=8080

;Настройки номера экрана
screen=\.\DISPLAY1

;Указание пути расположения медиаплеера, можно использовать относительный путь
player=mplayer/mplayer.exe

;Пользователь 1С от имени которого работает универсальный дисплей
license_server_user=wsuser

;Пароль пользователя 1С
license_server_passwd=sales

;Интерфейсе на котором запускается веб-сервис
target_subnet=192.168.0.0/24

;Принудительная установка id клиента, по умолчанию заполняется MAC-адресом
client_id=00:00:00:00:00:00

;Файл конфигурации сценария работы
rules_file=default.rules

;Уровень логгирования, 4-отключен
log_level=0

Файл конфигурации

Файл конфигурации описывает правила автономной работы приложения. Правила описываются как простые тригеры (событие, условие, действие).

События:

Условия и переменные:

Действия: quit

Примеры правил:

[emergency_alert]
event: on_data_modified "alert"              ;событие изменения данных с id "alert"
condition:                                   ;условие отсутствует
action: show_context("html/alert.html")      ;отобразить экран с предупреждением
 
[show_adv_after_customer_display]            ;показ рекламы после дисплея покупателя
event: on_context_time "120"                 ;простой контекста в течении 120 секунд
condition: context = "customer_display.html" ;текущий контекст равен customer_display
action: {
        playlist (["ad1.avi","ad2.avi":10])  ;проиграть плейлист
        }
 
[show_hello_logo]                            ;показать приветственный логотип
event: on_time "55 7 * * *"                  ;время 7:55 утра каждого дня
condition:                                   ;условие отсутствует
action: {
        show_context ("adv_logo.html")       ;отобразить контекст adv_logo.html
        delay (25)                           ;задержка 10 секунд
        show_context ("board_table.html")    ;отобразить контекст табло автовокзала
        }
 
[turn_on_standby_lights]                     ;правило дежурного освещения
event: on_time "00 20 * * *"                 ;время 20:00 каждого дня
condition:                                   ;условие отсутствует
action: {
        show_context ("standby_lights.html") ;отобразить контекст standby_lights
        }