ComBox
Описание продуктов ComBox T по ссылке
Модуль обеспечивает:
- периодический опрос сервера VMS Combox на наличие от камеры событий
"type" : "lotsObjects"
- парсинг событий по типу и номеру камер
- передача в платформу сигнала по заданным параметрам о фиксации движения объекта (детеккция движения).
Установка модуля
Для установки модулей на хосте требуется наличие JRE (от 21.x и выше). Также доступен docker-образ.
Для установки в качестве демона-Linux необходимо :
- Создать директорию /opt/combox-gate и поместить в нее jar модуль, application.yml
mkdir /opt/combox-gate
cp combox-gate.jar /opt/combox-gate
cp application.yml /opt/combox-gate
- Создать директорию для логов:
mkdir -p /var/log/combox-gate
Настроить к ней путь в конфиге application.yml:
logging:
file:
path: /var/log/combox
name: combox.log
config: classpath:logback-spring.xml
level:
root: ERROR
stat: INFO
ru:
infsys: DEBUG
org:
springframework:
web: ERROR
# Можно смотреть транзакции логом ниже (поставить TRACE уровень)
transaction:
interceptor: ERROR
- Создать символьную ссылку в директории /etc/init.d
cd /etc/init.d
chmod +x /opt/combox-gate/combox-gate.jar
ln -s /opt/combox-gate/combox-gate.jar combox-gate
- Перечитать списко сервисов linux
systemctl daemon-reload
- Запуск и остановку сервиса можно осуществлять стандартными командами, т.е.
service combox-gate start
service combox-gate status
service combox-gate stop
Запуск с командной строки:java -jar <модуль>.jar
Настройка модуля
Ниже представлен типовой конфиг application.yml
с описанием секций
sserver:
# обязательно указать порт свободный где будет стоять модуль
port: 8091
servlet:
context-path: /combox-gate
error:
include-message: always
spring:
application:
name: combox-gate
main:
allow-circular-references: true
# профили логирования, console - вывод в консоль, file - вывод в файл
profiles:
active: file
# сериализация Date в unix timestamp (см. https://github.com/FasterXML/jackson-databind/wiki/Serialization-Features)
jackson:
serialization:
write-dates-as-timestamps: true
# уровни логирования модулей
logging:
level:
root: INFO
# Параметры настройки на Combox
combox:
rest:
# url api
url: http://127.0.0.1:8000/
# сервис поддерживает basic авторизацию
user: user
password: password
# подключение к рест-сервисам inspark (должен заканчиваться слэшем)
rest:
url: http://localhost:8080/sem-restservices/
user: user
password: password
extSystemId: COMBOX1
# параметры подключения к артемис inspark
artemis:
url: tcp://localhost:61616
user: artemis
password: password
# количество потоков в пуле для отправки JMS-сообщений
senderThreads: 8
# настройки очередей (см. имена свойств и дефолты в lib-gate)
queue:
measure:
destination: jms.queue.Measure
# параметры интеграции
integration:
# Настройка стандартных топиков каналов устройства Combox в Semnext
channels:
camName: cam_name # название камеры
camOnline: cam_online # работоспособность камеры (1 - работоспособна)
noPeople: no_people # отсутствие людей (1 - отсутствуют, 0 - зафиксированы двигающиеся объекты)
# эмулятор заменяет сервис получения камер комбокс на эмулируемые для всех устройств данные, раз в 3 минуты шлет по ним события
emulator: true
Настройка в платформе
- Создать Провайдера (например ID = COMBOX1).
- Запрашиваются с COMBOX список камер (см. файл конфигурации):
http://<combobox.rest.user>:<combobox.rest.password>@<combobox.rest.url>/camera/list
- В Секции Устройства внешней системы зарегистрировать ID устройств, для Combox это
displayId
камеры - Связать каждый
displayId
с экземпляром устройства платформы. - Запустить combox-gate в режиме интеграции
Алгоритм работы модуля
- Запрашиваются все устройства для внешней системы которую обслуживает шлюз rest.extSystemId
- Запрашиваются с COMBOX список камер
- Сопоставляются по идентификаторам камер доступные камеры в платформе и Combox, по следующему алгоритму:
- если камера есть в обоих списках и в Combox камера активна (свойство isActivated=true), в платформу отправляется значение для имени камеры и статуса;
- если камера есть в Combox, но не зарегистрирована в Провайдере осуществляется запись в лог модуля.
- Действия 1-3 повторяются периодически каждые 10 минут.
- Модуль находится в режиме ожидания событий от Combox по адресу:
http://<адрес сервра>:<server.port>/<server.servlet.context-path>/event
При обнаружении события Combox присылает POST запрос с телом:
{
"displayId": "6",
"peopleCount": 107
}
где "displayId" идентификатор камеры на котором обнаружено событие, "peopleCount" количество обнаруженных людей.
6. Модуль обрабатывает событие от Combox по следующему алгоритму:
- peopleCount < 1 в Semnext отправляется в топик no_people = 1
- peopleCount > 1 в Semnext отправляется в топик no_people = 0
- если получено любое значение и камера есть в Semnext и на момент 1-3 ее не было в Combox или она в Combox не активна (свойство isActivated=true) то в Semnext отправляется значение для параметра на основании топиков в конфиге camOnline - 1
Проверка работоспособности модуля
Достаточно выполнить настройки в платформе
Используя curl шлем события
curl -X POST http://<адрес сервра>:<server.port>/<server.servlet.context-path>/event -H "Content-Type: application/json" -d '{"displayId": "6","peopleCount": 107}' --user "<combobox.rest.user>:<combobox.rest.password>"
Проверяем что если указываем peopleCount < 1, то параметр с топиком noPeople должен быть в 1 и 0 в противном случаи.
Если спсиок камер не загружен из Combox, дополнительно проверяем значение параметра для топика camOnline - 1.
Эмулятор
Можно включить эмулятор событий с камер, emulator = true. В этом случае для каждого устройства платформы будет создана фейковая камера, раз в 3 минуты будут приходить события наличия/отсутствия людей.