SIGUR
Описание продуктов Sigur по ссылке
Установка модуля интеграции
Для установки модулей на хосте требуется наличие JRE (от 21.x и выше)
Создать директорию /opt/sigur-gate и поместить в нее sigur-gate.jar, application.yml
mkdir /opt/sigur-gate
cp sigur-gate.jar /opt/sigur-gate
cp application.yml /opt/sigur-gate
cp sigur-gate.conf /opt/sigur-gate
Создать файл сервиса /etc/systemd/system/sigur-gate.service следующего содержания:
[Unit]
Description=sigur-gate
After=syslog.target
[Service]
User=root
Group=root
ExecStart=/opt/sigur-gate/sigur-gate.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Перечитать список сервисов linux
systemctl daemon-reload
Запуск и остановку сервиса можно осуществлять стандартными командами, т.е.
service sigur-gate start
service sigur-gate status
service sigur-gate stop
Запуск с командной строки:
java -jar sigur-gate.jar
Модуль поддерживает два режима запуска
Чтение конфигурации SIGIR
Запуск в этом режиме выводит в лог информацию о доступных точках доступа SIGUR, для использования при конфигурировании в типовой конфигурации, команда:
java -jar sigur-gate.jar print
Штатная работа
java -jar sigur-gate.jar
Описание модуля
Модуль обеспечивает:
- обработку и передачу значений параметров и событий для которых настроена интеграция
- создание пропусков на проход через точки доступа для посетителей и персонала
- управление объектами доступа (посетителями и персоналом)
- получение информации о точках доступа
- управление подразделениями
Обработка и передача значений параметров и событий Sigur
Состав каналов устройства Inspark типа SIGUR которые по умолчанию модуль интеграции передает
в систему Inspark:
Имя канала | Тип | Описание |
---|---|---|
direct_in | импульсный | Количество входов, значение 1 если TEvent.PassMode (Режим прохода) равен 1 |
direct_out | импульсный | Количество выходов, значение 1 если TEvent.PassMode (Режим прохода) равен 2 |
access_obj | строковый | Информация об объекте связанным с событием на точке доступа |
event_CE | мгновенный | Код события SIGUR по точке доступа |
Инфо
Дополнительные параметры (кроме атрибутов по умолчанию), можно определить для каждого типа события указав канал и его значение.
При описании ТК, в схеме соединений в адрес устройства указывается идентификатор точки доступа в Sigur.
Для того чтобы получить идентификаторы устройств, необходимо запустить модуль в режиме печати конфигурации, в логе модуля будут выданы все доступные точки доступа и их идентификаторы для интеграции.
Пример лога с конфигурацией Sigur
Примечание
Идентификатором точки доступа, которую необходимо интегрировать с Inspark необходимо прописать в адресе схемы соединения в типовой конфигурации.
Настройка в модуле sigur-gate
Для настройки передачи событий из Sigir в Inspark необходимо в конфигурационном файле модуля для каждого события
(sigurEventTypeId) которое передается в Inspark определить (см. ниже пример интеграции события 31 Sigur):
- соответсвующее ему событие (semEventId)
- дополнительно определить шаблон сообщения
- канал устройств (semChannel) и значение (value) которое будет отправляться по событию.
sigurEventTypeId: 31 # Установка режима точки доступа "Заблокированный"
semEventId: 32231
semEventMessageTemplate: ТД $AP по направления $ZONE_IN - $ZONE_OUT заблокирована
semChannel: blocked
value: 1
Шаблон текста события, поддерживаются подстановки:
- $AP - наименование точки доступа;
- $ZONE_IN - зона со стороны входа точки доступа;
- $ZONE_OUT - зона со стороны входа точки доступа;
- $DIRECTION - код направления: с событием не связано никакое направление, выход, вход, «неизвестное направление»;
- $ACCESS_OBJ - название объекта доступа связанного с событием.
Управление пропусками
Данный функционал реализован в рамках проекта по управлению зданием A101.
Интеграционной шиной для данного процесса является RabbitMQ.
Модуль sigur-gate поддерживает следующие команды управления пропусками:
- ORDER - заказать пропуск;
- PASSES - получить список пропусков для заданного объекта доступа;
- INTERVAL - изменить срок действия пропуска;
- AP - изменить состав доступных точек доступа.
Модуль sigur-gate активизируется на управление пропуском при появлении сообщений в очереди "pass_request" заявок на
пропуск RabbitMQ. В очередь «pass_request» заявки отправляет ПО A101. В зависимости от команды выполняется ее обработка
описанная ниже.
Результат выполнения команды sigur-gate отправляет в очередь обработанных заявок "pass_response" RabbitMQ из которой
ПО A101 их забирает и далее обрабатывает по своему алгоритму.
Заказ пропуска
Алгоритм работы модуля по команде заказать пропуск
Модуль sigur-gate активизируется на создание пропуска при появлении сообщений с атрибутом command - ORDER.
Если заявка выполнена успешно, в ответе будет содержаться wiegand код (шестнадцатеричная строка) на базе которой
программным обеспечением вызвавшим создание пропуска генерится QR код, записывается BLE метка и пр.
Если wiegand код не сформирован, ответ будет содержать описание ошибки.
Таким образом Sigur обеспечивает проход по wiegand коду, задача считывателей и ПО А101 превращать его в
требуемый формат (QR, BLE, биометрику)
При обработке каждого сообщения очереди заявок на пропуск выполняются следующие действия:
- Шаг 1. Из тела сообщения выбрать тип пропуска посетитель или персонал.
- Шаг 2.1 Обработка заявки на пропуск посетителя:
- Шаг 2.1.1 Проверка на заполнение обязательных атрибутов для пропуска посетителя и существования точек доступа в Sigur,
в случаи ошибок переход к шагу 8. - Шаг 2.1.2 Проверка и создание карточки сотрудника в специальном отделе Sigur "Посетители". Если задан идентификатор
объекта доступа поиск по идентификатору, если не находит, возвращается ошибка. Если идентификатор не задан, поиск по
имени в посетителях и если не задан создание посетителя; - Шаг 2.2 Обработка заявки на пропуск персонала:
- Шаг 2.2.1 Проверка на заполнение обязательных атрибутов для пропуска персонала и существования точек доступа в Sigur,
в случаи ошибок переход к шагу 8. - Шаг 2.2.2 Если задан идентификатор объекта доступа поиск по идентификатору, если не находит,
возвращается ошибка, если найден переход к шагу 3. Если идентификатор не задан, поиск по имени в посетителях; - Шаг 2.2.3 Проверка существования отдела для сотрудника в Sigur. Поиск по идентификатору и если не найден
идентификатору, тогда поиск по имени и создание если отдел не существует. - Шаг 2.2.4 Проверка существования сотрудника в отделе, если сотрудника в отделе нет, создать сотрудника.
- Шаг 3. Создание пропуска с wiegand кодом в котором facility code - идентифкатор сотрудника в Sigur,
card number - идентифкатор заявки - Шаг 4. Связать созданный пропуск с сотрудником
- Шаг 5. Создать правило доступа для точек доступа указанных в заявки на пропуск
- Шаг 6. Связать правило доступа с сотрудником
- Шаг 7. Отправить ответ в очередь ответов с wiegand кодом пропуска для сотрудника и идентификатором заявки, завершить
выполнение обработки - Шаг 8. Отправить ответ в очередь ответов с идентификатором заявки и описанием ошибки почему пропуск не выписан,
завершить выполнение обработки.
Правила генерации wiegand кода
- шестнадцатеричное представление - каждый байт числа представляется в шестнадцатеричном коде двумя символами в строке, если меньше, тогда добавляется 0, например 10 - A - 0A;
- facilityCode генерится как шестнадцатеричное представление идентификатора персонала в Sigur;
- cardNumber генерится как шестнадцатеричное представление идентификатора заявки на пропуск в A101;
- идентификатор - соединение facilityCode и cardNumber
- facilityCode и cardNumber в соответствии с форматом имеют свою длину в байтах, если шестнадцатеричная строка в байтах меньше этой длины, тогда слева дополняется 0 до ее размера в байтах, например 100 длиной в 2 байта 64 - 0064, если больше, то обрезается слева до ее размера в байтах, например 1000 длиной 1 байт 03E8 - E8
- W58DEC идентификатор W58 переводится в число и идентификатор представляется как его десятичное представление
Поддерживаемые форматы wiegand
Wiegand — простой проводной интерфейс связи между устройством чтения идентификатора (карточки) и контроллером.
Форматы Wiegand, различаются цифрами в названии интерфейса. Эта цифра в названии обозначает количество бит в посылке
контроллеру.
Идентификатор Wiegand состоит из Facility Code (код объекта) и Card Number (номер карты),
в зависимости от размерности формата они имеют свою длину этим и отличаются
Обозначение | Название формата | Длина кода объекта | Длина номера карты | Описание |
---|---|---|---|---|
W26 | Wiegand-26 | 1 | 2 | Wiegand-26, содержит 24 бита кода и 2 бита контроля на четность |
W34 | Wiegand-34 | 1 | 3 | Wiegand-34, содержит 32 бита кода и 2 бита контроля на четность |
W36 | Wiegand-36 | 2 | 3 | |
W37 | Wiegand-37 | 2 | 3 | |
W42 | Wiegand-42 | 2 | 3 | Wiegand-42 содержит 40 бита кода и 2 бита контроля на четность |
W58 | Wiegand-58 | 2 | 5 | Wiegand-58 содержит 56 бита кода и 2 бита контроля на четность |
W58DEC | Wiegand-58 | 2 | 5 | Wiegand-58 представление идентификатора с длиной кода 58 бит («W58») в десятеричной системе |
Описание заявки на пропуск
Заявки на выдачу пропуска отправляются в специальную очередь "request" заявок RabbitMQ в json формате. Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
command | string | ORDER |
id | integer | Идентификатор заявки на пропуск (уникальный идентификатор в рамках A101) |
type | string | Тип пропуска. Значения: VISITOR (Посетитель), EMP (Сотрудник) |
accessObject | object | Объект доступа для которого запрашивается пропуск |
accessPoints | list object | Список точек доступа |
startDate | long | Дата начала действия пропуска (GMT, в миллисекундах), если null, с текущей даты |
endDate | long | Дата окончания действия пропуска, если null - для посетителя 1 сутки, для персонала по умолчанию из параметров конфигурационного файла |
Структура объекта доступа, для заказа пропуска
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор объекта доступа для которого запрашивается пропуск, если задан данный атрибут для заказа пропуска остальные атрибуты объекта могут не задаваться |
name | string | Имя объекта доступа для которого запрашивается пропуск (ФИО, и т.д.), для посетителя не обязательное поле |
departmentId | integer | Идентификатор подразделения объекта для которого запрашивается пропуск (обязательно для запроса пропуска для персонала) |
departmentName | String | Имя подразделения для объекта (для запроса пропуска не используется) |
Структура точки доступа, для заказа пропуска
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор точки доступа |
name | string | Имя точки доступа (не обязательное поле) |
Примеры заявок на пропуск
для посетителя:
{
"command": "ORDER"
"id": 1022,
"type": "VISITOR",
"accessObject": {
"name": "Посетитель такой"
},
"accessPoints": [
{"id": 1, "name": "Вход"},
{"id": 2, "name": "Выход"}
]
}
для персонала:
{
"command": "ORDER"
"id": 1023,
"type": "EMP",
"accessObject": {
"name": "Иванов Иван",
"departmentId": 3
},
"accessPoints": [
{"id": 1, "name": "Вход"},
{"id": 2, "name": "Выход"},
{"id": 3, "name": "Проход"}
],
"endDate": 1726647000000
}
Описание ответа на заявку на пропуск
Ответ на заявку на выдачу пропуска отправляются в специальную очередь "response" готовых пропусков RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки на пропуск (уникальный идентификатор в рамках A101) |
pass | object | пропуск |
error | string | Сообщение об ошибке при создании пропуска в Sigur |
Структура пропуска
Идентификатор | Тип | Описание |
---|---|---|
value | string | Wiegand идентификатор пропуска для генерации QR кода, BLE и всего прочего, что должен прислать считыватель в Sigur для идентификации прохода и проезда через точку доступа. Например, считыватели работают в формате Wiegand-34, строка будет в формате AABBCCDD (4 байта). Если null тогда см. error |
cardId | integer | Идентификатор карты доступа в Sigur, если null тогда см. error |
format | string | Формат номера (W26, W34, W36, W37, W42, W58, W58DEC) |
startDate | long | Дата начала действия пропуска (GMT, в миллисекундах), если null, с текущей даты |
endDate | long | Дата окончания действия пропуска, если null - для посетителя 1 сутки, для персонала по умолчанию из параметров конфигурационного файла |
Примеры ответа на заявки на пропуск
успешное создание пропуска:
{
"id": 1022,
"res": {
"value": "0A0064",
"cardId": 24,
"format": "W34",
"startDate": 1716647000000
"endDate": 1726647000000
}
}
пропуск не создан:
{
"id": 1023,
error: "Access point id=100 not exist in Sigur"
}
Получить список пропусков для заданного объекта доступа
Модуль sigur-gate активизируется на генерацию пропусков при появлении сообщений в очереди "pass-request" c атрибутом
command - PASSES
Описание заявки на получение пропусков объекта доступа
Заявки на получения пропусков отправляются в специальную очередь "pass-request" заявок RabbitMQ в json формате.
Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
command | string | PASSES |
id | integer | Идентификатор заявки |
accessObject | object | Объект доступа |
Структура объекта доступа
Идентификатор | Тип | Фильтр | Описание |
---|---|---|---|
id | integer | Да | Идентификатор объекта доступа |
Пример заявки на получение пропуска объекта доступа
{
"command": "PASSES",
"id": 1022,
"accessObject": {
"id": 100
}
}
Описание ответа на заявку на получение пропусков объекта доступа
Ответ на заявку на получения пропусков отправляются в специальную очередь "pass-response" RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки по объекту доступа |
passes | list object | список пропусков |
error | string | Сообщение об ошибке при выполнении заявки в Sigur |
Структура элемента списка пропусков аналогична описанию пропуска созданного для объекта доступа в заявке (см. выше).
Примеры ответа на заявки по объектам доступа
{
"id": 1022,
"passes": [
{
"value": "0A0064",
"cardId": 24,
"format": "W34",
"startDate": 1716647000000
"endDate": 1726647000000
},
{
"value": "AABBCC",
"cardId": 26,
"format": "W26",
"startDate": 1726647000000
"endDate": 1736647000000
}
],
"error": null
}
Изменить срок действия пропуска
Модуль sigur-gate активизируется на изменение срока пропусков при появлении сообщений в очереди "pass-request"
c атрибутом command - INTERVAL
Описание заявки на изменение срока действия пропусков объекта доступа
Заявки на получения пропусков отправляются в специальную очередь "pass-request" заявок RabbitMQ в json формате.
Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
command | string | INTERVAL |
id | integer | Идентификатор заявки |
accessObject | object | Объект доступа |
endDate | long | Дата окончания действия пропуска, обязательна для задания |
Структура объекта доступа
Идентификатор | Тип | Фильтр | Описание |
---|---|---|---|
id | integer | Да | Идентификатор объекта доступа |
Пример заявки на получение пропуска объекта доступа
{
"command": "INTERVAL",
"id": 1022,
"accessObject": {
"id": 100
},
"endDate": 1763115747000
}
Описание ответа на заявку на получение пропусков объекта доступа
Ответ на заявку на получения пропусков отправляются в специальную очередь "pass-response" RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки по объекту доступа |
error | string | Сообщение об ошибке при выполнении заявки в Sigur |
Если заявка на изменение срока действия пропусков выполнена успешно error имеет значение null
Примеры ответа на изменение даты окончания пропусков для объекта доступа
{
"id": 1022,
"error": null
}
Изменить состав доступных точек доступа
Модуль sigur-gate активизируется на изменение срока пропусков при появлении сообщений в очереди "pass-request"
c атрибутом command - AP
Описание заявки на изменение состав доступных точек доступа
Заявки на получения изменение состав доступных точек доступа отправляются в специальную очередь "pass-request"
заявок RabbitMQ в json формате. Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
command | string | AP |
id | integer | Идентификатор заявки |
accessObject | object | Объект доступа |
accessPoints | list object | Дата окончания действия пропуска, обязательна для задания |
Структура объекта доступа
Идентификатор | Тип | Фильтр | Описание |
---|---|---|---|
id | integer | Да | Идентификатор объекта доступа |
Структура точки доступа, для изменения аналогична созданию
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор точки доступа |
name | string | Имя точки доступа (не обязательное поле) |
Пример заявки на получение пропуска объекта доступа
{
"id": 1224,
"command": "AP",
"accessObject":
{
"id": 96
},
"accessPoints": [{"id": 2}, {"id": 3}]
}
Описание ответа на заявку на получение пропусков объекта доступа
Ответ на заявку на получения пропусков отправляются в специальную очередь "pass-response" RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки по объекту доступа |
error | string | Сообщение об ошибке при выполнении заявки в Sigur |
Если заявка на изменение точек доступа пропусков выполнена успешно error имеет значение null
Примеры ответа на изменение даты окончания пропусков для объекта доступа
{
"id": 1224,
"error": null
}
Управление объектами доступа (посетителями и персоналом)
Данный функционал реализован в рамках проекта по управлению зданием A101.
Интеграционной шиной для данного процесса является RabbitMQ.
Алгоритм работы модуля по управлению объектами доступа
Модуль sigur-gate активизируется на управление объектами доступа при появлении сообщений в очереди "ao-request"
RabbitMQ. В очередь «ao-request» заявки отправляет ПО A101.
Результат обработки заявок на управление объектами доступа sigur-gate отправляет в очередь обработанных заявок
"ao-response" RabbitMQ из которой ПО A101 их забирает и далее обрабатывает по своему алгоритму.
Модуль sigur-gate поддерживает следующие типы заявок к объектам доступа:
- BLOCK - заблокировать объект доступа;
- UNBLOCK - разблокировать объект доступа;
- FIND - найти объект доступа;
- ADD - добавить объект доступа;
- UPDATE - обновить объект доступа.
Описание заявки на управление объектом доступа
Заявки на управление объектом доступа отправляются в специальную очередь "ao-request" заявок RabbitMQ в json формате.
Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки |
command | string | Команда выполняемая по заявки для объекта доступа. Значения: BLOCK, UNBLOCK, FIND, ADD, UPDATE |
accessObject | object | Объект доступа |
Структура объекта доступа
Идентификатор | Тип | Фильтр | Описание |
---|---|---|---|
id | integer | Да | Идентификатор объекта доступа |
name | string | Да | Имя объекта доступа |
departmentId | integer | Да | Идентификатор подразделения объекта доступа |
departmentName | string | Да | Имя подразделения |
tabId | string | Нет | Табельный номер сотрудника |
isBlocked | boolean | Нет | Признак блокировки объекта доступа |
Инфо
Для заявок типа BLOCK, UNBLOCK в accessObject необходимо указать id, в противном случаи модуль вернет ошибку
Для заявок типа FIND accessObject выступает как фильтр для поиска объектов доступа. Например, указав id, поиск будет осуществляться только по идентификатору, могут быть заданы атрибуты у которых фильтр установлен в значение "Да".
Если не задан ни один атрибут, будет выдан список всех объектов доступа зарегистрированных в SIGUR.
Для заявок типа ADD обязательное задание имени объекта доступа, если departmentId не задан, тогда создается посетитель в специальном подразделении, указанном в конфигурационном файле. При создании атрибут blocked не обрабатывается, пользователь создастся разблокированным, для его блокировки необходимо вызвать соответствующую заявку.
Для заявок типа UPDATE обязательное задание идентификатора объекта доступа, если departmentId не задан, объект доступа будет перенесен в специальное подразделение для посетителей, указанное в конфигурационном файле. Заявкой данного типа не возможно изменить признак блокировки.
Примеры заявок на управление объектом доступа
блокировка посетителя по его идентификатору:
{
"id": 1022,
"command": "BLOCK",
"accessObject": {
"id": 100
}
}
поиск сотрудников в департаменте:
{
"id": 1023,
"command": "FIND",
"accessObject": {
"departmentId": 2
}
}
создание сотрудника подразделения:
{
"id": 1024,
"command": "ADD",
"accessObject": {
"name": "Иванов Иван",
"departmentId": 12,
"tabId": "06721"
}
}
создание посетителя:
{
"id": 1024,
"command": "ADD",
"accessObject": {
"name": "Иванов1"
}
}
Описание ответа на заявку на управление объектом доступа
Ответ на заявку на управление объектами доступа отправляются в специальную очередь "ao-response" RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки по объекту доступа |
accessObjects | list object | список объектов доступа для FIND, ADD, UPDATE |
error | string | Сообщение об ошибке при выполнении заявки в Sigur |
Структура списка объекта доступа аналогична описанию объекта доступа в заявке (см. выше).
Примеры ответа на заявки по объектам доступа
блокировка посетителяуспешное создание пропуска:
{
"id": 1098,
"error": null,
"res": [
{
"id": 72,
"name": "Pass-1022",
"departmentId": 2,
"tabId": null,
"departmentName": "Посетители",
"isBlocked": true
}
]
}
посетитель не заблокирован:
{
"id": 1023,
error: "Not found"
}
создание персонала:
{
"id": 1024,
"accessObjects": [{
"id": 10,
"name": "Иванов",
"departamentId": 2,
"departamentName": "Ресторан",
"tabId": "0099-12",
"blocked": false
}]
}
Получение информации о точках доступа SIGUR
Данный функционал реализован в рамках проекта по управлению зданием A101.
Интеграционной шиной для данного процесса является RabbitMQ.
Алгоритм работы модуля по получении информации о точках доступа SIGUR
Модуль sigur-gate активизируется на получение данных о точках доступа при появлении сообщений в очереди "ap-request"
RabbitMQ. В очередь «ap-request» заявки отправляет ПО A101.
Результат обработки заявок на точки доступа sigur-gate отправляет в очередь обработанных заявок
"ap-response" RabbitMQ из которой ПО A101 их забирает и далее обрабатывает по своему алгоритму.
Описание заявки на получение точек доступа
Заявки на управление объектом доступа отправляются в специальную очередь "ap-request" заявок RabbitMQ в json формате.
Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки |
accessPoint | object | Точка доступа |
Структура точки доступа
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор точки доступа |
name | string | Имя точки доступа |
accessPoint в заявке на точки доступа выступает как фильтр возвращаемых точек доступа, если в фильтре не задан ни
один атрибут будет возвращен весь список точек доступа, если задан фильтр по идентификатору, тогда вернется только
точка доступа с указанным идентификатором, задание атрибута name вернет все точки доступа которые начинаются со
значения этого атрибута
Примеры заявок на получение точек доступа
получение всех точек доступа:
{
"id": 1022
}
получение точки доступа по идентификатору:
{
"id": 1023,
"accessPoint": {
"id": 2
}
}
Получение всех точек доступа начинающихся на Вход:
{
"id": 1023,
"accessPoint": {
"name": "Вход"
}
}
Описание ответа на получение точек доступа
Ответ на заявку на информацию по точкам доступа отправляются в специальную очередь "ap-response" RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки по точкам доступа |
accessPoints | list object | список точек доступа |
error | string | Сообщение об ошибке при выполнении заявки в Sigur |
Структура списка точек доступа аналогична описанию точки доступа в заявке (см. выше).
Примеры ответа на заявки по точкам доступа
получение точек доступа:
{
"id": 1022,
"accessPoints": [{
"id": 10
"name": "серверная"
},
{
"id": 11
"name": "щитовая"
}]
}
Управление подразделениями
Данный функционал реализован в рамках проекта по управлению зданием A101.
Интеграционной шиной для данного процесса является RabbitMQ.
Алгоритм работы модуля по управлению подразделениями
Модуль sigur-gate активизируется на управление департаметнтами при появлении сообщений в очереди "dep-request"
RabbitMQ. В очередь «dep-request» заявки отправляет ПО A101.
Результат обработки заявок по департаментам sigur-gate отправляет в очередь обработанных заявок
"dep-response" RabbitMQ из которой ПО A101 их забирает и далее обрабатывает по своему алгоритму.
Модуль sigur-gate поддерживает следующие команды для заявок над департаментами:
- FIND - найти подразделения;
- ADD - добавить подразделение;
- UPDATE - обновить подразделение;
- DELETE - удалить подразделение.
Описание заявки на управление подразделениями
Заявки на управление подразделениями отправляются в специальную очередь "вуз-request" заявок RabbitMQ в json формате.
Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки |
command | string | Команда выполняемая по заявки для подразделения. Значения: FIND, ADD, UPDATE, DELETE |
department | object | Департамент |
Структура департамента
Идентификатор | Тип | Фильтр | Описание |
---|---|---|---|
id | integer | Да | Идентификатор подразделения |
name | string | Да | Название подразделения |
description | string | Нет | Описание подразделения |
externalId | string | Да | Внешний идентификатор подразделения |
Инфо
Для заявок типа FIND department выступает как фильтр для поиска подразделения. Например, указав id, поиск будет осуществляться только по идентификатору, могут быть заданы атрибуты у которых фильтр установлен в значение "Да".
Если не задан ни один атрибут, будет выдан список всех департаментов зарегистрированных в SIGUR.
Для заявок типа ADD обязательное задание имени департамента.
Для заявок типа UPDATE и DELETE обязательное задание идентификатора подразделения или внешнего идентификатор подразделения, по которым осуществляется поиск данных для выполнения операции.
externalId это пользовательский (дополнительный) атрибут для сущности DEPARTMENTS Sigur. Он не доступен для просмотра в gui Sigur.
Если атрибут не существует в модели Sigur он создается модулем при запуске.
Примеры заявок на управление подразделениями
поиск всех департаментов:
{
"id": 1023,
"type": "FIND",
}
получение подразделения по внешнему идентификатору:
{
"id":"1023",
"command":"FIND",
"department":
{
"externalId": "5"
}
}
Пример запроса на обновление описания подразделения
{
"id":"1033",
"command":"UPDATE",
"department":
{
"id": 3,
"description": "столовая",
"externalId": "9"
}
}
пример запроса на добавление подразделения
{
"id":"1032",
"command":"ADD",
"department":
{
"name": "отдел 3",
"externalId": "6"
}
}
пример запроса на удаление подразделения
{
"id":"1034",
"command":"DELETE",
"department":
{
"externalId": 9
}
}
Описание ответа на заявку на управление подразделением
Ответ на заявку на управление подразделением отправляются в специальную очередь "dep-response" RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки по подразделению |
departmants | list object | список подразделений для FIND, ADD, UPDATE |
error | string | Сообщение об ошибке при выполнении заявки в Sigur |
Структура списка подразделений аналогична описанию подразделения в заявке (см. выше).
Примеры ответа на заявки по подразделениям
Пример результата на получение подразделений
{
"id":"1022",
"res":
[
{
"id": 1,
"name": "отдел 1",
"description": "отдел снабжения",
"externalId": "12"
},
{
"id": 2,
"name": "отдел 2",
"description": "отдел потребления",
"externalId": "15"
}
]
}
Пример результата изменения атрибутов подразделения
{
"id":"1032",
"res":
{
"id": 3,
"name": "отдел 3",
"description": "столовая",
"externalId": "9"
}
}
Пример результата на добавление подразделения
{
"id": 1032,
"res":
{
"id": 3,
"name": "отдел 3",
"externalId": "6"
}
}
Пример результата на удаление подразделения
{
"id": 1032,
"error": "Department name=столовая (6) has 100 access object and can't be deleted"
}
Пример успешного удаления подразделения
{
"id": 1032,
"error":
}
Настройки модуля в конфигурационном файле для взаимодействия с A101
Для настройки взаимодействия А101 c Sigir с использованием sigur-gate необходимо в конфигурационном файле модуля
определить настройки интеграции для A101 и для Sigur
Настройки модуля для А101
В конфигурационном файле настройте раздел a101 как показано ниже
# Настройка на взаимодействие с ПО A101
a101:
# доступность интеграции с A101
enabled: true
# настройка на обмен сообщениями с A101 по протоколу AMQP
rabbitmq:
# сервер rabbitmq
host: localhost
# порт
port: 5672
# пользователь
user: root
# пароль
password: ******
# виртуальный сервер для взаимодействия с sigur
virtualHost: sigur
# очередь заявок на пропуск в SIGUR
request-queue: request
# очередь ответа на заявки на пропуск в SIGUR
response-queue: response
# очередь заявок на управление объектами доступа в SIGUR
ao-request-queue: ao-request
# очередь ответа на заявки на управление объектами доступа в SIGUR
ao-response-queue: ao-response
# очередь заявок на управление объектами доступа в SIGUR
ap-request-queue: ap-request
# очередь ответа на заявки на управление объектами доступа в SIGUR
ap-response-queue: ap-response
# очередь заявок на управление подразделениями в SIGUR
dep-request-queue: dep-request
# очередь ответа на заявки на управление подразделениями в SIGUR
dep-response-queue: dep-response
Настройки Sigur
В конфигурационном файле настройте раздел sigur.pass-settings как показано ниже
# Настройки на сервер Sigur
sigur:
...
# Настройки создания пропусков
pass-settings:
# Формат пропуска генерируемой системой
wiegand: W26
# Подразделение в которое записываются посетители при заказе пропуска
visitor-departmentid: 2
# Уровень правил которые определяют точки доступа для посетителя
level: 2
# Время действия правил для персонала по доступу через точки доступа, если время не задано при создании пропуска
duration-days: 365
# Режим по умолчанию - свободный доступ. Его получают все вновь создаваемые объекты доступа автоматически
# его нельзя удалить или изменить и чтобы модуль на нем не спотыкался, правила с этим идентификатором будет
# выбрасываться. 99% это всегда будет значение 1, но если не обычный инстанс, тогда здесь задать правильный id
default-rule-id: 1
Примечание
wiegand - формат пропуска генерируемой системой зависит от используемых считывателей и поддерживаемых ими форматов, как правило считыватели поддерживают wiegand 26 и wiegand 34, обозначение типов поддерживаемых для sigur-gate см. выше.
visitor-departmentid - подразделение в которое записываются посетители при заказе им пропусков. Создается в Sigur, посмотреть идентификатор для настройки можно запустив sigur-gate в режиме печати.
level - уровень правил, которые определяют точки доступа для посетителя. У Sigur их 4, нельзя задавать 1 (самый слабый), так как это уровень когда не контролируются права доступа на точках доступа, а далее уровни идут с повышением уровня строгости, 2 минимальный уровень, когда можно обеспечить ограничение по точкам доступа.
default-rule-id - нужен, чтобы исключить правило по умолчанию из функций управления объектами доступа.
После установки Sigur данное правило сооздается автоматически и находится в GUI Sigur в разделе "Режим" на уровне 1, название "По умолчанию" и идентификатор у него - 1 (получить идентификатор в GUI Sigur не получается).
Возможно определить другое правило по умолчанию, тогда его идентификатор надо будет прописать в конфиг. Пока видится один способ получения идентификатора такого правила, это в логе в описании ошибки будет описание правила которое
защищено системой от изменения и тогда его прописать вместо 1