RPS
Модуль интегрции с парковочной системой RPS "Российская парковочная система" - parking-gate. Описание программного обеспечения RPS по ссылке
Особенности API RPS для интеграции с внешними системами мониторинга и управления:
- система не предоставляет ни каких интерфейсов для получения состояния и управления устройствами из которых она
состоит (например шлагбаум, терминал оплаты, точка доступа, считыватель); - система предоставляет доступ к составу и состоянию зон парковки (названия зон, количество мест, количество
свободных мест, количество зарезервированных мест); - система предоставляет информацию о въезде/выезде объекта с парковки, а также связанную биллинговую информацию.
Установка модуля интеграции
Для установки модулей на хосте требуется наличие JRE (от 21.x и выше)
Создать директорию /opt/parking-gate и поместить в нее parking-gate.jar, application.yml
mkdir /opt/parking-gate
cp parking-gate.jar /opt/parking-gate
cp application.yml /opt/parking-gate
cp parking-gate.conf /opt/parking-gate
Создать файл сервиса /etc/systemd/system/parking-gate.service следующего содержания:
[Unit]
Description=parking-gate
After=syslog.target
[Service]
User=root
Group=root
ExecStart=/opt/parking-gate/parking-gate.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Перечитать списко сервисов linux
systemctl daemon-reload
Запуск и остановку сервиса можно осуществлять стандартными командами, т.е.
service parking-gate start
service parking-gate status
service parking-gate stop
Запуск с командной строки:
java -jar parking-gate.jar
Модуль поддерживает два режима запуска
Чтение конфигурации Rps
Запуск в этом режиме выводит в лог информацию о зонах парковки Rps, для использования при конфигурировании
в типовой конфигурации и конфигурационном модуле, команда:
java -jar sigur-gate.jar print
Пример выдачи в лог конфигурации"
2024-10-03 13:01:44.319 INFO [r.i.sem.parking.PrintApplication] (main) ------------RPS zones:
2024-10-03 13:01:44.319 INFO [r.i.sem.parking.PrintApplication] (main) Order number in config=1, Zone=Zone(id=17d66717-64a1-419a-85e0-0be834a99000, name=Вне парковки, capacity=20000, reserved=0, freeSpace=12000)
2024-10-03 13:01:44.322 INFO [r.i.sem.parking.PrintApplication] (main) Order number in config=2, Zone=Zone(id=17d66717-64a1-419a-85e0-0be834a99001, name=Зона А, capacity=120, reserved=0, freeSpace=98)
2024-10-03 13:01:44.322 INFO [r.i.sem.parking.PrintApplication] (main) Order number in config=3, Zone=Zone(id=c9f6a241-b10a-4c12-aa0e-d99c4e38a737, name=Зона Б, capacity=120, reserved=0, freeSpace=95)
...
2024-10-03 13:01:44.322 INFO [r.i.sem.parking.PrintApplication] (main) ------------RPS tariffs:
2024-10-03 13:01:44.402 INFO [r.i.sem.parking.PrintApplication] (main) Tariff=Tariff(id=f4fba861-fe08-0857-5ba3-05ceaffa23c1, name=НОВЫЙ ТАРИФНЫЙ ПЛАН, idForCard=50)
2024-10-03 13:01:44.402 INFO [r.i.sem.parking.PrintApplication] (main) Tariff=Tariff(id=3f7fb98a-d74a-49eb-847b-17f6e0135bff, name=4 часа бесплатно, idForCard=45)
2024-10-03 13:01:44.403 INFO [r.i.sem.parking.PrintApplication] (main) Tariff=Tariff(id=24f718ff-8b97-42e3-94e8-22299a0efdf6, name=Защитный интервал, idForCard=8)
...
2024-10-03 13:01:44.404 INFO [r.i.sem.parking.PrintApplication] (main) ------------RPS groups:
2024-10-03 13:01:44.466 INFO [r.i.sem.parking.PrintApplication] (main) Group=Group(id=18e93d8f-e9bf-b6bf-3fc0-0b38c4209ac4, name=вфывы, idForCard=10)
2024-10-03 13:01:44.466 INFO [r.i.sem.parking.PrintApplication] (main) Group=Group(id=3761f44c-869d-f8a3-ecc3-0c70f7d2a323, name=Группа А, idForCard=20)
2024-10-03 13:01:44.466 INFO [r.i.sem.parking.PrintApplication] (main) Group=Group(id=9397231d-6337-42d1-af44-1f9d7890bda7, name=Группа А, idForCard=3)
...
Штатная работа
java -jar sigur-gate.jar
Описание модуля
Модуль обеспечивает:
- обработку и передачу значений параметров и событий для которых настроена интеграция
- создание пропусков на въезд/выезд на парковку
Обработка и передача значений параметров и событий RPS
Алгоритм работы модуля:
- при старте модуль читает конфигурацию зон в Rps и Inspark и по всем интегрируемым зонам отправляет значения
параметров в Inspark; - при старте модуль подписывается на транзакции и зоны и ждет вызова от Rps;
- периодически в соответствии с настройками модуль отправляет состояние зон парковки, даже если параметры не менялись;
- Rps при изменении в зонах по подписке вызывает модуль parking-gate, модуль обрабатывает данные и отправляет значения
параметров по зонам (контролируем количество свободных мест); - Rps при въезде или выезде по подписке вызывает модуль parking-gate, модуль обрабатывает данные транзакции и если
настроено соответсвующее событие отправляет событие в Inspark и связанное с ним значение параметра.
Настройка в платформе
Состав каналов устройства Inspark типа PARKING_RPS которые по умолчанию модуль интеграции передает
в систему Inspark:
Имя канала | Тип | Описание |
---|---|---|
zone_id_N | строковый | Идентифкатор зоны |
zone_name_N | строковый | Название зоны |
capacity_N | мгновенный | Количество машиномест |
reserved_N | мгновенный | Количество зарезервированных машиномест |
freeSpace_N | мгновенный | Количество свободных машиномест |
При создании устройства с типом PARKING_RPS необходимо создать столько представленных групп каналов сколько зон
парковки находится под управлением интегрируемой RPS (см. запуск в режиме печати конфигурации).
Например, если зон 3, тогда каналов для устройства должно быть
создано 15 каналов - zone_id_1, zone_id_2, zone_id_3 и так по остальным типам каналов

