HikVision
HikVision Management
Компания HikVision выпускает теле-коммунникационные панели для переговорных комнат. Для управления ими предоставляется ПО HIKVISIOM Mng.
Эта среда управления позволяет удаленно зарегистрировать и изменять рабочие характеристики панели.
В составе ПО HikVision есть интеграционный сервер, который позволяет удаленно по REST API, обратится к серверу и также изменить состояние теле-панели.
Функциональность
Интеграционный модуль Inspark реализовывает следующие функции:
- вычитать все панели из сервера HikVision, заполнить данные о панелях в Устройства Inspark.
- периодически запрашивать данные с сервера HikVision, обновлять данные о панелях.
- Отправить команду "Включить Панель"
- Отправить команду "Выключить Панель"
- Отправить команду "Изменить яркость Панели"
- Отправить команду "Изменить громкость Панели"
Исходные данные для интеграции
Для интеграционного модуля hikvision-gate необходимы данные по APPkey, APPsecret, которые привязаны к учетной записи пользователя ПО HikVision Mng.
Чтобы получить их, необходимо авторизоваться в web-приложении ПО Hikvision и перейти в разделе User Management
. Создаем, либо выбираем существующий логин для интеграции, и запоминаем его APPkey, APPsecret.
Далее переходим по ссылке:https://<hikvision-server>/artemis-web/api/index
выбираем любой сервис, пробуем его выполнить. Если запрос выполнен успешно, значит все готово к интеграции.
Настройка схемы интеграции
- В Библиотеке устройств (Меню->Устройства) найти устройство с типом HIK_VISION.
- Если такого устройства нет, скачать устройство по ссылке и выполнить Импорт (Меню->Импорт).
Модель Устройства:
Параметр | Тип | Топик | Комментарий |
---|---|---|---|
DeviceName | string | devicename | имя устройства |
DeviceIP | string | deviceip | IP адрес |
Device Port | int | deviceport | порт |
onoff | signal | onoff | 1- online, 0- offline |
Volume | int | volume | громкость |
Brightness | int brightness | яркость | |
OS Device | string | os | ОС устройства |
В составе Устройства должны присутствовать следующие Внешние команды:
- Собрать Типовую конфигурацию с таким Устройством.
Важно!
В Адрес схемы подключения внести идентификационный номер (любое уникальное число).
- Подключить Типовую конфигурацию к контроллеру на объекте.
При привязке ТК к объекту будут созданы Unit (реальные устройства). В Серийные номера Unit необходимо прописать DevID устройства в системе HikVision.
Инфо
DevID указан в ПО HikVision management. Выполните сервис GetInteractiveTabletDeviceDeviceList
, который выдает все зарегистрированные панели, сервис выдаст все DevId.
API Name: Get Interactive Tablet DeviceList
Request: /api/focsign/v1/DeviceConfig/GetInteractiveTabletDeviceDeviceList
HTTP Method: POST
Returned Result Example:
{
"code": "0",
"msg": "success",
"data": {
"total": 1,
"pageNo": 1,
"pageSize": 100,
"list": [
{
"DevId": 2,
"DevName": "Экран07",
"DevIp": "10.25.224.95",
"DevPort": "8000",
"status": 1
}
]
}
}
Установка модуля интеграции
Запуск
java -jar hikvision-gate.jar
Установка в качестве демона линукс:
Создать директорию /opt/hikvision-gate и поместить в нее hikvision-gate.jar, application.yml
mkdir /opt/hikvision-gate
cp hikvision-gate.jar /opt/hikvision-gate
cp application.yml /opt/hikvision-gate
cp hikvision-gate.conf /opt/hikvision-gate
Создать файл сервиса /etc/systemd/system/hikvision-gate.service следующего содержания:
[Unit]
Description=hikvision-gate
After=syslog.target
[Service]
User=root
Group=root
ExecStart=/opt/hikvision-gate/hikvision-gate.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Перечитать список сервисов linux
systemctl daemon-reload
Запуск и остановку сервиса можно осуществлять стандартными командами, модуль работает только в режиме 2
service hikvision-gate start
service hikvision-gate status
service hikvision-gate stop
Если нужно добавить в автозапуск при рестарте, обычно это делается так:
systemctl enable hikvision-gate
Ограничение памяти в качестве демона
Для установки лимитов памяти нужно создать в директории hikvision-gate.jar файл конфигурации hikvision-gate.conf и задать в нем нужные лимиты, например:
JAVA_OPTS="-Xms100m -Xmx500m"
Метрики производительности
Настройка модуля интеграции
В конфигурационном файле application.yml документированы все секции настройки.
- В настройках модуля задаются: - http url сервера HikVision, - APPkey (AP), APPsecret (SK) идентификаторы
# Настройки подключения к HikVision
hikvision:
# Включает эмуляцию сервера (url ниже не используется, вызовы выполняются к локальным рестам эмулирующим ответы от сервиса)
# В качестве устройства возвращает устройство с идентификатором 100500
emulator: false
# Урл подключения к серверу HikVision.
url: https://10.4.2.133
# Публичный ключ HikVision, используется в запросах.
appKey: PUBLIC_KEY
# Приватный ключ HikVision, используется в запросах для подписи запроса HMAC.
appSecret: SECRET_KEY
# Отключить проверку сертификатов (все считать подлинными).
# Используется для тестовых серверов с удобрениями вместо сертификатовю.
# true отключает проверку, false оставляет включенной
disableSertCheck: false
- Для приема команд создается очередь в ArtemisMQ : HikVisionCommand
# параметры подключения к артемис inspark
artemis:
url: tcp://localhost:61616
user: artemis
password: artemis
# количество потоков в пуле для отправки JMS-сообщений
senderThreads: 8
# настройки очередей (см. имена свойств и дефолты в lib-gate)
queue:
measure:
destination: jms.queue.Measure
event:
destination: jms.queue.Event
hikvisioncommand:
destination: jms.queue.HikVisionCommand
concurrency: 8-8
- При старте модуль выполняет следующее:
- вычитывает из Inspark все Unit Типа HIKVision (пользователь Inspark должен быть только от одной Компании).
формирует список SN всех устройств. - Вычитывает все устройства с сервера HIKVision:
- Для всех SN= data.list[].DevId отправляет данные в очередь Measure.
- вычитывает из Inspark все Unit Типа HIKVision (пользователь Inspark должен быть только от одной Компании).
Важно!
Сервис HIKVision возвращает status:
- 0: "Unknown",
- 1: "Online",
- 2:"Offline",
модуль преобразовывает их: 0 -> null (нет контроля), 1-> 1, 2 -> 0. и отправляет значение в
параметр onoff
- Периодически (раз в 10 мин) сервис подчитывает данные:
API Name: Get Single Device Brightness
API Name: Get single device volume
API Name: Get Single Device Operating System
Формат этих запросов практически одинаков.
Request Body
Body Example:
{
"RequestParam": {
"deviceId": 1
}
}
Returned Result Example:
{
"code": "0",
"msg": "success",
"Data": {
"volume": 0
}
}
полученные значения отправляем для каждого SN(DevId) в очередь Measure.
- Модуль подписывается на очередь CommandHIKVISION.
При получении команды на включение onoff=1 или выключения onoff=0, модуль вызывает рест
API Name: Batch device control
Request: /api/focsign/v1/DeviceControl
HTTP Method:POST
Body Example:
{
"RequestParam": {
"orderType": "powerOn", //Operation type: "powerOn", "powerOff", "reboot".
"DeviceList": [
{
"deviceId": 2
}
]
}
}
Returned Result Example:
{
"code": "0",
"msg": "success",
"Data": {
"taskId": 4
}
}
Особенности реализации
Канал onoff отображает состояние подключения устройства к сети питания (1 - подключено, 0 - отключено). Расшифровка статуса устройства HikVision не требуется, оно соответствует.
Список поддерживаемых команд
команда | данные | описание |
---|---|---|
powerOn | Включить устройство | |
powerOff | Выключить устройство | |
reboot | Перезагрузить устройство (по наблюдениям занимает 30 сек) | |
adjustBrightness | число, от 0 до 100 | Установить уровень яркости |
adjustVolume | число, от 0 до 100 | Установить уровень громкости |
Проверка результата выполнения команд
Команды powerOn, powerOff, reboot считаются успешными если без ошибок вызван сервис API HikVision и устройство в момент вызова находилось подключенным к сети электропитания (state = 1). Надежной возможности проверить их нет.
Для команд adjustBrightness, adjustVolume после успешного вызова сервиса сервис API HikVision выполняется проверка с задержкой в 10 секунд и опроса текущих значений яркости/громкости. Если значения соответствуют устанавливаемым (отличаются не более чем на 2 единицы) - выполнение команды считается успешным. Погрешность 2 единицы введена из-за градаций шага установки яркости (устанавливая 35 может быть фактически установлено 34, по наблюдениям, т.е. предположительно есть какая-то шкала с шагом более единицы).
Для успешных команд отправляется системное событие E3010, для неудачных событие E3011.
Эмулятор
В модуле реализована возможность эмуляции сервисов HiVision. Эмулятор эмулирует устройство с идентификатором 100500.
Настраивается в конфиге, свойством hikvision.emulator (true/false).
Отключение проверки достоверности сертификатов
Реализован механизм отключения проверки достоверности сертификатов. Настраивается в конфиге свойством hikvision.disableSertCheck (true/false).
ВАЖНО!
В продуктовой среде при наличии действительного сертификата проверка должна быть включена (disableSertCheck = false).