![]() | ![]() | ![]() |
Предварительная редакция от 27 Октября 2022г.
Для обмена информацией (без использования шифрования) с Центральным блоком ИСО Тополь используется протокол HTTP/1.1 в соответствии с RFC 2616 “Hypertext Transfer Protocol -- HTTP/1.1” https://tools.ietf.org/html/rfc2616
Сервер HTTP может быть отключен настройкой SET_HTTP_SERVER_HTTP в файле конфигурации сервера.
RFC 2818 “HTTP Over TLS” https://datatracker.ietf.org/doc/html/rfc2818SET_HTTP_SERVER_HTTPS в файле конфигурации сервера.* Зашифрованный канал является отдельным модулем и может отсутствовать в ряде комплектов поставки.
** Для корректной работы может потребоваться дополнительная настройка центрального блока ИСО Тополь.
Данные между Центральным блоком ИСО Тополь и клиентским программным обеспечением передаются в двухстороннем порядке по запросу клиента. Центральный блок не инициирует передачу данных самостоятельно, а только отвечает на запросы клиента. По умолчанию, переменные запроса могут, на усмотрение клиента, передаваться как в самой строке запроса (может быть проще в реализации и удобнее в отладке, но менее безопасно) так и в заголовках запроса (безопасней т.к. в случае использования зашифрованного канала, заголовки шифруются вместе с остальными данными), это поведение может быть изменено настройкой SET_HTTP_SERVER_HTTPS_ALLOW_GET_ARGS в файле конфигурации сервера, позволяющей отключить приём переменных в строке запроса.
В случае, когда запрос или ответ требует передачу объекта (или массива объектов), набор передаваемых данных представляет из себя JSON в соответствии с rfc 8259 «The JavaScript Object Notation (JSON) Data Interchange Format» https://tools.ietf.org/html/rfc8259
Данные поля типа дата (например дата события) передаются в формате POSIX time (Unix epoch) + три регистра для миллисекунд т.е. например дата 1519220475466 = 1519220475 POSIX (21 Февраля 2018 13:41:15 GMT) + 466 миллисекунд = 21.02.2018 13:41:15:466 GMT
Данные типа UUID представляют из себя уникальный идентификатор, сформированный в соответствии с RFC 4122 «A Universally Unique IDentifier (UUID) URN Namespace» https://tools.ietf.org/html/rfc4122
Передаются UUID в строковом виде в формате, описанном в пункте 3.Namespace Registration Template, «The formal definition of the UUID string representation»
Адрес запроса формируется из указателя протокола http(s): // + IP адреса центрального блока + стандартного разделителя «:» + номер порта, указанного в конфигурации центрального блока (по умолчанию 8765 для HTTP и 33000 для HTTPS) + тело команды + переменные, перед именем первой переменной используется символ «?» перед последующими «&» Пример запроса к центральному пульту с IP адресом 192.168.0.68: http://192.168.0.68:8765/json/getinputsrawvalues?lastEvent=0&inputUuid=3cfa823e-098c-4778-910d-6f3190b3c607
После получения и обработки команды, центральный блок возвращает один из следующих статусов:
| Код | Описание |
|---|---|
| 200 (OK) | Команда успешно получена, выполнена и далее последует результат выполнения |
| 400 (Bad Request) | Команда успешно получена но не выполнялась т.к. не верно указаны (или не указаны вообще) необходимые переменные для выполнения команды. Например запрос http://192.168.0.68:8765/json/topol3/scanline?serialport=2&firstAddress=2&lastAddress=122 не может быть выполнен т.к. в нем не указана переменная «IP», указывающая на IP адрес линейного блока |
| 401 (Unauthorized) | Команда не была выполнена т.к. для ее выполнения требуются привилегии выше стандартных, а токен авторизации не был предоставлен либо не действителен |
| 403 (Forbidden) | Команда не была выполнена т.к. предоставленный токен авторизации не имеет необходимых привилегий |
| 404 (Not Found) | Команда или запрошенный файл не найдены. Возможные причины: ошибка в синтаксисе команды, отличие в версии протокола или запрос к удаленному файлу журнала событий или данных подсистемы фото/видео верификации событий |
| 500 (Internal Server Error) | Произошла ошибка во время выполнения команды, при этом создается запись в журнале ERRATA |
| 501 (Not Implemented) | Запрошенная команда не поддерживается данной версией программного обеспечения либо отсутствуют необходимые модули для выполнения команды (например без модуля СКУД все команды управления ключами и разделами доступа будут возвращать ошибку 501 до момента подключения модуля) |
К ответу прикрепляются следующие заголовки:
| Заголовок | Описание |
|---|---|
| Content-Type | MIME Тип содержимого в ответе, для JSON части протокола = «application/json; charset=utf-8» |
| Content-Length | Количество байт в ответе. Указывается всегда при статусе = 200, по этому заголовку можно ориентироваться сколько байт необходимо дождаться от центрального пульта в случае запроса больших массивов по медленным сетям передачи данных. |
запросы начинающиеся на /json – в результате выполнения этих запросов центральный блок возвращает набор данных, например запрос событий, устройств, пользователей и т.п. Набор данных представляет из себя JSON в соответствии с rfc 8259 «The JavaScript Object Notation (JSON) Data Interchange Format» https://tools.ietf.org/html/rfc8259
/cmd – в ответ блок возвращает результат выполнения команды, например добавление нового прибора, отметка тревоги обработанной и т.п. Результатом выполнения команды может быть:
ОК - если команда выполнена успешно и не возвращает дополнительных данныхERROR - если команда не была выполнена и в настройках сервера отключена расшифровка ошибок в содержимом ответов (настройка SET_SEND_HTTP_ERRORS_DEBUG файла конфигурации)Имена переменных в запросах унифицированы между всеми запросами и командами, и перечислены в таблице:
| Переменная | Написание переменной в запросе |
|---|---|
| JSON_PARAM_LAST | last |
| JSON_PARAM_NAME | name |
| JSON_PARAM_IP | ip |
| JSON_PARAM_TYPE | type |
| JSON_PARAM_UUID | uuid |
| JSON_PARAM_LIMIT | limit |
| JSON_PARAM_FROM_UUID | fromUuid |
| JSON_PARAM_FROM_DATE | fromDate |
| JSON_PARAM_DATE | date |
| JSON_PARAM_TO_DATE | toDate |
| JSON_PARAM_VALUE | value |
| JSON_PARAM_PORT_NAME | portName |
| JSON_PARAM_ADDR_FROM | addrFrom |
| JSON_PARAM_ADDR_TO | addrTo |
| JSON_PARAM_JSON | json |
| JSON_PARAM_MD5 | md5 |
| JSON_PARAM_PATH | path |
| JSON_PARAM_LOGIN | login |
| JSON_PARAM_PASSWORD | password |
| JSON_PARAM_TOKEN | token |
| JSON_PARAM_NUM | num |
| JSON_PARAM_MAX | max |
| JSON_PARAM_MIN | min |
| JSON_PARAM_CHANNEL | chan |
| JSON_PARAM_TIME | time |
| JSON_PARAM_SUBCODE | subcode |
| JSON_PARAM_DESCRIPTION | description |
Для создания списка типовых имён можно использовать следующий фрагмент когда инициализации переменных:
public final static String JSON_PARAM_LAST = "last";
public final static String JSON_PARAM_NAME = "name";
public final static String JSON_PARAM_IP = "ip";
public final static String JSON_PARAM_TYPE = "type";
public final static String JSON_PARAM_UUID = "uuid";
public final static String JSON_PARAM_LIMIT = "limit";
public final static String JSON_PARAM_FROM_UUID = "fromUuid";
public final static String JSON_PARAM_FROM_DATE = "fromDate";
public final static String JSON_PARAM_DATE = "date";
public final static String JSON_PARAM_TO_DATE = "toDate";
public final static String JSON_PARAM_VALUE = "value";
public final static String JSON_PARAM_PORT_NAME = "portName";
public final static String JSON_PARAM_ADDR_FROM = "addrFrom";
public final static String JSON_PARAM_ADDR_TO = "addrTo";
public final static String JSON_PARAM_JSON = "json";
public final static String JSON_PARAM_MD5 = "md5";
public final static String JSON_PARAM_PATH = "path";
public final static String JSON_PARAM_LOGIN = "login";
public final static String JSON_PARAM_PASSWORD = "password";
public final static String JSON_PARAM_TOKEN = "token";
public final static String JSON_PARAM_NUM = "num";
public final static String JSON_PARAM_MAX = "max";
public final static String JSON_PARAM_MIN = "min";
public final static String JSON_PARAM_CHANNEL = "chan";
public final static String JSON_PARAM_TIME = "time";
public final static String JSON_PARAM_SUBCODE = "subcode";
public final static String JSON_PARAM_DESCRIPTION = "description";
В случае, если в комплекте поставки центрального блока включен модуль авторизации и в настройках сервера включено его использование (настройка SET_HTTP_SERVER_REQUIRE_AUTH) то к каждому запросу, который требует авторизации необходимо добавлять две переменные:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_LOGIN | Имя пользователя | ДА |
| JSON_PARAM_PASSWORD | Пароль пользователя | ДА |
ВАЖНО! Пароль чувствителен к регистру!
Запрос: https://192.168.1.168:33000/cmd/reboot?login=Admin&password=Admin
Ответ: OK
При неудачном выполнении команды: - Если имя пользователя и/или пароль не прошли проверку будет возвращен статус 401 (Unauthorized) и сформированы записи в журнале событий: - Если имя пользователя не было найдено в базе данных: событие EVENT_CLIENT_USER_AUTHORIZE_FAIL со значением предоставленной переменной JSON_PARAM_LOGIN в описании события - Если не был предоставлен пароль пользователя: событие EVENT_CLIENT_USER_AUTHORIZE_FAIL со значением предоставленной переменной JSON_PARAM_LOGIN+ локализованной строкой "Не предоставлен пароль!" в описании события - Если не было предоставлено имя пользователя: событие EVENT_CLIENT_USER_AUTHORIZE_FAIL с локализованной строкой "Не предоставлен логин! в описании события - Если имя пользователя и/или пароль были предоставлены в не распознанном формате будет сформирован ответ ERROR
ВАЖНО! Для упрощения, во всех примерах показаны параметры, передаваемые в строке запроса, однако в реальной интеграции мы настоятельно советуем использовать заголовки запроса, по крайней мере для передачи таких чувствительных данных, как имя пользователя и пароль
При обмене данными переменные JSON_PARAM_LOGIN и JSON_PARAM_PASSWORD необходимо (если включена настройка SET_HTTP_SERVER_REQUIRE_AUTH) указывать при каждом запросе к серверу. В таком случае, помимо разграничений прав доступа, появляется возможность идентификации пользователя в журнале событий - все изменения, такие как изменения настроек системы, создание, удаление и редактирование данных, будут маркироваться персональным идентификатором пользователя, который выполнял соответствующую команду.
Например:
Запрос: https://192.168.1.168:33000/cmd/enableaction?token=01a0b86e-e3bd-42a2-b7ba-e68f7e0dc32a&uuid=36d169b4-1d26-437d-908b-b62f1b059446
В данном случае, выполняется команда enableaction (включение действия) с указанием идентификатора действия (uuid=36d169b4-1d26-437d-908b-b62f1b059446) и токена (token=01a0b86e-e3bd-42a2-b7ba-e68f7e0dc32a). Если у пользователя, который получил данный токен, достаточно привилегий на включение действия, то команда будет выполнена и в журнал будет записано событие о включении действия данным пользователем, если привилегии не достаточно то будет возвращен статус 401 (Unauthorized) и в журнал будет занесено событие отказа выполнения команды пользователя.
ВАЖНО! В дальнейших примерах и описаниях команд, переменная
JSON_PARAM_TOKENбудет опущена, её поддерживают все команды и её использование одинаково в любых запросах.
ВАЖНО! Даже если настройка
SET_HTTP_SERVER_REQUIRE_AUTHотключена, переменнуюJSON_PARAM_TOKENвсёравно можно указывать в запросах - при этом сохранится персонификация действий в журнале событий, но задача по разграничению прав доступа ложится на плечи клиентского программного обеспечения.
Срок жизни токена задаётся в настройках сервера в переменной SET_SERVER_TOKEN_TTL (в секундах) и по умолчанию равен 1000 (с.). По окончанию срока жизни токена, он перестанет приниматься системой авторизации и в ответ на команду с таким токеном, будет сформирована ошибка и запись EVENT_CLIENT_USER_AUTHORIZATION_EXPIRED_USED в журнале событий. Разумно получить новый токен до окончания срока жизни старого, продление выданных токенов невозможно.
ВАЖНО! Настройки сервера, включая текущее ограничение срока жизни создаваемых токенов, можно вычитать с помощью данного API
Получение списка приборов является первым шагом в реализации интеграции с ИСО Тополь. С помощью данных списка вы получаете полную иерархию приборов, входов, выходов системы, их настройки, текущие статусы и последние значения.
Получение списка всех приборов в системе осуществляется командой: /json/getdevicelist [JSON_GET_DEVICES]
Команда не требует указания параметров
Ответ на команду: Дерево приборов в формате JSON.
Запрос: https://192.168.1.168:33000/json/getdevicelist
Ответ:
{
"uuid":"aa8ca397-0977-4cb3-9c49-876fc9d6cb8f",
"name":"Центральный блок",
"description":"Центральный блок ИСО Тополь",
"type":15,
"serialPortName":"logic-0",
"online":true,
"skud":false,
"devices":[
],
"inputs":[
{
"actionsLock":false,
"enabled":true,
"uuid":"c22c9133-0756-4b1b-afe6-eb85ef55cac7",
"holdFault":false,
"name":"Свободный объем диска",
"metrics":"Mb",
"address":0,
"holdValues":150,
"holdEnergy":150,
"holdDescreteTime":1,
"holdDescreteValue":10.0,
"weight":100,
"holdValuesPreEvent":150,
"holdValuesPostEvent":150,
"nonFaultMin":50.0,
"nonFaultMax":1.7976931348623157E308,
"nonAlarmMin":100.0,
"nonAlarmMax":1.7976931348623157E308,
"nonPreAlarmMin":-1.7976931348623157E308,
"nonPreAlarmMax":1.7976931348623157E308,
"alarm":false,
"prealarm":false,
"prealarmDelay":0,
"prearmDelay":0,
"prearm":false,
"arm":true,
"autoarm":true,
"plotterColor":-256,
"fault":false,
"holdAlarm":10000,
"options":"",
"link":true,
"lastValue":1142146.281472,
"lastDate":1625761463230,
"thresholdReachAlarm":1,
"thresholdPikesLength":1,
"analyzePikes":10000,
"pikes":0,
"pikesLength":0,
"energyThresholdInterval":0,
"analyzeEnergy":10000,
"type":130
},
{
"actionsLock":false,
"enabled":true,
"uuid":"71909cc9-b9e1-4348-b525-42e69165ec70",
"holdFault":false,
"name":"Общий объем диска",
"metrics":"Mb",
"address":1,
"holdValues":150,
"holdEnergy":150,
"holdDescreteTime":1,
"holdDescreteValue":1.0,
"weight":100,
"holdValuesPreEvent":150,
"holdValuesPostEvent":150,
"nonFaultMin":50.0,
"nonFaultMax":1.7976931348623157E308,
"nonAlarmMin":100.0,
"nonAlarmMax":1.7976931348623157E308,
"nonPreAlarmMin":-1.7976931348623157E308,
"nonPreAlarmMax":1.7976931348623157E308,
"alarm":false,
"prealarm":false,
"prealarmDelay":0,
"prearmDelay":0,
"prearm":false,
"arm":true,
"autoarm":true,
"plotterColor":-16776961,
"fault":false,
"holdAlarm":10000,
"options":"",
"link":true,
"lastValue":1472675.078144,
"lastDate":1625761463230,
"thresholdReachAlarm":1,
"thresholdPikesLength":1,
"analyzePikes":10000,
"pikes":0,
"pikesLength":0,
"energyThresholdInterval":0,
"analyzeEnergy":10000,
"type":130
}
],
"outputs":[
],
"fault":false,
"controlFault":true,
"link":true,
"ping":2,
"pingAverage":2,
"pingAverageNum":1000,
"cyclePing":60019,
"cycleAverage":60019,
"lastUpdated":1625761463230,
"linkErrorsConsThreshold":25,
"linkErrorsCons":0,
"linkErrors":0,
"lastError":0,
"inited":true,
"sort":1000,
"minRefreshTime":60000,
"maxRefreshTime":600000
},
{
"lastUpdate":0,
"uuid":"6fe5fbff-a9bc-4c26-8ca1-3712e532a2a4",
"name":"БОС-6",
"description":"Блок обработки сигналов БОС-6",
"type":1030,
"serialAddress":0,
"serialPortName":"/dev/ttyACM3",
"online":true,
"skud":false,
"devices":[
],
"inputs":[
{
"actionsLock":false,
"enabled":true,
"uuid":"6606368d-3706-4095-b8e7-f1a4ae9c10a7",
"holdFault":false,
"name":"ADC1",
"address":1,
"holdValues":12000,
"holdEnergy":150,
"holdDescreteTime":1,
"holdDescreteValue":0.0,
"weight":100,
"holdValuesPreEvent":150,
"holdValuesPostEvent":150,
"nonFaultMin":-1.7976931348623157E308,
"nonFaultMax":1.7976931348623157E308,
"nonAlarmMin":-1.7976931348623157E308,
"nonAlarmMax":1.7976931348623157E308,
"nonPreAlarmMin":-1.7976931348623157E308,
"nonPreAlarmMax":1.7976931348623157E308,
"alarm":false,
"prealarm":false,
"prealarmDelay":0,
"prearmDelay":0,
"prearm":false,
"arm":true,
"autoarm":true,
"plotterColor":-65536,
"fault":false,
"holdAlarm":10000,
"options":"",
"lastValue":32693.0,
"lastDate":1625723030000,
"thresholdReachAlarm":1,
"thresholdPikesLength":1,
"analyzePikes":10000,
"pikes":0,
"pikesLength":0,
"analyzeEnergy":10000,
"type":100
},
{
"actionsLock":false,
"enabled":true,
"uuid":"99a141bf-dae2-4310-8d4b-f9f8652135e6",
"holdFault":false,
"name":"ADC1 0-2",
"address":101,
"holdValues":12000,
"holdEnergy":150,
"holdDescreteTime":1,
"holdDescreteValue":0.0,
"weight":100,
"lowCut":0.0,
"hiCut":2.0,
"cutAverage":true,
"envelopeAttack":0.01,
"envelopeRelease":0.5,
"resolution":32.0,
"holdValuesPreEvent":150,
"holdValuesPostEvent":150,
"nonFaultMin":-1.7976931348623157E308,
"nonFaultMax":1.7976931348623157E308,
"nonAlarmMin":-1.7976931348623157E308,
"nonAlarmMax":1.7976931348623157E308,
"nonPreAlarmMin":-1.7976931348623157E308,
"nonPreAlarmMax":1.7976931348623157E308,
"alarm":false,
"prealarm":false,
"prealarmDelay":0,
"prearmDelay":0,
"prearm":false,
"arm":true,
"autoarm":true,
"plotterColor":-8355712,
"fault":false,
"lastAlarm":1625722922828,
"holdAlarm":10000,
"options":"",
"lastValue":2.3633363246917725,
"lastDate":1625723029960,
"threshold":1000.0,
"thresholdMultiplier":5.0,
"lastThreshold":1625723028797,
"thresholdRecalc":1000,
"thresholdInterval":50000,
"thresholdMin":1000.0,
"thresholdMax":5000.0,
"thresholdReachAlarm":1,
"thresholdPikesLength":1,
"analyzePikes":10000,
"pikes":0,
"pikesLength":0,
"multiplier":1.0,
"energyThreshold":0.0,
"analyzeEnergy":0,
"type":100
}
],
"outputs":[
],
"fault":false,
"controlFault":true,
"ping":0,
"pingAverage":0,
"pingAverageNum":1000,
"cyclePing":35,
"cycleAverage":35,
"lastUpdated":0,
"linkErrorsConsThreshold":25,
"linkErrorsCons":0,
"linkErrors":0,
"lastError":0,
"inited":false,
"sort":1000,
"minRefreshTime":0,
"maxRefreshTime":0
}
]
ВАЖНО! В примере показан небольшой отрывок реального ответа. В действительности, ответ на запрос данного типа может занимать значительный объем данных и требует определенного времени на подготовку сервером. Для минимизации нагрузки на сервер в случае слишком частого формирования данного запроса (например, если сервер одновременно опрашивает несколько клиентов) ответ на данный запрос кешируется сервером и данные обновляются не чаще одного раза в секунду
ВАЖНО! Формально, этого запроса достаточно для реализации простого мониторинга состояния системы, однако, куда более правильно реализовывать мониторинг однократно запросив список приборов и далее запрашивая события системы, сопоставляя идентификаторы в событиях с идентификаторами в локальной копии списка приборов.
ВАЖНО! Описание прибора может содержать не весь набор доступных переменных - если переменная не установлена (значение
null) или не поддерживается конкретным типом прибора - то она не передаётся.
uuid - Уникальный идентификатор прибора (в формате UUID)name - Наименование прибора (для удобства настройки системы, приборам можно назначать понятные наименования)description - Описание прибора (для удобства настройки, приборам можно присваивать расширенные описания с пометками и комментариями)type - Тип прибораНа данный момент поддерживаются следующие типы приборов:
| type | Тип прибора | Наименование в SDK |
|---|---|---|
| 5 | НПФ Полисервис Тополь-1 c RS-485 | TYPE_TOPOL1 |
| 10 | НПФ Полисервис Тополь-3 Линейный блок Ethernet c RS-485 | TYPE_TOPOL3L |
| 15 | НПФ Полисервис Тополь-3 Центральный блок или сервер | TYPE_TOPOL3SERVER |
| 20 | НПФ Полисервис Вибродатчик ВД-3 | TYPE_VD3 |
| 30 | НПФ Полисервис Вибродатчик ВД-5 | TYPE_VD5 |
| 40 | НПФ Полисервис Сейсмодатчик СД-3 | TYPE_SD3 |
| 50 | НПФ Полисервис Вибродатчик ДД-1 | TYPE_DD1 |
| 60 | НПФ Полисервис Концентратор входных шлейфов КХ-6 с протоколом Тополь-3 | TYPE_KX6T3 |
| 70 | НПФ Полисервис Концентратор выходных шлейфов EХ-6 с протоколом Тополь-3 | TYPE_EX6T3 |
| 100 | НПФ Полисервис Тополь-ВОЛС | TYPE_TOPOLVOLS |
| 101 | НПФ Полисервис Тополь-ВОЛС дочерняя зона | TYPE_TOPOLVOLS_ZONE |
| 105 | НПФ Полисервис Тополь-ВОЛС 12 | TYPE_TOPOLVOLS12 |
| 106 | НПФ Полисервис Тополь-ВОЛС 24 | TYPE_TOPOLVOLS24 |
| 107 | НПФ Полисервис Тополь-ВОЛС 48 | TYPE_TOPOLVOLS48 |
| 200 | НПФ Полисервис ДГ-4 | TYPE_DG4 |
| 116 | ЗАО НПФ Болид С2000-2 (прямая интеграция) | TYPE_C20002 |
| 510 | Фортеза Фосфор | TYPE_FORTEZA_PHOSPHOR |
| 1000 | Устройство с поддержкой ONVIF | TYPE_CAM_ONVIF |
| 1010 | IP камера | TYPE_CAM_IP |
| 1030 | НПФ Полисервис Тополь-АЦП | TYPE_ADC |
| 1100 | DSSL Trassir Сервер | TYPE_TRASSIR_SERVER |
| 1110 | DSSL Trassir Канал | TYPE_TRASSIR_CHANNEL |
| 1120 | DSSL Trassir Монитор | TYPE_TRASSIR_MONITOR |
| 1130 | DSSL Trassir Раскладка | TYPE_TRASSIR_VIEW |
| 2000 | ЗАО НПФ Болид С2000-ПП | TYPE_BOLID_C2000PP |
| 2010 | ЗАО НПФ Болид Сигнал-10 | TYPE_BOLID_SIGNAL_10 |
| 2020 | ЗАО НПФ Болид Сигнал-20 | TYPE_BOLID_SIGNAL_20 |
| 2030 | ЗАО НПФ Болид Сигнал-20М | TYPE_BOLID_SIGNAL_20M |
| 2040 | ЗАО НПФ Болид С2000-2 | TYPE_BOLID_C2002 |
| 2050 | ЗАО НПФ Болид С2000-4 | TYPE_BOLID_C2004 |
| 2060 | ЗАО НПФ Болид С2000-СП1 | TYPE_BOLID_SP1 |
| 2070 | ЗАО НПФ Болид С2000-БКИ | TYPE_BOLID_BKI |
| 12000 | Oracle VM точка входа | TYPE_ORACLE_VM |
| 12010 | OracleCloud Объектное хранилище | TYPE_ORACLE_OST |
| 12020 | OracleCloud Длительное хранилище | TYPE_ORACLE_LST |
| 12030 | OracleCloud Оперативное хранилище | TYPE_ORACLE_SST |
serialPortName String - имя последовательного порта, к которому подключен прибор. Может быть:
online Boolean - показывает включен ли опрос данного прибора. Если значение true то сервер будет пытаться опрашивать прибор, если значение false то сервер не будет опрашивать приборВажно! поле
onlineне показывает текущий статус обмена с прибором, для этого существует полеlink, которое показывает была ли установлена связь с прибором.
skud Boolean - учитывается ли прибор в подсистеме СКУД. Если значение true то приборы, поддерживающие хранение ключей, управляемые реле и прочие функции подсистемы СКУД будут доступны для управления в рамках подсистемы. Если значение false то приборы будут игнорироваться подсистемой.Важно! поле
skudявляется устаревшим и может быть удалено из последующих версий API
devices Device[] (JSON) - если в иерархии приборов, у данного прибора есть подчиненные приборы, то они будут описаны в данном списке.inputs Input[] (JSON) - список входов прибора
actionsLock Boolean - Вход игнорируется в действиях. Полезно, если требуется на время (например по расписанию) исключить вход из действий системы.enabled Boolean - Если установить поле в значение false то вход будет исключен из всех систем обработки, перестанет формировать события и учитываться в зонах, в которые он входитuuid String - Уникальный идентификатор входаholdFault Boolean - Если установить значение в true то вход не будет переходить в состояние “исправен” (fault = ‘false’) по результатам автоматической проверки исправности. Для перехода в состояние “исправен” будет необходима прямая команда смены статуса входа. Полезно в случае если требуется “заморозить” плавающую неисправность критически важного или задублированного датчика.name String - Наименование входаmetrics String - Единица измерения для данных входаaddress Integer - Адрес входа (номер шлейфа)holdValues Integer - Количество сэплов, значение которых удерживается в буфере в ОЗУholdEnergy Integer - Количество рассчитанных значений энергии входа, удерживаемых в буфере в ОЗУholdDescreteTime Integer - Временная дискретность регистрации данныхholdDescreteValue Double - Амплитудная дискретность регистрации данныхweight Integer - Весовой коэффициент входа > Важно! В следующих версиях API добавится возможность указывать весовые коэффициенты непосредственно в настройках зон, что позволит одному входу иметь разные веса в разных зонахholdValuesPreEvent Integer - Сколько значений до события (тревоги или неисправности) необходимо записывать в регистратор данныхholdValuesPostEvent Integer - Сколько значений после события (тревоги или неисправности) необходимо записывать в регистратор данныхnonFaultMin Double - Минимально допустимое входное значение. Если входное значение будет ниже указанного то будет сформировано событие неисправностиnonFaultMax Double - Максимально допустимое входное значение. Если входное значение будет выше указанного то будет сформировано событие неисправностиnonAlarmMin Double - Минимальное нормальное значение не формирующее тревогу. Если входное значение будет ниже указанного то будет сформировано событие тревогиnonAlarmMax Double - Максимальное нормальное значение не формирующее тревогу. Если входное значение будет выше указанного то будет сформировано событие тревогиnonPreAlarmMin Double - Максимальное нормальное значение не формирующее предварительную тревогу. Если входное значение будет выше указанного то будет сформировано событие тревогиnonPreAlarmMax Double - Максимальное нормальное значение не формирующее предварительную тревогу. Если входное значение будет выше указанного то будет сформировано событие тревогиalarm Boolean - Вход находится в тревогеprealarm Boolean - Вход находится в предварительной тревогиprealarmDelay Long - Задержка перед тревогой, минимальная длительность извещения “тревога” от входа, при котором формируется событие “тревога” в системеprearmDelay Long - Задержка перед взятием на охрануprearm Boolean - Вход находится в стадии постановки на охрануarm Boolean - Вход поставлен на охрануautoarm Boolean - Автоматическая постановка входа на охрану при включении системыplotterColor Integer - Цвет входа на графигах в плоттере сигналовfault Boolean - Истина если у входа зарегистрирована неисправность, не имеющая отношения к линиии связи. Возникает в случае если прибор сам доложил о неисправности входа либо текущие значение входа находится за пределами нормы.holdAlarm Long - Время удержания тревоги (в миллисекундах). > Важно! Если значение holdAlarm = 0 то тревоги не будут завершаться автоматически, а только по команде API. Если значение holdAlarm > 0 то тревоги будут автоматически завершаться после истечения указанного времени. При этом, тревоги можно досрочно завершить командой APIoptions String - Дополнительные опции прибора. Набор опций персонален для каждого типа прибора.link Boolean - Связь со входом установлена и находится в нормальном состоянииlastValue Double - Последнее значение входного сигнала, полученное входомlastDate Long - Последнее время получения входного сигналаthreshold Double - Текущий пороговый уровеньthresholdMultiplier Double - Множитель порога (Число, на которое умножается среднее значение сигнала за период thresholdInterval)lastThreshold Long -Время последнего расчёта порогаthresholdRecalc Long - Интервал (в миллисекундах) пересчёта порога (как часто пересчитывается пороговый уровень)thresholdInterval Long - Интервал (в миллисекундах) расчёта порога (за какое время рассчитывается пороговый уровень)thresholdMin Double - Минимально допустимый уровень порога. Ниже указанного в этом поле числа, пороговый уровень опускаться не будетthresholdMax Double - Максимально допустимый уровень порога. Выше указанного в этом поле числа, пороговый уровень подниматься не будетmultiplier Double - Множитель для входящих значений сигнала. Можно использовать как цифровой усилитель или делительenergy Double - Текущая энергия входаenergyThresholdMultiplier Double - Множитель порога энергии (Число, на которое умножается среднее значение сигнала за период energyThresholdInterval)energyThreshold Double - Текущий пороговый уровень энергииenergyThresholdMin Double - Минимально допустимый уровень порога энергии. Ниже указанного в этом поле числа, пороговый уровень энергии опускаться не будетenergyThresholdMax Double - Минимально допустимый уровень порога энергии. Ниже указанного в этом поле числа, пороговый уровень энергии опускаться не будетenergyReachAlarm Double - Если энергия достигнет указанного в этом поле значения, будет сформировано событие тревогиthresholdReachAlarm Integer - Количество превышений сигналом порога, для формирования тревоги по входуthresholdPikesLength Integer - Продолжительность превышений сигналом порога, для формирования тревоги по входу (в количестве сэплов)analyzePikes Long - Время (в миллисекундах) за которое происходит анализ количества и продолжительности превышений сигналом порогаpikes Integer - Текущее количество обнаруженных превышений сигналом порогаpikesLength Integer - Текущая обнаруженная продолжительность превышения сигналом порогаenergyThresholdInterval Long - Интервал расчёта порога энергииanalyzeEnergy Long - Время (в миллисекундах) за которое анализируется и накапливается энерегия для входаtype Integer - Тип входа (в актуальных версиях API не имеет большого значения, оставлено для совместимости с существующими интеграциями)outputs Output[] (JSON) - список выходов прибораfault Boolean - если значение поля true то прибор отмечен как неисправным, в противном случае неисправностей не выявленоcontrolFault Boolean - если данное поле установлено в значение false то у прибора отключен контроль неисправностей - поле fault не будет переходить в состояние true, события неисправности не будут формироваться.link Boolean - если поле отсутствует в описании прибора то связь с прибором не была установлена (по умолчанию значение null), если поле установлено в значение ‘true’ то связь с прибором установлена и в данный момент нормальна, если поле установлено в значение false то связь с прибором в данный момент отсутствуетВажно! Если для вновь созданного прибора поле
linkне переходит в состояниеtrueубедитесь что включен опрос прибора (значениеonlineвыставлено вtrue)
ping Integer - время доступа до прибора при его последнем опросе.pingAverage Integer - среднее время доступа до прибора при его опросеpingAverageNum Integer - количество циклов опроса, за которое усредняется время доступа для расчёта переменной pingAveragecyclePing Integer - время циклического опроса прибораcycleAverage Integer - среднее циклическое время опроса прибораlastUpdated Long - время последнего удачного опроса прибора в формате POSIX time (Unix epoch) + три регистра для миллисекундlinkErrorsConsThreshold Integer - количество последовательных ошибок обмена с прибором, до выставления link=fault и формирования события потери связи с приборомlinkErrorsCons Integer - текущее количество последовательных ошибок обмена (с момента запуска сервера)linkErrors Integer - общее количество ошибок обмена (с момента запуска сервера)lastError Integer - последняя ошибка обмена с приборомinited Boolean - был ли прибор успешно инициализирован после запуска сервераsort Integer - порядок сортировки прибора в списке приборовminRefreshTime Long - минимальное время обновления прибора (в миллисекундах). Прибор не будет опрашиваться чаще, чем указано в данном поле. Полезно для приборов, данные с которых нужны реже, чем позволяет скорость их опроса, либо для приборов, которые не поддерживают слишком частые опросы.maxRefreshTimeLong - максимальное время обновления прибора (в миллисекундах). Если прибор не был обновлен за данный интервал времени, то формируется событие потери связи и поле link переходит в состояние falseВсе изменения состояний и настроек элементов системы протоколируются в журнале событий.
Регулярно вычитывая новые события, можно поддерживать локальною копию всех данных в актуальном состоянии.
Получение списка событий системы осуществляется запросом: /json/getevents [JSON_GET_EVENTS]
Команда требует минимум два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_FROM_UUID | Идентификатор события, начиная с которого необходимо получить новые записи | НЕТ |
| JSON_PARAM_LIMIT | Ограничитель количества событий для выгрузки | НЕТ |
| JSON_PARAM_FROM_DATE | Время события, начиная с которого необходимо получить записи | НЕТ |
| JSON_PARAM_TO_DATE | Время события, по которое необходимо получить записи | НЕТ |
При запросе событий без указания параметров, будут предоставлена выгрузка буфера событий сервера в ОЗУ (объем буфера указывается в настройке SET_EVENTS_CACHE сервера) с момента запуска.
После получения последних событий, новые события стоит запрашивать с указанием параметра JSON_PARAM_FROM_UUID, где значением параметра является идентификатор последнего события.
Для получения событий за определенный временной интервал внутри буфера событий используются параметры JSON_PARAM_FROM_DATE и JSON_PARAM_FROM_DATE которые можно использовать как независимо так и совместно.
Ответ на команду: Список событий в формате JSON.
Запрос: https://192.168.1.168:33000/json/getevents
Ответ:
[
{
"uuid":"e848dc75-e9e4-4564-9725-1354b072612d",
"date":"1625824181714",
"code":"101",
"level":"200",
"description":"Автоматическое завершение тревоги",
"input":"a49ed67a-fb9c-4f1a-9f4f-d3046f87fd58"
},
{
"uuid":"aba4aad9-a712-4380-a283-98c86155a27d",
"date":"1625824341970",
"code":"1015",
"level":"10",
"description":"serialAddress=10",
"device":"aa8ca397-0977-4cb3-9c49-876fc9d6cb8f",
"user":"f3e91da0-5f29-4596-bc49-a73aee4be463"
},
{
"uuid":"50fc0a6e-1d04-49b6-9c99-67eac79d5475",
"date":"1625824341970",
"code":"1015",
"level":"10",
"description":"serialPortName=COM1",
"device":"aa8ca397-0977-4cb3-9c49-876fc9d6cb8f",
"user":"f3e91da0-5f29-4596-bc49-a73aee4be463"
}
]
В примере ответа мы видим три события: - Событие с кодом 101 = Тревога завершена для входа с идентификатором a49ed67a-fb9c-4f1a-9f4f-d3046f87fd58, произошедшее в 1625824181714 = 09.07.2021, 09:49 (GMT) с описанием причины завершения тревоги (автоматическое завершение) - Событие с идентификатором aba4aad9-a712-4380-a283-98c86155a27d, кодом 1015 = Изменена конфигурация прибора, ссылкой на прибор (для которого вносились изменения в конфигурацию) device = aa8ca397-0977-4cb3-9c49-876fc9d6cb8f, указанием внесенных изменений (serialAddress=10), указанием пользователя, который внёс данные изменения (user = f3e91da0-5f29-4596-bc49-a73aee4be463) и времени события 1625824341970 = 09.07.2021, 09:52 (GMT) - Событие с идентификатором 50fc0a6e-1d04-49b6-9c99-67eac79d5475, кодом 1015 = Изменена конфигурация прибора, ссылкой на прибор (для которого вносились изменения в конфигурацию) device = aa8ca397-0977-4cb3-9c49-876fc9d6cb8f, указанием внесенных изменений (serialPortName=COM1), указанием пользователя, который внёс данные изменения (user = f3e91da0-5f29-4596-bc49-a73aee4be463) и времени события 1625824341970 = 09.07.2021, 09:52 (GMT)
Важно! Обратите внимание что точность определения времени событий - 1 миллисекунда, что не всегда позволяет вести опрос новых событий ориентируясь только на время последнего события в локальной копии (с использованием только параметра
JSON_PARAM_FROM_DATE) - именно по этому рекомендуется использовать запрос событий с использованием точного указания последнего известного события в параметреJSON_PARAM_FROM_UUID
Событие может иметь следующие поля (пустые поля не передаются):
date Long - Дата и время события;module Integer - Модуль, сформировавший событие*code Integer - Код события**description String - Описание событияlevel Integer - Уровень события***uuid UUID - Идентификатор событияuser UUID - Пользователь, который вызвал данное событиеinput UUID - Вход, который принимал участие в событиеoutput UUID - Выход, который принимал участие в событиеdevice UUID - Прибор, который принимал участие в событиеzone UUID - Зона, в которой произошло событиеkey UUID - Ключ, который принимал участие в событииlinks String[] - Ссылки, прикрепленные к событию| Код модуля | Значение |
|---|---|
| 3000 | Модуль интернационализации |
| 4000 | Модуль SQL сервера |
| 5000 | Модуль настроек |
| 7000 | Модуль HTTP сервера |
| 8000 | Модуль HTTP клиента |
| Код события | Значение |
|---|---|
| 80 | Авторизован пользователь |
| 100 | Тревога |
| 101 | Тревога завершена |
| 105 | Тревога отмечена обработанной |
| 106 | Тревога отмечена ложной |
| 107 | Прибор инициализирован |
| 110 | Поставлен на охрану |
| 111 | Снят с охраны |
| 120 | Неисправность |
| 121 | Неисправность устранена |
| 130 | Установлена связь |
| 131 | Связь потеряна |
| 140 | Постановка на охрану |
| 141 | Отмена постановки на охрану |
| 150 | Предварительная тревога |
| 151 | Предварительная тревога завершена |
| 200 | Дискретный выход включен |
| 210 | Дискретный выход выключен |
| 220 | Состояние регулируемого выхода изменилось |
| 900 | Выявлена установка имитатора устройства в линию! |
| 990 | Система запущена |
| 991 | Система выключается |
| 999 | База данных создана при первом запуске или пересоздана по команде администратора |
| 1000 | В конфигурацию добавлен новый прибор |
| 1005 | Обновлена конфигурация прибора |
| 1006 | Настройки записаны в прибор |
| 1007 | Ошибка обновления конфигурации прибора |
| 1010 | Прибор удален из конфигурации |
| 1020 | Программное обеспечение прибора успешно обновлено |
| 1021 | Ошибка обновления программного обеспечения прибора |
| 1100 | Запущено сканирование линии |
| 1101 | Сканирование линии завершено |
| 1102 | При сканировании адреса найден новый прибор |
| 1103 | При сканировании адреса найден уже существующий прибор |
| 1104 | При сканировании адреса найден замененный прибор |
| 1105 | При сканировании адреса прибор не найден |
| 1110 | Запущена автоматическая адресация |
| 1111 | Автоматическая адресация завершена |
| 1112 | Автоматическая адресация успешна |
| 1113 | Ошибка автоматической адресации - нет ответа |
| 1114 | Ошибка автоматической адресации - ошибка CRC |
| 1115 | Ошибка автоматической адресации - одинаковые серийные номера в линии |
| 1120 | Принудительная замена адреса по серийному номеру |
| 2000 | Активация действия |
| 2010 | Деактивация действия |
| 3010 | Ошибка синтаксиса в аргументах командной строки |
| 3020 | Загружен локализованный перевод приложения |
| 3030 | ОШИБКА загрузки локализованного перевода приложения |
| 3100 | Удалена папка |
| 3101 | ОШИБКА удаления папки! |
| 4000 | Загружены настройки SQL |
| 4010 | ОШИБКА загрузки настроек SQL! |
| 4020 | ОШИБКА SQL! |
| 4030 | SQL Сервер подключен |
| 4040 | SQL ОШИБКА подключения! |
| 4050 | SQL Сервер отключен |
| 4060 | SQL ОШИБКА отключения! |
| 4070 | SQL Таблица создана |
| 4080 | SQL Таблица обновлена или изменена |
| 4090 | SQL Таблица УДАЛЕНА |
| 4100 | SQL ОШИБКА создания таблицы! |
| 4110 | SQL создана база данных |
| 4120 | Создана резервная копия базы данных |
| 4130 | ОШИБКА создания резервной копии базы данных |
| 4140 | Список доступных резервных копий баз данных |
| 4200 | SQL ОШИБКА при сохранении события! |
| 5000 | Установлен тип операционной системы |
| 5010 | Определена локализация |
| 5020 | Принудительно выставлена локализация |
| 5030 | Настройки загружены |
| 5040 | ОШИБКА загрузки настроек |
| 5050 | Настройка сохранена |
| 5060 | ОШИБКА сохранения настройки! |
| 6000 | Инициализирована подсистема событий |
| 6010 | Неизвестный код события - разные версии клиента и сервера? |
| 6020 | Новое исключение (ошибка) программы |
| 6030 | Нет связи с сервером SQL, запись отчета об ошибке на диск |
| 6040 | Отчет об ошибке записан на диск |
| 6050 | ОШИБКА ЗАПИСИ ОТЧЕТА ОБ ОШИБКЕ НА ДИСК! |
| 7000 | HTTP сервер запущен |
| 7010 | ОШИБКА запуска HTTP сервера! |
| 7020 | HTTP клиент подключен |
| 7030 | HTTP запрос |
| 7040 | HTTP ответ |
| 7050 | HTTP ошибка параметра запроса |
| 7060 | HTTP ошибка в запросе |
| 7070 | HTTP ошибка обработки запроса |
| 8000 | HTTP клиент подключен |
| 8010 | HTTP клиент ОШИБКА подключения |
| 8020 | Ошибка обработки JSON |
| 9010 | Информация о диске |
| 9020 | Заканчивается свободное место на диске! |
| 9030 | Информация о системных ресурсах |
| 9035 | Информация о системных температурах |
| 9040 | Температура процессора слишком велика! |
| 9100 | Установлена системное время |
| 6005 | События загружены из базы данных |
| 7080 | Создан новый SSL сертификат |
| 7090 | ОШИБКА при создании SSL сертификата! |
| 7100 | Запущен широковещательный сервер |
| 7110 | ОШИБКА запуска широковещательного сервера! |
| 7095 | Не найден SSL сертификат! |
| 1015 | Изменена конфигурация прибора |
| 1016 | Ошибка в конфигурации прибора! |
| 1017 | Настройки записаны в базу данных |
| 1018 | Ошибка записи настроек в базу данных! |
| 1030 | Добавлен новый вход |
| 1040 | Добавлен новый выход |
| 1031 | Вход удален |
| 1041 | Выход удален |
| 1032 | Изменена конфигурация входа |
| 1042 | Изменена конфигурация выхода |
| 1050 | Устройству добавлено подчиненное устройство |
| 1051 | Подчиненное устройство удалено |
| 1052 | Изменена конфигурация подчиненного устройства |
| 10000 | Добавлен локальный последовательный порт |
| 10010 | ОШИБКА открытия локального последовательного порта |
| 10020 | Эхо последовательного порта включено |
| 10025 | Эхо последовательного порта выключено |
| 10015 | ОШИБКА записи в локальный последовательный порт |
| 10016 | ОШИБКА чтения из локального последовательного порта |
| 10017 | ОШИБКА закрытия локального последовательного порта |
| 10018 | ОШИБКА очистки локального последовательного порта |
| 10019 | ОШИБКА установки параметров локального последовательного порта |
| 4300 | Структура SQL обновлена |
| 4310 | ОШИБКА обновления схемы SQL |
| 20010 | Вход разрешен |
| 20020 | Выход разрешен |
| 20030 | Вход по кнопке |
| 20040 | Выход по кнопке |
| 20050 | Вход запрещен |
| 20060 | Выход запрещен |
| 20070 | Вход |
| 20080 | Выход |
| 30010 | Найден неизвестный ключ |
| 30020 | Создан новый ключ |
| 30030 | Ключ сохранен в базе данных |
| 30040 | Ключ сохранен в приборе |
| 30050 | Ключ удален из базы данных |
| 30060 | Ключ удален из прибора |
| 30000 | Ключи загружены из базы данных |
| 5070 | Не найден файл с конфигурацией сервера! |
| 5080 | Не найден файл с конфигурацией клиента! |
| 5075 | Создан новый файл с конфигурацией сервера |
| 5085 | Создан новый файл с конфигурацией клиента |
| 5090 | Сохранены сетевые настройки устройства |
| 40000 | В сети доступна новая версия ПО |
| 40010 | В сети нет доступных обновлений ПО |
| 40020 | Сервер обновлений не доступен (проверьте подключение к интернету!) |
| 40030 | Начата загрузка обновления ПО |
| 40040 | Хэш файла обновления ОК |
| 40050 | ОШИБКА хэша файла обновления |
| 40060 | Обновление успешно завершено |
| 10050 | ОШИБКА порта интеграции по Modbus |
| 10060 | Интеграция по Modbus запущена успешно |
| 1060 | Настройки зоны записаны в базу данных |
| 1061 | ОШИБКА записи настроек зоны в базу данных! |
| 1065 | Конфигурация зоны в системе изменена |
| 2020 | Изменена конфигурация действия |
| 1033 | Вход не найден в базе данных - прибор или вход удалены? |
| 1043 | Выход не найден в базе данных - прибор или выход удалены? |
| 2030 | Вход добавлен в действие |
| 2035 | Вход удален из действия |
| 2040 | Выход добавлен в действие |
| 2045 | Выход удален из действия |
| 1106 | ОШИБКА CRC при сканировании линии |
| 1107 | ОШИБКА ответа при сканировании линии |
| 1080 | Конфигурация контроллера зон изменена |
| 11000 | Изменена конфигурация формы |
| 1082 | В конфигурацию добавлен контроллер зон |
| 1084 | Контроллер зон удален из конфигурации |
| 1086 | ОШИБКА конфигурации контроллера зон |
| 100001 | Клиент подключен к серверу |
| 100005 | Клиент не может подключиться к серверу |
| 100010 | Соединение с сервером потеряно! |
| 100100 | Клиент не может загрузить видео библиотеку |
| 1180 | Сканирование LAN начато |
| 1181 | Сканирование LAN завершено |
| 1182 | Сканирование LAN: Найден прибор |
| 11100 | Изменена конфигурация планов |
| 225 | Выход инициализирован |
| 230 | ОШИБКА выхода |
| 6011 | Файл журнала событий удален |
| 6012 | Папка дополнительных данных журнала событий удалена |
| 50080 | UPnP порт проброшен |
| 50081 | UPnP ОШИБКА проброса порта |
| 100200 | Авторизован пользователь |
| 100210 | ОШИБКА авторизации пользователя |
| 100220 | Продлена авторизация пользователя |
| 100230 | Завершена авторизация пользователя |
| 100240 | Пользователь пытался использовать просроченную авторизацию |
| 100250 | При попытке авторизации использован не существующий токен! |
| 100260 | ОШИБКА формата токена авторизации |
| 1026 | ОШИБКА в конфигурации прибора |
| 2060 | ОШИБКА действия |
| Уровень события | Значение |
|---|---|
| 3 | Расширенная отладка |
| 5 | Отладочное сообщение |
| 10 | Информационное сообщение |
| 50 | Предупреждение |
| 100 | Отказ |
| 200 | Тревога |
| 500 | Ошибка |
| 999 | Катастрофа |
События могут иметь любые промежуточные уровни, значения в таблице позволяют ориентироваться по важности уровня события и настраивать систему трансляции и хранения событий необходимым образом.
Рекомендуется не снижать порог трансляции и хранения событий ниже 50
Изменение настроек прибора осуществляется командой: /cmd/setdevice [CMD_SET_DEVICE]
Команда требует минимум два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор прибора | ДА |
| Наименование изменяемого поля | Новое значение изменяемого поля | ДА |
За одну команду можно изменять значение нескольких полей у одного прибора, передавая имена и новые значения полей по очереди
Ответ на команду: Строка OK
Запрос: https://192.168.1.168:33000/cmd/setdevice?uuid=aa8ca397-0977-4cb3-9c49-876fc9d6cb8f&serialPortName=COM1&serialAddress=10
Ответ: OK
В данном примере, у прибора с uuid=aa8ca397-0977-4cb3-9c49-876fc9d6cb8f изменяются два параметра - полю serialPortName присваивается значение COM1 а полю serialAddress присваивается значение 10
Важно! Значения строковых переменных, содержащих пробелы и/или специальные символы, необходимо преобразовывать в формат
application/x-www-form-urlencodedв кодировкеUTF-8.
Начиная с Java 1.4 это можно осуществить функциейURLEncoder.encode(СтроковоеЗначение, "UTF-8")
Важно! Командой
CMD_SET_DEVICEнастраиваются только поля прибора, поля входов и выходов настраиваются отдельными командами
Для изменения настроек входов прибора используется команда: /cmd/setinput [CMD_SET_INPUT]
Команда требует минимум два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор входа | ДА |
| Наименование изменяемого поля | Новое значение изменяемого поля | ДА |
За одну команду можно изменять значение нескольких полей у одного прибора, передавая имена и новые значения полей по очереди
Ответ на команду: Строка OK
Для изменения настроек входов прибора используется команда: /cmd/setoutput [CMD_SET_OUTPUT]
Команда требует минимум два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор выхода | ДА |
| Наименование изменяемого поля | Новое значение изменяемого поля | ДА |
За одну команду можно изменять значение нескольких полей у одного прибора, передавая имена и новые значения полей по очереди
Ответ на команду: Строка OK
## 6. Постановка и снятие с охраны
Постановка и снятие с охраны осуществляются командой: /cmd/setarm [CMD_SET_ARM]
Команда требует два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор входа или зоны | ДА |
| JSON_PARAM_VALUE | true для постановки false для снятия |
ДА |
Ответ: OK в случае успеха
С помощью команды: /cmd/setalarm [CMD_SET_ALARM] можно как завершить текущую тревогу по входу или зоне, так и принудительно перевести вход или зону в состояние Тревога
Команда требует два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор входа или зоны | ДА |
| JSON_PARAM_VALUE | true для постановки false для снятия |
ДА |
Ответ: OK в случае успеха
Зоны представляют из себя группы входов, которые можно объединять как по физическому принципу (входы, охраняющие одни и те-же участки периметра) так и по логическому - для формирования развитой логики выдачи извещений о тревоге по сравнению сигналов входов.
Список зоны может быть получен с сервера с помощью команды: /json/getzoneslist [JSON_GET_ZONES]
Команда не требует указания параметров
Ответ: Список зон в формате JSON.
Запрос: https://192.168.1.168:33000/json/getzoneslist
Ответ:
[
{
"uuid":"24439735-a82e-4a2f-b621-4985237706fc",
"type":"1",
"showInController":"true",
"name":"Дисковые накопители",
"inputs":[
"c22c9133-0756-4b1b-afe6-eb85ef55cac7",
"71909cc9-b9e1-4348-b525-42e69165ec70",
"ee980398-21ee-4d49-b81a-609753c961e8",
"437b2739-19f5-4b01-80c5-eb1c8479622d",
"955cbc78-dfac-42a1-9fbd-4c13d8a6dd44",
"7abe5b20-22e8-428e-9d65-6a1085757b61",
"7f1022ef-b4fb-4e59-8108-11e6e8287d75",
"a49ed67a-fb9c-4f1a-9f4f-d3046f87fd58"
],
"energyComparator":"3.0",
"minEnergyToCompare":"500",
"pikesForSUMAlarm":"0",
"energyForSUMAlarm":"0",
"pikesMin":"2",
"pikesLengthMin":"5",
"nFromZone":"1",
"weightForAlarm":"0",
"alarm":"false",
"arm":"false",
"fault":"true",
"link":"true"
},
{
"uuid":"f1e10356-7968-4232-a46f-11f3f216044e",
"type":"1",
"showInController":"true",
"name":"Здоровье сервера",
"inputs":[
"1170f76c-8711-465c-bf9d-0b175eaaa568",
"15091e61-8517-4b90-93f5-4e409e4c5295"
],
"energyComparator":"3.0",
"minEnergyToCompare":"500",
"pikesForSUMAlarm":"0",
"energyForSUMAlarm":"0",
"pikesMin":"2",
"pikesLengthMin":"5",
"nFromZone":"1",
"weightForAlarm":"0",
"alarm":"false",
"arm":"false",
"fault":"false",
"link":"true"
}
]
Описание зоны содержит следующие поля: - uuid UUID - Идентификатор зоны - type Integer - Тип зоны (устаревшее, оставлено для совместимости со старыми версиями интеграций, в новых версиях возможно комбинировать любые взаимодействия входов для любых типов зон) - showInController boolean - Отображать ли данную зону в контроллерах зон (устаревшее, оставлено для совместимости со старыми версиями интеграций, в новых версиях контроллеры сами формируют свои списки зон) - name String - Имя зоны - inputs UUID[] - Массив идентификаторов входов, входящих в данную зону - energyComparator Integer - Кратность энергий при сравнении для тревоги * - minEnergyToCompare Integer - Минимальная энергия для сравнения - pikesForSUMAlarm Integer - Сумма превышений для тревоги - energyForSUMAlarm Integer - Сумма энергии для тревоги - pikesMin Integer - Общее количество превышений сигналом порога по всем входам для формирования извещения “Тревога” (поддерживается начиная с версии 39) - pikesLengthMin Integer - Общая продолжительность превышений сигналом порога по всем входам для формирования извещения “Тревога” (поддерживается начиная с версии 39) - nFromZone Integer - Кол-во сработавших входов для тревоги - weightForAlarm Integer - Вес для тревоги - alarm Integer - Текущий статус тревоги - arm Integer - Текущий статус постановки на охрану - fault Integer - Текущий статус исправности зоны - link Integer - Текущий статус наличия связи
* Более подробно параметры настройки зоны описаны в руководстве оператора ИСО Тополь
Поля зоны могут изменены с помощью команды: /cmd/setzone [CMD_SET_ZONE]
Команда требует минимум два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор зоны | ДА |
| Наименование изменяемого поля | Новое значение изменяемого поля | ДА |
За одну команду можно изменять значение нескольких полей у одной зоны, передавая имена и новые значения полей по очереди
Ответ на команду: Строка OK
Запрос: https://192.168.1.168:33000/cmd/setzone?uuid=24439735-a82e-4a2f-b621-4985237706fc&energyComparator=5&nFromZone=2
Ответ: OK
В данном примере полям energyComparator и energyComparator для зоны 24439735-a82e-4a2f-b621-4985237706fc присваиваются значения 5 и 2 соответственно.
Запрос:
https://127.0.0.1:33000/cmd/setzone?uuid=24439735-a82e-4a2f-b621-4985237706fc&inputs=%22inputs%22%3A%5B%22c22c9133-0756-4b1b-afe6-eb85ef55cac7%22%2C%2271909cc9-b9e1-4348-b525-42e69165ec70%22%2C%22ee980398-21ee-4d49-b81a-609753c961e8%22%2C%22437b2739-19f5-4b01-80c5-eb1c8479622d%22%2C%22955cbc78-dfac-42a1-9fbd-4c13d8a6dd44%22%2C%227abe5b20-22e8-428e-9d65-6a1085757b61%22%2C%227f1022ef-b4fb-4e59-8108-11e6e8287d75%22%2C%22a49ed67a-fb9c-4f1a-9f4f-d3046f87fd58%22%2C%221170f76c-8711-465c-bf9d-0b175eaaa568%22%2C%2215091e61-8517-4b90-93f5-4e409e4c5295%22%5D
Ответ: OK
В данном примере полю inputs присваивается значение массива, состоящего из следующих идентификаторов входов: "inputs":["c22c9133-0756-4b1b-afe6-eb85ef55cac7","71909cc9-b9e1-4348-b525-42e69165ec70","ee980398-21ee-4d49-b81a-609753c961e8","437b2739-19f5-4b01-80c5-eb1c8479622d","955cbc78-dfac-42a1-9fbd-4c13d8a6dd44","7abe5b20-22e8-428e-9d65-6a1085757b61","7f1022ef-b4fb-4e59-8108-11e6e8287d75","a49ed67a-fb9c-4f1a-9f4f-d3046f87fd58","1170f76c-8711-465c-bf9d-0b175eaaa568","15091e61-8517-4b90-93f5-4e409e4c5295"]
ВАЖНО! Обратите внимание на синтаксис описания массивов по стандарту
Uniform Resource Identifier -> Percent-encoding, более подробно можно ознакомиться тут: https://en.wikipedia.org/wiki/Uniform_Resource_Identifier
Действия представляют собой реакции системы на различные события. С помощью действий можно настроить включение релейных выходов при тревоге, запись данных фото-видеоверификации по событиям, активацию тревожного монитора и любые другие команды, доступные в вашем наборе модулей ИСО Тополь.
Список действий может быть получен с сервера с помощью команды: /json/getactionslist [JSON_GET_ACTIONS]
Команда не требует указания параметров
Ответ: Список действий в формате JSON.
Запрос: https://192.168.1.168:33000/json/getactionslist
Ответ:
[
{
"uuid":"ae1a2da6-18da-47a4-88c6-6624599b393f",
"name":"Сигнал тревоги",
"type":1,
"inputs":[
"24439735-a82e-4a2f-b621-4985237706fc"
],
"outputs":[
"d3c613db-31ac-4202-bb03-c0b5cf329399"
],
"disableOnFireStateEnd":true,
"updateActivatedTime":false,
"activeFrom":0,
"activateForTime":0,
"options":"",
"activated":false,
"description":""
"fire":1,
},
{
"uuid":"a94d5dd4-b275-4704-aca2-a2fc33ed8ffe",
"name":"Включение охлаждения",
"type":1,
"inputs":[
"15091e61-8517-4b90-93f5-4e409e4c5295"
],
"outputs":[
"adc19dda-0ef4-476d-bd29-062312d9d41b",
"cd7cae2d-4220-4b4c-a71c-ba8bee692696"
],
"disableOnFireStateEnd":true,
"updateActivatedTime":false,
"activeFrom":0,
"activateForTime":0,
"options":"",
"activated":false,
"description":""
"fire":1,
}
]
Описание действия содержит следующие поля: - uuid UUID - Идентификатор действия - type Integer - Тип действия
| type | Тип действия | Наименование в SDK |
|---|---|---|
| 1 | Включить выход | ACT_OUTPUT_ENABLE |
| 10 | Включить выход на заданное время | ACT_OUTPUT_ENABLE_FOR_TIME_PERIOD |
| 20 | Выключить выход | ACT_OUTPUT_DISABLE |
| 30 | Включить тревожный монитор и отобразить заданный видео канал | ACT_SHOW_VIDEO_IN_ALARM_MONITOR |
| 40 | Поставить на охрану | ACT_ARM |
| 50 | Снять с охраны | ACT_DEARM |
| 100 | Фотоверификация с сервера Trassir | ACT_TRASSIR_CAPTURE_PHOTO |
| 110 | Запись видеоверификации | ACT_VIDEO_RECORD |
| 150 | Переключить раскладку монитора оператора Trassir на заданную | ACT_TRASSIR_SHOW_TEMPLATE |
ВАЖНО! Список поддерживаемых действий модулей-расширений доступен по запросу в их описании.
name String - Имя действияinputs UUID[] - Массив идентификаторов входов и/или зон, события которых приводят к активации действия. >ВАЖНО! В массив inputs можно одновременно включать как отдельные входы так и зоны целиком. Если действие активируется зоной, то сохраняются все логические настройки зоны при активации действия
outputs UUID[] - Массив выходов, которыми управляет данное действие.disableOnFireStateEnd Boolean - Если поле = true то действие прекращается при завершении события, которое инициировало его запуск (например при окончании тревоги, событие запускаемое по тревоге, то-же завершится), если поле = false то событие останется активным до наступления другого критерия окончания или ручного завершения.updateActivatedTime Boolean - Если поле = true то время запуска события будет продлеваться пока активен критерий запуска события и при каждом новом наступлении критерия в процессе активности события, если поле = false то время запуска фиксируется при активации. Пример - если событие активируется тревогой на 10 секунд, то если поле = true, событие завершится только через 10 секунд после окончания тревоги, при условии что за эти 10 секунд не будет сформировано новой тревоги. Если поле = false то событие завершится через 10 секунд после старта.activeFrom Long - Последнее время запуска событияactivateForTime Long - Время, на которое необходимо активировать событие (при использовании обратите внимание на поле updateActivatedTime)options String - Дополнительные параметры действия (персональны для разных типов)activated Boolean - Указывает активировано ли действие на данный моментdescription String - Произвольное описание событияfire Integer - Тип запуска события:
| fire | Запуск действия | Наименование в SDK |
|---|---|---|
| 1 | При тревоге | FIRE_ALARM |
| 5 | От момента наступления тревоги до завершения тревоги | FIRE_FROM_ALARM_TO_DEALARM |
| 10 | При завершении тревоги | FIRE_DEALARM |
| 20 | При постановке на охрану | FIRE_ARM |
| 30 | При снятии с охраны | FIRE_DEARM |
| 40 | При неисправности | FIRE_FAULT |
| 50 | При восстановлении из неисправности | FIRE_DEFAULT |
| 60 | При восстановлении связи | FIRE_LINK_OK |
| 70 | При потери связи | FIRE_LINK_FAIL |
Поля действий могут изменены с помощью команды: /cmd/setaction [CMD_SET_ACTION]
Команда требует минимум два параметра:
| Переменная | Содержание | Обязательно |
|---|---|---|
| JSON_PARAM_UUID | Идентификатор действия | ДА |
| Наименование изменяемого поля | Новое значение изменяемого поля | ДА |
За одну команду можно изменять значение нескольких полей у одного действия, передавая имена и новые значения полей по очереди
Ответ на команду: Строка OK
Запрос: https://192.168.1.168:33000/cmd/setaction?uuid=a94d5dd4-b275-4704-aca2-a2fc33ed8ffe&updateActivatedTime=true&type=10&options=600000
Ответ: OK
В данном примере действие a94d5dd4-b275-4704-aca2-a2fc33ed8ffe (“Включение охлаждения”) будет настроено на включение на заданное время (type=10) не менее чем на 10 минут (600000 мс.) после завершения события “Тревога” (updateActivatedTime=true)
public static final String CMD_CREATE_TOKEN = "/cmd/createtoken";
public static final String CMD_DELETE_DEVICE = "/cmd/deletedevice";
public static final String CMD_SET_DEVICE = "/cmd/setdevice";
public static final String CMD_WRITE_SETTINGS_TO_DEVICE = "/cmd/writesettingstodevice";
public static final String CMD_APPLY_LAN_SETTINGS = "/cmd/topol3/applylansettings";
public static final String CMD_SET_INPUT = "/cmd/setinput";
public static final String CMD_SET_OUTPUT = "/cmd/setoutput";
public static final String CMD_SET_SHAPE = "/cmd/setshape";
public static final String CMD_EXECUTE_SCRIPT = "/cmd/executescript";
public static final String CMD_DELETE_ZONE = "/cmd/deletezone";
public static final String CMD_SET_ZONE = "/cmd/setzone";
public static final String CMD_SET_PLAN_ELEMENT = "/cmd/setplanelement";
public static final String CMD_DELETE_PLAN_ELEMENT = "/cmd/deleteplanelement";
public static final String CMD_DELETE_PLAN = "/cmd/deleteplan";
public static final String CMD_SET_PLAN = "/cmd/setplan";
public static final String CMD_SET_OUTPUT_VALUE = "/cmd/setoutputvalue";
public static final String CMD_SET_ZONE_CONTROLLER = "/cmd/setzonecontroller";
public static final String CMD_DELETE_ZONE_CONTROLLER = "/cmd/deletezonecontroller";
public static final String CMD_SET_ACTION = "/cmd/setaction";
public static final String CMD_ENABLE_ACTION = "/cmd/enableaction";
public static final String CMD_DISABLE_ACTION = "/cmd/disableaction";
public static final String CMD_DELETE_ACTION = "/cmd/deleteaction";
public static final String CMD_SET_ALARM = "/cmd/setalarm";
public static final String CMD_SET_ARM = "/cmd/setarm";
public static final String CMD_RESTART = "/cmd/restart";
public static final String CMD_RESTART_LAN = "/cmd/lanrestart";
public static final String CMD_SCAN_LAN = "/cmd/scanlan";
public static final String CMD_REBOOT = "/cmd/reboot";
public static final String CMD_SET_TIME = "/cmd/settime";
public static final String CMD_UPDATE_WEB = "/cmd/webupdate";
public static final String CMD_SCAN_LINE = "/cmd/scanline";
public static final String CMD_CREATE_DEVICE = "/cmd/createdevice";
public static final String CMD_CREATE_ZONE = "/cmd/createzone";
public static final String CMD_CREATE_ACTION = "/cmd/createaction";
public static final String CMD_CREATE_BKP = "/cmd/createbkp";
public static final String CMD_RESTORE_FROM_BKP = "/cmd/restorefrombkp";
public final static String JSON_GET_EVENTS = "/json/getevents";
public final static String JSON_GET_LOG_FOR_DAY = "/json/getlogforday";
public final static String JSON_GET_LOGS_LIST = "/json/getlogslist";
public final static String JSON_GET_SETTINGS = "/json/getsettings";
public static final String JSON_GET_DEVICES = "/json/getdevicelist";
public static final String JSON_GET_DEVICE_STATES = "/json/getdevicestates";
public static final String JSON_GET_ZONES = "/json/getzoneslist";
public static final String JSON_GET_CLOUDIPS = "/json/getcloudips";
public static final String JSON_SET_ZONES = "/json/setzoneslist";
public static final String JSON_SET_CLOUDIPS = "/json/setcloudips";
public static final String JSON_GET_PLANS = "/json/getplanslist";
public static final String JSON_GET_ZONE_CONTROLLERS = "/json/getzonecontrollerslist";
public static final String JSON_GET_ACTIONS = "/json/getactionslist";
public static final String JSON_GET_SHAPES = "/json/getshapeslist";
public static final String JSON_GET_OUTPUTS = "/json/getoutputslist";
public static final String JSON_GET_INPUTS_VALUES = "/json/getinputsvalues";
public static final String JSON_GET_DIR = "/json/getdir";
public final static String JSON_GET_READY = "/json/getready";
public final static String SYS_SET_SETTINGS = "/sys/setsetting";
НПФ Полисервис, ООО ССОИ, Станислав Орлов, 2022г.
| Приборы | Фото |
|---|---|
| Руководство администратора ССОИ Тополь | ![]() |
| Краткое руководство оператора ССОИ Тополь | ![]() |
| Открытое API | ![]() |