Сервер обработки телеметрии

В отличии от предыдущего проекта СКУД, где клиентские сервисы напрямую подключались к БД, в этом проекте общение происходит через главный web сервер системы, разработанный специально для нее. Особенностью данного сервера является перенос обслуживания обращений за текущими данными в оперативную память демона, что освобождает БД от рутинной работы и значительно уменьшает нагрузку на нее. В частности, это сильно помогает при обмене "видео" изображением с камер.

Роль СУБД, в этой связке, - хранение информации и принятие решений. Действия определяются как на уровне настроечных записей в БД (прописаные настройщиком реакции), так и с помощью дополнительного функционала "функции датчиков", позволяющие производить подмену значений, и исполняемые процедуры, определяемые настройщиком.

Обмен данными с сервисными программами

Для общения с клиентскими программами был выбран протокол http. Авторизация служит не только для контроля доступа, но и для определения списка ресурсов (групп устройств), доступных этому соединению. Данные возвращаются в текстовых форматах, легко поддающихся парсингу без использования дополнительных библиотек.

Запрос списка линий

http://user:password@server:port/conn.asp

l=33;t=6;p=/dev/ttyAMA0
l=35;t=7;p=/sys/bus/w1/devices/w1_bus_master1

где:

В приведенном примере типы линий - сеть устройств на UART интерфейсе Raspberry Pi и линия 1 wire устройств.

Запрос данных для передачи в линии устройств

http://user:password@server:port/data.asp

L=35;A=01;C=o;D=0000FF;
L=35;A=01;C=o;D=010000;

где:

Отправка данных на сервер

http://user:password@server:port/pin.asp?l=%LINE%&a=%ADDR%&c=%CMD%&d=%DATA%

где:

Запрос списка камер для обработки

http://user:password@server:port/cams.asp

%id%=%url%

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

Ответ по обработанному изображению

http://user:password@server:port/cams_ep.asp?id=%id%

Отправка обработанного изображения на сервер в виде POST формы с двумя полями - prewiew и image. Ширина меньшего изображения - 640 точек.

%id% - номер камеры из предыдущего запроса.

Тексты для озвучки или иного вывода

http://user:password@server:port/speaker.asp

%some text%
%some text%
...
%some text%

Очередь текстов возвращается построчно. Кодировка - UTF-8.

Обобщенный запрос данных для робота

http://user:password@server:port/fd.asp?v=%version%
[CONN]
l=33;t=6;p=/dev/ttyAMA0
[VERS]
5
[DATA]
L=35;A=01;C=o;D=0000FF;
L=35;A=01;C=o;D=010000;
[TEXT]
Однажды, в студенную зимнюю пору, я из лесу вышел
[CAMS]
3=http://192.168.2.55/live.jpg

В случае "продвинутого" робота, умеющего выполнять все действия, запрос данных выполняется сразу по всем темам, что значительно повышает интенсивность обмена.

Для проверки наличия обновлений в списке линий, осуществляется двухсторонний обмен номерами версий. Клиент, каждый раз, передает номер версии, имеющегося у него списка линий.

Разделы, данные в которых отсутствуют, сервером не возвращаются.