Содержание
Описание протокола REST API
Общие настройки
Протокол предназначен для обмена данными с устройствами и сторонними системами сбора данных, подключаемых по шине REST API. Обмен данными осуществляется в формате JSON.
Подключение к серверу системы мониторинга по протоколу REST API
Для подключения к серверу системы мониторинга по протоколу REST API используется http-протокол соединения. В http-адресе нужно указать домен или IP-адрес сервера. Например:
http://[Домен или IP адрес]/api/[Параметр запроса]
На сервере поддерживается два типа запроса:
- GET-запрос для получения данных из системы мониторинга;
- POST-запрос для записи данных в систему мониторинга.
Регистрация устройств и сторонних систем сбора данных по протоколу REST API
Для авторизации необходимо указать API-токен. Токен указан в настройках Пользователя. Для того, чтобы токен работал, в настройках Пользователя должен быть включен чек-бокс «Доступ к API».
Для запроса данных необходимо использовать GET-запрос с параметром «Authorization» в заголовке запроса. В адресной строке в качестве GET-параметра указать API-токен. Например:
http://[SERVER]/api/[Параметр_запроса]?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn)
Для отправки данных на сервер создать POST-запрос одним из трех способов:
1. В адресной строке в качестве GET-параметра указать API-токен. Например:
http://[SERVER]/api/[Параметр_запроса]?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn)
2. В теле запроса указать параметр API-токен
3. В заголовке запроса («Bearer») указать параметр «Authorization», значение «Bearer» hBI4O8rClizALOPcrJ4DbljhHS8cVthn
.
Синхронизация времени сервера и источника данных
Для синхронизации времени формируется запрос метки времени, который возвращает текущее время сервера в формате JSON. Параметр GET запроса – «timestamp
». Время указано в формате GMT.
Пример запроса:
http://[SERVER]/api/timestamp?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn
Пример ответа:
{ "code":200, "status":"success", "data":{ "timestamp":1660039669 } }
Запросы
Запрос списка шин
Запрос списка шин формируется для отображения параметров активных шин в системе. Параметр GET запроса – «/buses
».
Таблица 1.
Параметр в JSON | Поле в системе мониторинга |
---|---|
id | Уникальный номер шины в системе мониторинга |
code | Код шины |
comment | Комментарий |
tcp_remote_address | IP-адрес (Конвертор, OPC Gateway Service, XNB mqtt URL) |
tcp_port | Порт сервера |
bus_type | Тип шины |
enabled/disabled | Шина включена/выключена |
Пример запроса:
http://[SERVER]/api/buses?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn
Пример ответа:
{ "code": 200, "status": "success", "data": [{ "id": 1, "code": "rest1", "comment": null, "tcp_remote_address": null, "tcp_port": null, "bus_type": "restapijson", "enabled": true }] }
Запрос информации по выбранной шине
Для получения параметров шины и списка устройств необходимо сформировать GET-запрос «/buses/{buse_code}
».
Для выбора шины необходимо указать «code
» (код шины) вместо переменной «{buse_code}
». Входные данные на запрос содержат информацию по запрошенной шине (см. Таблица 1) и информацию по всем устройствам, подключенным к шине (см. Таблица 2).
Таблица 2.
Параметр в JSON (массив значений: device) | Поле в системе мониторинга |
---|---|
id | Уникальный номер устройства в системе мониторинга |
code | Код устройства |
device_type | Тип устройства |
comment | Комментарий |
active_metering_period | Периодичность опроса устройства, секунд |
auto_metering_period | Периодичность сеансов измерений, секунд |
correction_angle | Коррекция азимута, градус |
correction_reverse | Система координат |
Пример запроса:
http://[SERVER]/api/buses/rest1?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn
Пример ответа:
{ "code": 200, "status": "success", "message": "Information on devices and buses" "data": { "id": 1, "code": "rest1", "comment”: "", "tcp_remote_address": "192.168.0.1", "tcp_port": 0, "bus_type": "restapijson", "device1": { "id": 1, "code": "test1" "device_type": "Спектроанализатор", "comment": "", "active_metering_period": 600, "auto_metering_period": 60, "correction_angle": 0, "correction_reverse": 0 } } }
Запрос информации по выбранному устройству
Для получения параметров устройства и списка каналов необходимо сформировать GET-запрос «/sensors/{device_code}
».
Для выбора устройства необходимо указать «code
» (код устройства) вместо переменной «{device_code}
». Входные данные на запрос содержат информацию по шине (см. Таблица 1), запрошенному устройству (см. Таблица 2) и информацию по всем каналам выбранного устройства (см. Таблица 3).
Таблица 3.
Параметр в JSON (массив значений: channels) | Поле в системе мониторинга |
---|---|
id | Уникальный номер канала в системе мониторинга |
sensor_id | Уникальный номер устройства в системе мониторинга |
addr | Адрес |
code | Код канала |
height | Высотная отметка, м |
correction_ratio | Коэффициент преобразования |
correction | Смещение 0 |
Пример запроса (запрос возвращает данные за последние 24 часа):
http://[SERVER]/api/sensors/test1?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn
Пример ответа:
{ "code": 200, "status": "success", "data": { "id": 1, "bus_id": 1, "code": "test1", "device_type": "spectroanalyzer", "comment": null, "active_metering_period": "600.00", "auto_metering_period": "0.0000", "correction_angle": "0", "correction_reverse": false, "enabled": true, "channels": [{ "id": 1, "sensor_id": 1, "addr": "t1", "code": "t1", "height": "0", "correction_ratio": null, "correction": "0" }, { "id": 2, "sensor_id": 1, "addr": "t2a", "code": "t2c", "height": "0", "correction_ratio": null, "correction": "0" }], "bus": { "id": 1, "code": "rest1", "tcp_remote_address": "62.213.109.66", "tcp_port": 0, "bus_type": "restapijson", "enabled": true, "comment": null } } }
Запрос данных измерения по выбранному Каналу
Для получения информации об измерениях за выбранный период времени необходимо сформировать GET-запрос «/channels_data/{channel_id}
».
Для выбора канала необходимо указать «id
» (уникальный номер канала в Системе Мониторинга) вместо переменной «{channel_id}
». Входные данные на запрос содержат информацию данных в выбранном канале (см. Таблица 4).
Таблица 4.
Параметр в JSON | Поле в системе мониторинга |
---|---|
dateFrom | Дата начала запрошенного периода |
dateTo | Дата окончания запрошенного периода |
values→time | Время измерения |
values→val | Значения измерения |
Пример запроса:
http://[SERVER]/api/channels_data/2?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn
Пример ответа:
{ "code": 200, "status": "success", "data": { "dateFrom": "2022-08-09 20:14:35", "dateTo": "2022-08-10 20:14:35", "values": [{ "time": 1660058075, "val": null , { "time": 1660058675, "val": null }, { "time": 1660115343, "val": null "time": 1660116283, "val": 160 }, { "time": 1660144475, "val": null }] } }
Запрос статусов по объекту мониторинга
Для получения статусов по каналам (сигнализации) на объекте мониторинга необходимо сформировать GET-запрос «/objects_status/{object_id}
».
Для выбора объекта мониторинга укажите «id
» (уникальный номер объекта мониторинга в Системе) вместо переменной «{object_id}
». Входные данные на запрос содержат информацию по объекту мониторинга (см. Таблица 5).
Таблица 5.
Параметр в JSON | Поле в системе мониторинга |
---|---|
id | Уникальный номер объекта мониторинга |
title | Название объекта |
interval | Интервал, секунды (для внешних систем) |
date | Дата и время запроса данных |
enabled_buses→bus_id | Уникальный номер шины |
enabled_buses→name | Название шины |
enabled_buses→code | Код шины |
enabled_sensors→sensor_id | Уникальный номер устройства |
enabled_sensors→name | Название устройства |
enabled_sensors→code | Код устройства |
channels→channel_id | Уникальный номер канала |
channels→name | Название канала |
channels→code | Код канала |
channels→state | Статус |
Пример запроса:
http://[SERVER]/api/objects_status/{object_id}?api_token=hBI4O8rClizALOPcrJ4DbljhHS8cVthn
Пример ответа:
{ "code": 200, "status": "success", "data": { "id": 1, "title": "Название объекта", "interval": 15, "date": "2022-10-03 22:24:34", "enabled_buses": [{ "bus_id": 1, "name": "REST API (JSON)", "code": "rest1", "enabled_sensors": [{ "sensor_id": 1, "name": "Название устройства", "code": "Код устройства", "channels": [{ "channel_id": 1, "name": "Название канала", "code": "Код канала", "state": "gray" }, { "channel_id": 2, "name": "Название канала", "code": "Код канала", "state": "gray" }] },{ "sensor_id": 2, "name": "RestAPI 2", "code": "test2", "channels": [{ "channel_id": 3, "name": "T1", "code": "t1", "state": "red" }, { "channel_id": 4, "name": "T2", "code": "t2c", "state": "green" }] }, ....
Запрос элементов конструкции по объекту мониторинга
Для получения информации о параметрах конструктивных элементов и сигнализации по каналам на объекте мониторинга необходимо сформировать GET-запрос «object_elements/{object_id}
». Для выбора объекта мониторинга укажите «id
» (уникальный номер объекта мониторинга в Системе) вместо «{object_id}
». Назначение параметров в JSON-формате – см. Таблица 6.
Таблица 6.
Параметр в JSON | Поле в системе мониторинга |
---|---|
location_id | Уникальный номер ОМ |
location_title | Название объекта мониторинга |
location_code | Код объекта мониторинга |
elements→id | ID элемента |
elements→bus_id | Уникальный номер шины |
elements→_lft | Параметр для построения дерева элемента конструкции |
elements→_rgt | Параметр для построения дерева элемента конструкции |
elements→parent_id | Параметр для построения дерева элемента конструкции |
elements→title | Название элемента |
elements→type | Тип элемента |
elements→code | Код элемента |
elements→description | Описание элемента |
elements→state | Категория технического состояния |
elements→sensors | Параметры устройства, привязанного к элементу |
elements→sensor_channels | Параметры Канала, привязанного к элементу |
Пример запроса:
http://[HOSTNAME]/api/object_elements/{object_id}?api_token=1I18lUJW0lIiBjE0zvSeum3TSs06vcKi
Пример ответа:
{ "code": 200, "status": "success", "data": { "location_id": 1, "location_title": "1", "location_code": null, "elements": [{ "id": 9, "_lft": 2, "_rgt": 5, "parent_id": 1, "title": "L1E1", "type": "", "code": "l1e1", "description": null, "state": "", "sensors": [{ "id": 8, "name": "A1.1 X", "code": "8", "enabled": true, "channels": [{ "channel_id": 26, "name": "1 d1", "code": "d1", "state": "gray" }, { "channel_id": 34, "name": "5 f5-2", "code": "f5-2", "state": "gray" }] }], "sensor_channels": [{ "channel_id": 26, "sensor_id": 8, "name": "1 d1", "code": "d1", "enabled": true, "state": "gray" }] }, { "id": 15, "_lft": 9, "_rgt": 10, "parent_id": 14, "title": "L1E2222", "type": “", "code": "l1e2222", "description": null, "state": "", "sensors": [{ "id": 9, "name": "A1.1 Z", "code": "9", "enabled": true, "channels": [{ "channel_id": 41, "name": "1 d1", "code": "d1", "state": "gray" }, { "channel_id": 42, "name": "1 f1", "code": "f1", "state": "gray" }, { "channel_id": 48, "name": "5 f5", "code": "f5", "state": "gray" }, { "channel_id": 49, "name": "5 f5-2", "code": "f5-2", "state": "gray" }] }], "sensor_channels": [] }] } }
Запись данных по протоколу
Запись данных в базу данных Систему Мониторинга осуществляется при условии, что для устройства выбран тип шины «REST API (JSON)».
Для записи данных необходимо сформировать POST-запрос «/sensors_data/ {device_code}
».
Для выбора устройства укажите «code
» (код устройства) вместо переменной «{device_code}
». Данные запроса для записи в базу данных содержат информацию по каналу выбранного устройства (см. Таблица 7).
Таблица 7.
Параметр в JSON | Поле в системе мониторинга |
---|---|
api_token | Токен для доступа к API |
timestamp | Время измерения |
data→addr | Адрес канала |
data→value | Значения измерения |
Пример адреса для POST запроса:
http://[SERVER]/api/sensors_data/test1
Пример JSON-формата, где параметр data
– строковое значение:
{ "api_token": "hBI4O8rClizALOPcrJ4DbljhHS8cVth", "timestamp": 1659696538, "data": “[{\"addr\": \"t1\", \"value\": 12}, {\"addr\": \"t2a\",\"value\": 22}]”
Сообщения об ошибках в протоколе
А. Ответ при отсутствии ID объекта мониторинга при запросе списка элементов:
{ "code": 404, "status": "error", "message": "Object with this id was not found.", "data": { "object_id": 15 } }
Б. Ответ при отключении пользователя (чек-бокс «Доступ к API» выключен у Пользователя):
{ "code": 404, "status": "error", "message": "Device with this code was not found.", "data": { "device_code": "test3" } }
В. Ответ при неверном API-Токене:
{ "code": 401, "status": "error", "message": "Unauthenticated." }
Г. Не найдена шина в системе мониторинга:
{ "code": 404, "status": "error", "message": "Bus with this code was not found.", "data": { "bus_code": "rest2" } }
Д. При записи данных протокол обмена указан неверно (не «REST API (JSON)»):
{ "code": 403, "status": "error", "message": "Bus type must be REST API (JSON).", "data": { "bus_code": "rest1" } }
Е. Шина выключена или не создана:
{ "code": 403, "status": "error", "message": "The bus is off.", "data": { "bus_code": "rest1" } }
Ж. Код устройства не найден:
{ "code": 404, "status": "error", "message": "Device with this code was not found.", "data": { "device_code": "test3" } }
З. Устройство выключено или отсутствует в системе мониторинга:
{ "code": 403, "status": "error", "message": "The device is off.", "data": { "bus_code": "rest1", "sensor_code": "test1" } }
И. Ответ при отсутствии записи отдельных каналов в базе данных (при этом запись в базе данных других каналов не останавливается):
{ "code": 201, "status": "success", "data": { "sensor_code": "test2", "answer": "Skipped addresses: ['t1v']" } }