При описании ТК добавляется устройство, которое содержит все параметры интегрируемой RPS.
По архитектуре RPS каждый его инстанс представляет парковку как единое пространство с разными зонами.в Inspark парковка
интегрируется как единое устройство, т.е. нельзя иметь несколько устройств PARKING_RPS на одном инстансею
Настройка в модуле parking-gate
Для настройки каналов устройства PARKING_RPS необходимо в конфигурационном модуле для каждой зоны описать имена топиков
каналов которые их представляют. Ниже показае пример настройки парковки с тремя зонами для устройства описанного выше.
# Настройка стандартных топиков каналов ИП устройства PARKING_RPS c 3 зонами в Semnext
channels:
# массив зон на парковке, для заполнения здесь и ТК использовать печать конфигурации Rps
items:
- id: zone_id_1 # Идентифкатор зоны 1 в Rps
name: zone_name_1 # Название зоны 1 в Rps
capacity: capacity_1 # Количество машиномест зоны 1 в Rps
reserved: reserved_1 # Количество занятых машиномест зоны 1 в Rps
freeSpace: freeSpace_1 # Количество свободных машиномест зоны 1 в Rps
- id: zone_id_2 # Идентифкатор зоны 2 в Rps
name: zone_name_2 # Название зоны 2 в Rps
capacity: capacity_2 # Количество машиномест зоны 2 в Rps
reserved: reserved_2 # Количество занятых машиномест зоны 2 в Rps
freeSpace: freeSpace_2 # Количество свободных машиномест зоны 2 в Rps
- id: zone_id_3 # Идентифкатор зоны 3 в Rps
name: zone_name_3 # Название зоны 3 в Rps
capacity: capacity_3 # Количество машиномест зоны 3 в Rps
reserved: reserved_3 # Количество занятых машиномест зоны 3 в Rps
freeSpace: freeSpace_3 # Количество свободных машиномест зоны 3 в Rps
Из RPS в Inspark можно передавать два события:
- въезд;
- выезд.
Для настройки передачи событий из RPS в Inspark необходимо в конфигурационном файле модуля для событий въезд/выезд
которое передается в Inspark определить (см. ниже пример интеграции событий):
- соответсвующее ему событие (semEventId)
- дополнительно определить шаблон сообщения
- канал устройств (semChannel) и значение (value) которое будет отправляться по событию.
event:
entry:
semEventId: 32231
semEventMessageTemplate: Въезд через $DEVICE_TYPE $DEVICE_NAME из зоны $ZONE_BEFORE в зону $ZONE_AFTER
semChannel: entry
value: 1
exit:
semEventId: 32232
semEventMessageTemplate: Выезд через $DEVICE_TYPE $DEVICE_NAME тип клиента $TYPE_CLIENT, прошла оплата $AMOUNT
semChannel: entry
value: 1
Инфо
Шаблон текста события, поддерживаются подстановки:
- $DEVICE_TYPE - тип устройства RPS;
- $DEVICE_NAME - наименование устройства RPS;
- $ZONE_BEFORE - из зоны
- $ZONE_AFTER - в зону
- $TYPE_CLIENT - тип клиента разовый/постоянный;
- $AMOUNT - сумма оплаты.
Создание заявок на проезд
Данный функционал реализован в рамках проекта по управлению зданием A101.
Интеграционной шиной для данного процесса является RabbitMQ.
Алгоритм работы модуля по созданию пропусков для парковки
Модуль parking-gate активизируется на создание пропуска при появлении сообщений в очереди "request" заявок на пропуска
RabbitMQ. В очередь «request» заявки отправляет ПО A101. Поддерживаются следующие типы попусков на парковку
- по государственному регистрационному номеру транспортного средства (ГРН);
- по RFID метке;
- по QR коду.
Результат создания пропуска parking-gate отправляет в очередь обработанных заявок "response" RabbitMQ из которой ПО A101
их забирает и далее обрабатывает по своему алгоритму. Если заявка выполнена успешно, в ответе будет содержаться
идентификатор тэга (для RFID меток и проезда по гос номеру транспортного средства (ГРН),
далее LPN - license plate number для обозначения типа заявки) или идентификатор QR кода (штрихкод) для проезда
по QR коду. Если пропуск не сформирован, ответ будет содержать описание ошибки.
При обработке каждого сообщения очереди заявок на пропуск выполняются следующие действия:
- Шаг 1. Из тела сообщения выбрать пропуск и прочитать настройки конфигурации для
запрашиваемого типа пропуска (ФИО и др. атрибуты, которые позволят связать пропуск с биллинговой информацией) - Шаг 2. Проверка заявки на заполнение обязательных атрибутов на пропуск, в случаи ошибок переход к шагу 5:
- Шаг 2.1 Для всех типов пропусков является обязательным заполнение идентификатора заявки и идентификатора пропуска
(RFID - метка, LPN и QR - ГРН) - Шаг 2.2 Для LPN и RFID проверка на заполнение данных о юридическом или физическом лице.
- Шаг 2.3 Для QR проверка заполнения информации о юридическом лице запрашивающим пропуск и ФИО гостя.
- Шаг 2.4 Для QR проверка заполнения информации электронной почте гостя и модели транспортного средства,
при их отсутствии заполнение из настроек конфигурации модуля - Шаг 3. Создание пропуска
- Шаг 3.1 Для LPN и RFID:
- Шаг 3.1.1 В зависимости от того задано название юридического лица или физического выполняется его поиск
в RPS и его создание, если оно не существует (RPS позволяет создавать юридические и физические лица с одинаковым
именем, поэтому если модуль находит несколько действующих записей с одинаковым именем, будет использоваться последняя
измененная запись). - Шаг 3.1.2 Для юридического лица или физического создается парковочная карта, с параметрами биллинга определенными для
данного типа пользователей. - Шаг 3.1.3 В зависимости от LPN и RFID создается метка для парковочной карты созданной на шаге 3.1.2
- Шаг 3.2 Для QR:
- Шаг 3.2.1 Ищется юридическое лицо запросившее QR, если оно еще не зарегистрировано, выполняется его создание
(если юр лиц с запрашиваемым именем несколько, см. шаг 3.1.1). - Шаг 3.2.2 От юридического лица регистрируется QR код в RPS, с параметрами биллинга определенными для создания QR/
- Шаг 4. Отправить ответ в очередь ответов с результатом выполнения заявки: для LPN или FRID идентификатор созданной
метки в RPS, для QR штрих кодом для генерации qr кода на стороне A101 (если передать email гостя RPS сам отработает
отправку qr гостю, но это не функционал модуля parking-gate, также RPS не отправляет push уведомления и т.п.) - Шаг 5. Отправить ответ в очередь ответов с идентификатором заявки и описанием ошибки почему пропуск не выписан,
завершить выполнение обработки.
Инфо
Штрих код для QR в RPS это уникальный идентификатор, который создается по стандартным правилам
Описание заявки на пропуск
Заявки на проезд на парковку отправляются в специальную очередь "request" заявок RabbitMQ в json формате.
Атрибуты заявки:
Идентификатор | Тип | Описание |
---|---|---|
id* | integer | Идентификатор заявки на пропуск (уникальный идентификатор в рамках A101) |
type* | string | Тип пропуска. Значения: PARKING_LPN (ГРН на авто), PARKING_RFID, PARKING_QR |
name | string | Имя физического лица для LPN и RFID, имя гостя для QR, для которого запрашивается пропуск(ФИО) |
departmentName | String | Имя юридического лица (названии компании) |
tagId* | String | Для PARKING_LPN и PARKING_QR - ГРН, для PARKING_RFID идентификатор метки |
String | Для PARKING_QR электронная почта гостя | |
carModel | String | Для PARKING_QR модель транспортного средства гостя |
Инфо
- помечены атрибуты обязательные для всех типов заявок email и carModel если не заданы для QR, будут установленв из конфигурационного файла по умолчанию
Примеры заявок на пропуск
для ГРН (юридическое лицо):
{
"id": 1022,
"type": "PARKING_LPN",
"departmentName": "Ресторан",
"tagId": "A001AA97"
}
для RFID (физическое лицо):
{
"id": 1024,
"type": "PARKING_RFID",
"name": "Иванов Иван",
"tagId": "100332"
}
для QR:
{
"id": 1023,
"type": "PARKING_QR",
"name": "Иванов Иван",
"departmentName": "Ресторан",
"tagId": "A001AA97",
"carModel": "Mercedes-Benz S-Класс AMG 63 AMG Long",
"email": "test@infsys.ru"
}
Описание ответа на заявку на пропуск
Ответ на заявку на выдачу пропуска отправляются в специальную очередь "response" готовых пропусков RabbitMQ в json
формате. Атрибуты ответа:
Идентификатор | Тип | Описание |
---|---|---|
id | integer | Идентификатор заявки на пропуск (уникальный идентификатор в рамках A101) |
value | string | Штрихкод для QR кодов, идентификатор тега в RPS для остальных |
error | string | Сообщение об ошибке при создании пропуска в RPS |
Примеры ответа на заявки на пропуск
успешное создание пропуска:
{
"id": 1022,
"value": "9CA96B14-CE75-4324-893D-03C22F1BD60E"
}
пропуск не создан:
{
"id": 1023,
error: "Outstanding payment"
}
Настройки модуля в конфигурационном файле для создания пропусков
Для настройки создания пропусков от А101 в Rps с использованием parking-gate необходимо в конфигурационном файле модуля
определить настройки интеграции для A101 и для Rps
Настройки модуля для А101
В конфигурационном файле настройте раздел a101 как показано ниже
# Настройка на взаимодействие с ПО A101
a101:
# доступность интеграции с A101
enabled: true
# настройка на обмен сообщениями с A101 по протоколу AMQP
rabbitmq:
# сервер rabbitmq
host: localhost
# порт
port: 5672
# пользователь
user: root
# пароль
password: masterkey
# виртуальный сервер для взаимодействия с RPS
virtualHost: rps
# очередь заявок на пропуск в RPS
request-queue: request
# очередь ответа на заявки на пропуск в RPS
response-queue: response
Настройки Rps
В конфигурационном файле настройте раздел rps как показано ниже
# Настройки на сервер Rps
rps:
server:
# Адрес сервера Rps
host: sandbox.r-p-s.ru
# порт для rest api Rps
port:
# путь для rest api Rps
path: /api2/remote/
# выдаётся администратором рабочей станции или технической службой РПС
token: 7500213809ce2c99b7c22c2b9c73347c445e8c4a
# выдаётся администратором рабочей станции или технической службой РПС
developerId: BBFA6280-6110-BD0C-DBE7-B348E84B0B53
# Настройки обратной связи для подписок
response:
# Адрес для модуля
host: 80.82.81.104
# порт для rest api Rps
port: 8080
# путь для rest api Rps
path: /parking/rps/
# Настройки создания пропусков
pass-settings:
# для физического лица
client:
# идентификатор тарифной сетки для карты (TSidFC)
tariffScale: 45
# идентификатор тарифного плана для карты (TPidFC)
tariffPlan: 8
# Группа объекта (ClientGroupidFC)
clientGroup: 3
# для физического лица
company:
# идентификатор тарифной сетки для карты (TSidFC)
tariff-scale: 1
# идентификатор тарифного плана для карты (TPidFC)
tariff-plan: 44
# Группа клиента (ClientGroupidFC)
client-group: 2
qrCode:
# идентификатор тарифной сетки для qr кодов (IdTS)
tariff-scale: 27
# идентификатор тарифного плана для qr кодов (IdTP)
tariff-plan: 37
# Группа для BCF=3 (GroupIdFC), для qr кодов можно не задавать
client-group:
# Электронная почта по умолчанию, если она не задана в заявке только для Qr
default-email: test
# Модель трансппортного средства, если она не задана в заявке только для Qr
default-carModel: car
Инфо
Настройки token и developerId выдаётся администратором рабочей станции или технической службой РПС
Настройки response это настройки parking-gate, которые будет вызывать Rps при наступлени событий по подписки на транзакции и зоны
Настройки pass-settings это настройки биллинга для заказа пропусков для каждого типа прпусков, чтобы посмотреть возможные варианты заполнения тарифов и групп клиента см информацию, выдаваемую модулем в режиме печати конфигурации RPS