REST API backend-сервера ЭНТЕК

Документ содержит описание запросов и порядок взаимодействия для компонента SCADA-системы REST API сервера.

В документе присутствует разделение запросов между проектам версий 1 и 2. В новом дистрибутиве можно создавать проекты версии-2, для которых были добавлены новые запросы, и они не поддерживаются в проектах версии-1, такие запросы имеют соответсвующую пометку. Дистрибутив текущей версии ПО доступен на сайте smart-grid.ru. В нем могут работать проекты версии 1 и версии 2. Старые версии дистрибутива (архивные) не поддерживают проект версии-2, только проект версии-1. Для перехода с проекта версии-1 на проект версии-2 необходимо его сконвертировать - перевести на возможность работы с новым программным обеспечением. Отличие между проектами версии 1 и 2 заключается в самой структуре проекта.

Содержание

Протокол

Сервер REST API работает по открытому и защищенному протоколу SSL/TLS. Настройка портов производится в конфигурационном файле, также необходимо указать путь до сертификата при использовании HTTPs и часовой пояс в переменной UTC. В переменной Threads задается количество потоков REST сервера, по умолчанию значение равно 10.

[Server] Port=8849 UTC=3 Threads=10 [DispatcherFields] FieldsUSPD=F435, F407 FieldsTU=F431, F429 FieldsPotr= [HTTPs] Port=8848 Path=C:\ENTEK\cert\server.pem ;Password=

Для расширения лога необходимо произвести запуск с ключом -dl.


Доступ к API

Запрашиваемый ресурс API задается одним или несколькими уровнями URL, следующими после неизменяемой части начала запроса /entek/api/…. Ресурс допускает использование пробелов и символов кириллицы. Некоторые ресурсы API допускают или требуют применение параметров запроса (следующих после символа '?' значений или пар имя=значение, разделенных символом '&').

Общий вид запроса: https://<IP-адресилидомен>:<порт>/entek/api/<запрашиваемыйресурс>[?<параметрзапроса1>&<параметрзапроса_2>&...]

Режим аутентификации запросов Basic (см. раздел 4. Авторизация и поддержание сессии).

Также доступна HTML страница для диагностики работы сервера (https://<IP-адресилидомен>:<порт>/entek/api/start).


Формат ресурса

Запрошенный ресурс API возвращает данные в формате JSON. О наличии в ответе данных запрошенного ресурса свидетельствует статус HTTP ответа 200 (ОК). Отсутствие данных при корректном запросе и штатном функционировании сервера обозначается статусом 404 (Not Found). При ошибке авторизации возвращается ошибка 401 (Unauthorized).


Авторизация и поддержание сессии

запрос: entek/api/login

Запрос содержит параметры Basic-аутентификации - имя и пароль пользователя проекта (например, 'admin' и '123'). В случае успеха ответ содержит токен ("token") - идентификатор для пользователя сессии. Также в ответе присутствует стартовая мнемохсема startMnemoGuid и навигационная мнемосхема naviMnemoGuid, если она присутствует в визуализации. После трех неудачных попыток авторизации с частотой менее 15 секунд, ip-адрес клиента блокируется на 5 минут и ответ содержит 403 код.

Пример ответа:

{ "token": "e5111278-e1ce-4a68-80e5-7154b86e79b1", "name": "admin", "group": "", "fullname": "Admin Adminov", "result": "true", "startMnemoGuid": "21D1D68D-86F4-4F69-B254-543D215FF6C4", "naviMnemoGuid": "C7C1699C-2F7B-41DE-A875-B5B382E3007B" }

Последующие запросы ресурсов API должны содержать заголовок Pragma с параметром

dssession=token

Например,

Pragma=dssession=e5111278-e1ce-4a68-80e5-7154b86e79b1

В каждом ответе на запрос заголовок Pragma передает параметр dssessionexpires со значением времени (в миллисекундах), оставшегося до окончания сессии. В случае, если следующий запрос в рамках данный сессии подается по истечении этого времени, ответ имеет статус HTTP 401 (Unauthorized), что означает необходимость повторной авторизации пользователя. Время жизни неактивной сессии 5 минут, после чего она закрывается. Информация о текущих сессиях доступна на веб-страницы диагностики, а также отображается в логе сервера.

Для поддержания сессии может использоваться следующий запрос: entek/api/ping

Ответ содержит текущее время сервера:

{ "ping": "2020-09-24T14:27:21.465+03:00" }

Для закрытия сессии служит запрос: entek/api/logout

Ответ содержит сообщение об успешном закрытии сессии:

{ "session": "terminated e5111278-e1ce-4a68-80e5-7154b86e79b1" }

или о неудаче:

{ "session": "not terminated" }

Доступность API

запрос: entek/api/info

Проверка доступности API содержит в ответе информация о сервере в формате JSON. Запрос не требует аутентификации.

Пример ответа:

{ "info": { "project": "WEB SCADA", "authentication": "Basic", "system": "SCADA ENTEK (tm)", "company": "Энергоресурс, Энтелс 2020-2021гг.", "version": "1/win32", "date": "2024-01-19T08:51:24.364" } }

Состояние сервера

запрос: entek/api/system_load

Запрос для получения состояния оборудования, на котором запущен Rest-сервер.

Пример ответа:

{ "start_time": "14:46:40 2025-03-24", "cpu_load": 2.09, "mem_load": 41.51, "net_rx": 24, "net_tx": 0 }

Справочники

Ответы выдаются в формате JSON. Пустые поля в значении параметра (value) содержат null. Выдаваемые поля настраиваются в конфигурационном файле и указываются в виде кода соответствующего системному названию поля. Если поле является ссылкой на другой журнал, то для получения значения перед кодом необходимо поставить символ S, в остальных случаях ставится F.

Пример настройки полей в конфигурационном файле:

[DispatcherFields] FieldsUSPD=F435, S407 FieldsTU=F431, F429 FieldsPotr=...

Запрос списка объектов и точек учета с настройками аскуэ

запрос: entek/api/docs/objects/ascue_set

Запрос списка объектов и их точек учета. Ответ содержит в себе информацию о названии объекта, серийный номер точки учета, идентификаторы в базе данных объекта и каждой точки учета, настройки аскуэ.

Есть возможность запроса с применением фильтров, которые описываются в теле запроса в формате JSON. Значение переменной field является кодом столбца, который можно посмотреть в настройках таблицы в модуле Справочники (Если поле не является ссылкой, то перед кодом добавляется заглавная F, иначе - S). Все фильтры объединяются через логическое И. Если field или value отсутствуют или переданы с пустым значением, то фильтр не применяется. Если объекты не найдены, ответ будет содержать пустой массив objects.

При необходимости можно добавить дополнительную информацию об объекте из других колонок или из других журналов. Для этого в запрос добавляется переменная add_info, в которой содержится массив, описывающий путь до дополнительной информации. В структуре можно указать информацию о полях журнала объекты или передать информацию о связи с другим журналом. При добавлении информации из журнала объекты в структуре достаточно указать переменную fields, которая является массивом состоящем из кода параметра в базе данных и названием поля для ответа в JSON. Для добавления информации из другого связанного журнала в структуре надо указать код журнала в переменной doc, в переменной link указать связанные поля в виде <поле из журнала справочники>-<связанное поле из дополнительного журнала>, а также в переменной fields указать необходимы столбцы из дополнительного журнала.

Пример части запроса с указанием дополнительной информации:

"add_info": [ { "doc": "51", "fields": [ "F464-res", "F465-hierarchy", "F466-mrid" ], "link": "F467-ID" } ]

Пример фильтра, передаваемого в теле запроса:

{ "filters": [ { "field": "F406", "value": "ТП" }, { "field": "F412", "value": "Ивановский" } ] }

Пример ответа:

{ "objects": [ { "id": 27722, "name": "Меркурий 204", "ascue": { "uspd_type": "7", "psw": "", "ip1": "10.30.30.34", "port1": "4002", "ip2": "", "port2": "30292", "link_type": "2", "timeout": "3000" }, "tus": [ { "id": 27723, "serial": "", "tu_id": "", "ascue": { "tu_type": "94", "use_sn": "True", "res_type": "1", "addr": "80", "psw1": "111111", "psw2": "2222222222222222" } } ] } ] }

Сохранение показаний точек учета

запрос: entek/api/ascue/save

Запрос для сохранения данных по точкам учета. Показания передаются в теле запроса, поддержан вариант передачи одной записи или массива с несколькими. Тело запроса состоит из следующих переменных:

*Показания, которые сохраняются таким способом не отображаются в модуле Энергоанализ. Для просмотра и мониторинга есть html формы, стартовая страница находится по запросу entek/api/ascue_html*

Чтобы задать глубину хранения данных в конфигурационном файле Rest-сервера необходимо указать количество дней в переменной savePeriod в секции ASCUE (по умолчанию глубина хранения 7 дней).

Пример настройки глубины хранения

[ASCUE] savePeriod=5

Пример запроса с массивом:

[ { "id": 72924, "serial": "23232003105", "polling_time": 15.0, "timestamp": "2024-08-26T10:55:17", "data": [ { "id": 10, "v": 122.0 } ] }, { "id": 72924, "serial": "2323200ac3105", "polling_time": 15.0, "timestamp": "2024-08-27T11:00:17", "data": [ { "id": 10, "v": 122.0 }, { "id": 75, "v": 1.0 } ] } ]

Поиск счетчиков по серийному номеру

запрос: entek/api/docs/meters/serialno/<номер>

номер - серийный номер счетчика. Поля, являющиеся ссылкой на запись другого журнала, содержат в себе идентификатор этой записи в БД.

Пример ответа:

{ "TU": { "id": "27393", "fields": [ { "fieldName": "F303", "value": "25626254", "userName": "№ сч." }, { "fieldName": "F438", "value": "null", "userName": "Ктт" }, { "fieldName": "F439", "value": "null", "userName": "Ктн" }, { "fieldName": "F345", "value": "M233-25626254", "userName": "Назначение/место установки" }, { "fieldName": "F408", "value": "27391", "userName": "Объект" }, { "fieldName": "F429", "value": "2022-12-20T00:00:00", "userName": "Дата наладки" }, { "fieldName": "F431", "value": "Нет", "userName": "Замечания" }, { "fieldName": "F452", "value": "27397", "userName": "Потребитель" } ] } }

Поиск счетчиков по идентификатору точки учета

запрос: entek/api/docs/meters/id/<идентификатор>

<идентификатор> - идентификатор счетчика в БД.

Пример ответа: идентичен пункту "Поиск счетчиков по серийному номеру"


Объект, которому принадлежит счетчик

запрос: entek/api/docs/meters/<идентификатор>/object

идентификатор - идентификатор счетчика в БД.

Пример ответа:

{ "Object": [ { "fieldName": "F406", "value": "Контроллер Офис", "userName": "Объект" }, { "fieldName": "F407", "value": "Группа 1", "userName": "Группа" }, { "fieldName": "F435", "value": "Киевское шоссе", "userName": "Адрес" } ] }

Потребитель, которому принадлежит счетчик

запрос: entek/api/docs/meters/<идентификатор>/consumer

идентификатор - идентификатор счетчика в БД.

Пример ответа:

{ "Consumer": [ { "fieldName": "F446", "value": "ООО \"Энтелс\"", "userName": "Потребитель" }, { "fieldName": "F447", "value": "111111111", "userName": "Договор" }, { "fieldName": "F448", "value": "222222222", "userName": "ИНН" } ] }

Счетчики, принадлежащие объекту

запрос: entek/api/docs/objects/<идентификатор>/meters

идентификатор - идентификатор объекта в БД.

Пример ответа:

{ "TUs": [ { "id": "27392", "fields": [ { "fieldName": "F303", "value": "40737447", "userName": "№ сч." }, { "fieldName": "F438", "value": "10", "userName": "Ктт" }, { "fieldName": "F439", "value": "10", "userName": "Ктн" }, { "fieldName": "F345", "value": "M233-40737447", "userName": "Назначение/место установки" }, { "fieldName": "F408", "value": "27391", "userName": "Объект" }, { "fieldName": "F429", "value": "2022-12-20T00:00:00", "userName": "Дата наладки" }, { "fieldName": "F431", "value": "null", "userName": "Замечания" }, { "fieldName": "F452", "value": "27396", "userName": "Потребитель" } ] } ] }

Счетчики, принадлежащие потребителю

запрос: entek/api/docs/consumers/<идентификатор>/meters

идентификатор - идентификатор потребителя в БД.

Пример ответа: идентичен пункту "Счетчики, принадлежащие объекту"


Запрос всех счетчиков

запрос: entek/api/docs/meters/all

Ответ содержит список всех счетчиков с их идентификатором и серийным номером.

Пример ответа:

{ "TUs": [ { "id": "27392", "fields": [ { "fieldName": "F303", "value": "40737447", "userName": "№ сч." } ] }, { "id": "27393", "fields": [ { "fieldName": "F303", "value": "25626254", "userName": "№ сч." } ] }, { "id": "27394", "fields": [ { "fieldName": "F303", "value": "44622236", "userName": "№ сч." } ] }, { "id": "27395", "fields": [ { "fieldName": "F303", "value": "12279137487044", "userName": "№ сч." } ] } ] }

Запрос формы редактирования журнала

запрос: /entek/api/docs/form_edit/<идентификатор журнала>

Запрос на получение настройки формы редактирования журнала. Тип ответа файл с названием formFile (без расширения), в теле содержание файла в base64.


Запрос обновления формы редактирования журнала

запрос: /entek/api/docs/update_form_edit/<идентификатор журнала>

Запрос на обновление настройки формы редактирования журнала. В теле запроса передается форма редактирования в base64.


Запрос записи журнала

запрос: /entek/api/docs/doc_record/<идентификатор журнала>

Get запрос записи журнала с применением фильтра для записей и идентификатором журнала. В качестве фильтра необходимо использовать поле с уникальными значениями. Фильтры задаются в параметрах запроса в переменных field и value. Фильтрация осуществляется по полному совпадению со значением фильтра. Ответ содержит переменные record с массивом полей, состоящих из идентификатора поля, его значения, уровня доступа(1 - только чтение, 2 - запись и чтение) и если поле привязано к справочникам, то в переменной preset передается массив допустимых значений, files с массивом файлов, если есть доступ на их чтение или запись и двумя дополнительными параметрами, infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и информация найдена, infoString не будет, иначе infoString содержит строку с ошибкой.

Также возможно запросить только определенные поля записи. Для этого в параметрах запроса указывается переменная needed_fields, в которой перечисляются через символ ';' идентификаторы необходимых полей. При таком запросе будут переданы запрашиваемые поля и идентификатор записи журнала. Чтобы ответ включал файлы, необходимо в параметре запроса также указать значение files.

Если запись имеет поле, которое ссылается на другие журналы, то в структуре этого поля, идентификатор которого начинается на F, передается переменная ref_to_doc с номером журнала (целое число), а поля с таким же идентификатором, но которое начинается с S передается массив links со значениями полей, на которые ссылается запись.

Пример фильтра

?field=id&value=457&needed_fields=f1;f4;files

Пример ответа

{ "record": [ { "id": "ID", "value": "29954", "access": 0, "width": 100 }, { "id": "F463", "value": "Подстанция 35 кВ ПС-1", "access": 2, "width": 100 }, { "id": "F464", "value": "ПС", "access": 2, "presets": [ "ТП", "РП", "КТП", "МТП", "ПС", "БТП", "БКТП", "КТБП", "КТПМ", "ГКТП", "КТПН", "КТПП", "МКТП", "МТП", "ПТП", "СКТП" ] }, { "id": "F476", "value": null, "access": 2, "width": 100 }, { "id": "F477", "value": "30089,30090,30091", "access": 2, "width": 100, "ref_to_doc": 50 }, { "id": "S477", "value": "test1 (...)", "access": 2, "width": 100, "links": ["test1", "test 2", "test3"] }, { "id": "F482", "value": "SevEnergo.PS1", "access": 2, "width": 100 }, { "id": "F485", "value": "299001, Севастополь г, Брестская ул, дом № 1", "access": 2, "width": 100 }, { "id": "F522", "value": "16000+16000+15000", "access": 2, "width": 100 }, { "id": "F523", "value": null, "access": 2, "width": 100 }, { "id": "F524", "value": "1936", "access": 2, "width": 100 } ], "files": [ { "name": "7za.exe", "id": 15, "add_user": "ADMIN", "file_size": 847872, "add_timestamp": "2025-05-20T14:04:47", "file_timestamp": "2025-05-20T14:04:47" } ], "infoCode": 0 }

Редактирование записи журнала

запрос: /entek/api/docs/edit_record/<идентификатор журнала>

Запрос редактирования записи журнала. Идентификатор журнала передается в самом запросе, а информация о записи передается в теле запроса в формате json. Json структура состоит из параметра id, в котором передается информация об идентификаторе записи, и параметра fields, в котором передается массив изменяемых полей. Структура поля состоит из переменной field с кодом поля, которое передается строкой, dataType типом данных (соответствует типу данных, который указан в форме редактирования) и самого значение (все значения передается в формате строки, а время передается в формате ISO8601).

Ответ имеет формат json и содержит в себе параметры infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и информация найдена, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой.

Пример запроса

{ "id": 115484, "fields": [ { "field": "F302", "dataType": 37, "value": "new value" } ] }

Создание записи журнала

запрос: /entek/api/docs/create_record

Запрос создания записи журнала. В теле запроса в формате json передаются поля новой записи и идентификатор целевого журнала. Json структура состоит из параметра id, в котором передается идентификатор журнала, и параметра fields, в котором передается массив полей. Структура поля состоит из переменной field с кодом поля, которое передается строкой, dataType типом данных (соответствует типу данных, который указан в форме редактирования) и самого значение (все значения передается в формате строки, а время передается в формате ISO8601).

Ответ имеет формат json и содержит в себе параметры infoCode и infoString с результатом запроса, а также id новой записи. Если infoCode = 0, то запрос прошел успешно и информация найдена, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой.

Пример запроса

{ "id": 51, "fields": [ { "field": "F302", "dataType": 37, "value": "new value" } ] }

Пример ответа

{ "id": 51, "infoCode": 0 }

Удаление записи журнала

запрос: /entek/api/docs/delete_record

Запрос удаления записи журнала. Для его выполнения необходимо передать в параметрах запроса идентификатор журнала doc и идентификатор записи rec.

Ответ имеет формат json и содержит в себе параметры infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и информация найдена, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой.


Загрузка файла

запрос: /entek/api/docs/upload_file/<идентификатор записи журнала>

PUT запрос с хедером Pragma и типом multipart/form-data, формат файла должен быть в бинарном виде. Ключ name в каждой части multipart/form-data в хедере Content-Disposition может быть произвольным, для сохранения названия файла используется ключ filename. Можно передавать несколько файлов.

Ответ имеет формат json и содержит в себе параметры infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и файл загружен, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой. Также в ответе передается массив files c идентификаторами созданных файлов и их именами.

Пример HTTP запроса:

GET /entek/api/docs/upload_file/58 HTTP/1.1 Host: localhost:8848 Pragma: dssession=512d332b-a1e8-4843-8c95-39513ac86755 Content-Length: 384 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="file1"; filename="file_1.cpp" Content-Type: <Content-Type header here> (data) ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="file2"; filename="file_2.hpp" Content-Type: <Content-Type header here> (data) ------WebKitFormBoundary7MA4YWxkTrZu0gW--

Пример ответа:

{ "files": [ { "name": "polling_meter_spodes.cpp", "id": 37, "add_user": "ADMIN", "file_size": 26121, "add_timestamp": "2025-06-11T11:27:39", "file_timestamp": "2025-06-11T11:27:39" }, { "name": "polling_meter_spodes.hpp", "id": 38, "add_user": "ADMIN", "file_size": 1627, "add_timestamp": "2025-06-11T11:27:39", "file_timestamp": "2025-06-11T11:27:39" } ], "infoCode": 0 }

Удаление файла

запрос: /entek/api/docs/delete_file/<идентификатор файла>

В запросе передается идентификатор файла. Ответ имеет формат json и содержит в себе параметры infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и файл удален, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой.


Чтение файла

Запрос соответствует описанию в разделе Скачать документ прикрепленный к записи журнала


Получение внешних ссылок на запись журнала

запрос: /entek/api/docs/record_external_links

Запрос для получения внешних ссылок на запись журнала. В запросе должны передавать параметры запроса field, в котором указывается поле внешних текущего журнала, и record - идентификатор записи журнала. Ответ содержит массив записей в переменной records, описание полей переменной description, идентификатор журнала полученных записей doc_id, а каждая строка из журнала содержит массив структур полей fields и идентификатор записи rec_id.

Пример запроса:

entek/api/docs/record_external_links?field=503&record=29954

Пример ответа:

{ "doc_id": 51, "records": [ { "fields": [ { "id": "ID", "value": "30092" }, { "id": "F493", "value": "29954" }, { "id": "S493", "value": "Подстанция 35 кВ ПС-1" }, { "id": "F486", "value": "2025-08-04T00:00:00" }, { "id": "F504", "value": "Гл.рубильник 0,4 кВТ-2" }, { "id": "F505", "value": "1.000000" }, { "id": "F508", "value": "2.000000" }, { "id": "F507", "value": "3.000000" } ], "rec_id": 30092 } ], "description": [ { "id": 493, "name": "Объект", "data_type": 102 }, { "id": 486, "name": "Дата замера", "data_type": 12 }, { "id": 505, "name": "U, кВ", "data_type": 10 }, { "id": 508, "name": "I руб, А", "data_type": 10 }, { "id": 507, "name": "P руб, кВт", "data_type": 10 }, { "id": 504, "name": "Присоединение", "data_type": 37 } ], "infoCode": 0 }

Поиск журнала по идентификатору записи

запрос: /entek/api/docs/find_journal_record/<идентификатор записи>

В запросе передается идентификатор записи журнала. Ответ имеет формат json и содержит в себе параметры journal_id c идентификатором журнала, journal_name с названием журнала, infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и журнал найден, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой.

Пример ответа:

{ "journal_id": 1, "journal_name": "Объекты", "infoCode": 0 }

Информация о журнале

запрос: /entek/api/docs/doc_info/<идентификатор журнала>

В запросе передается идентификатор журнала. Ответ имеет формат json и содержит в переменной fields массив с информацией о полях, прав доступа к ним, перечень возможных значений presets (если настроено) и о ссылках полей на другие журналы. Если поле является ссылкой на запись из другого журнала, то в структуре поля в link указывается журнал to_doc и поле to_field, на которое ссылается поле, если поле является ссылкой записи из другого журнала, то эти данные хранятся в структуре external_link. Также ответ содержит infoCode и infoString с результатом запроса. Если infoCode = 0, то запрос прошел успешно и информация найдена, параметра infoString в таком случае не будет не будет, иначе infoString содержит строку с ошибкой.

Пример ответа:

{ "fields": [ { "id": 503, "name": "Замер нагрузок", "type": 103, "access": 2, "external_link": { "to_field": 493, "to_doc": 51 }, "width": 100 }, { "id": 409, "name": "Точки учета", "type": 103, "access": 2, "external_link": { "to_field": 408, "to_doc": 40 }, "width": 100 }, { "id": 465, "name": "ПС", "type": 37, "access": 2, "width": 100 }, { "id": 466, "name": "Фидер", "type": 37, "access": 2, "width": 100 }, { "id": 515, "name": "Работы", "type": 103, "access": 2, "external_link": { "to_field": 509, "to_doc": 52 }, "width": 100 }, { "id": 463, "name": "Объект", "type": 37, "access": 2, "width": 100 }, { "id": 464, "name": "Тип объекта", "type": 37, "access": 2, "presets": [ "ТП", "РП", "КТП", "МТП", "ПС", "БТП", "БКТП", "КТБП", "КТПМ", "ГКТП", "КТПН", "КТПП", "МКТП", "МТП", "ПТП", "СКТП" ], "width": 100 }, { "id": 473, "name": "Наличие УСПД", "type": 37, "access": 2, "presets": ["Есть", "Отсутствет"], "width": 100 }, { "id": 477, "name": "Потребители", "type": 102, "access": 2, "link": { "to_field": 446, "to_doc": 50 }, "width": 100 }, { "id": 527, "name": "Примечания", "type": 38, "access": 2, "width": 100 } ], "infoCode": 0 }

Запрос записей журнала

запрос: /entek/api/docs/records

Запрос записей журнала локально доступен без авторизации. В теле запроса обязательно передается идентификатор журнала doc_id и при необходимости массив идентификаторов фильтров filters, массив идентификаторов полей fields, если поля не передать, то вернутся все поля записи. В ответ возвращается массив записей журнала в переменной records.

Пример запроса:

{ "doc_id": 49, "filters": [113], "fields": ["F406", "F407"] }

Пример ответа:

{ "records": [ { "id": 27391, "F406": "Объект 1", "F407": "Общая группа" } ], "infoCode": 0 }

Запрос списка журналов

запрос entek/api/docs/doc_list

Запрос списка журналов возрващает перечень всех журналов в справочниках. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "docs": [ { "id": 40, "name": "Точки учета", "time_create": "2005-04-11T10:30:14", "number": 2 }, { "id": 49, "name": "Объекты", "time_create": "2007-03-03T21:09:58", "number": 0 }, { "id": 50, "name": "Потребители", "time_create": "2010-08-26T08:28:13", "number": 1 }, { "id": 51, "name": "Замер нагрузок", "time_create": "2025-06-23T11:45:16", "number": 3 }, { "id": 52, "name": "Работы", "time_create": "2025-06-23T13:50:12", "number": 4 } ], "infoCode": 0 }

Запрос создания журнала

запрос entek/api/docs/create_journal

Запрос только для проектов версии 2

Запрос создания нового журнала, создается новый журнал в таблице журналов и новая таблица самого журнала, в ответе содержится идентификатор нового журнала. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "Объекты", "number": 1 }

Пример ответа:

{ "id": 49, "infoCode": 0 }

Запрос редактирования журнала

запрос entek/api/docs/edit_journal

Запрос только для проектов версии 2

Запрос для изменения информации о журнале, его порядкового номера и имени, можно передать как одну запись, так и массив записей. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса обновления одной записи:

{ "id": 49, "name": "Объекты", "number": 1 }

Пример запроса обновления массива:

[ { "id": 53, "name": "test update", "number": 5 }, { "id": 52, "name": "Работы", "number": 4 } ]

Пример ответа:

{ "infoCode": 0 }

Запрос удаления журнала

запрос entek/api/docs/delete_journal/<идентификатор журнала>

Запрос только для проектов версии 2

Запрос для удаления журнала, удаляется журнал из таблицы со списком журналов и отдельная таблица самого журнала. В строке запроса передается идентификатор журанала. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0 }

Запрос создания поля журнала

запрос entek/api/docs/doc_field/create

Запрос только для проектов версии 2

Запрос для создания поля журнала, в теле запроса передается идентификатор журнала, название поля, его тип, если поле является ссылкой на другой журнал, то также передается идентификатор поля, на которое идет ссылка. В ответе возвращается идентификатор поля. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "name": "test link", "data_type": 102, "doc_id": 55, "id_ref_doc_field": 514 }

Пример ответа:

{ "id": 532, "infoCode": 0 }

Запрос редактирования поля журнала

запрос entek/api/docs/doc_field/update

Запрос только для проектов версии 2

Запрос редактирования поля предназначен только для изменения названия поля. В запросе передается идентификатор поля и его новое название. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

{ "id": 532, "name": "test link updated" }

Пример ответа:

{ "infoCode": 0 }

Запрос удаления поля журнала

запрос entek/api/docs/doc_field/delete/<идентификатор поля>

Запрос только для проектов версии 2

Запрос для удаления поля журнала, в строке запроса передается идентификатор поля. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0 }

Получение пользовательских настроек с фильтром

запрос: /entek/api/docs/user_settings/get

Запрос только для проектов версии 2

Запрос для получения пользовательских настроек полей журнала с возможностью фильтрации по пользователю и роли. Запрос поддерживает следующие параметры:

Ответ содержит массив пользовательских настроек в переменной user_settings. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

/entek/api/docs/user_settings?doc=51&user=1

Пример ответа:

{ "user_settings": [ { "field_id": 493, "user_id": 1, "role_id": null, "data_type": 102, "data_xml": "<field><access>2</access><width>150</width></field>" }, { "field_id": 504, "user_id": 1, "role_id": null, "data_type": 37, "data_xml": "<field><access>2</access><width>150</width></field>" } ], "infoCode": 0 }

Создание или обновление пользовательской настройки

запрос: /entek/api/docs/user_setting/create$ или /entek/api/docs/user_setting/update$

Запрос только для проектов версии 2

Запрос для создания новой пользовательской настройки или обновления существующей. Eсли запись уже существует, она обновляется, иначе создается новая. В теле запроса передается структура со следующими параметрами:

обязательно надо передать либо role_id, либо user_id

При успешном запросе ответ содержит параметр infoCode равный 0, иначе infoCode равен 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "doc_id": 51, "field_id": 493, "user_id": 1, "data_type": 102, "data_xml": "<field><access>2</access><width>150</width></field>" }

Пример ответа:

{ "infoCode": 0 }

Удаление пользовательской настройки

запрос: /entek/api/docs/user_setting/delete

Запрос только для проектов версии 2

Запрос для удаления пользовательских настроек полей журнала. В теле запроса передается JSON структура со следующими параметрами:

обязательно надо передать либо role_id, либо user_id

При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "doc_id": 51, "field_id": 493, "user_id": 1 }

Пример ответа:

{ "infoCode": 0 }

Обновление ширины столбца

запрос: /entek/api/docs/user_setting/update_width

Запрос только для проектов версии 2

Запрос для обновления ширины столбца в пользовательских настройках поля журнала. Метод автоматически обновляет или создает XML структуру с информацией о ширине столбца. В теле запроса передается структура со следующими параметрами:

Если запись уже существует, то обновляется ширина в существующих XML. Если записи не существует, создается новая запись с указанной шириной. При успешном запросе ответ содержит параметр infoCode равный 0, иначе infoCode равен 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "doc_id": 51, "field_id": 493, "user_id": 1, "width": 200 }

Пример ответа:

{ "infoCode": 0 }

Получение фильтров журнала

запрос: /entek/api/docs/doc_filter/get

Запрос только для проектов версии 2

Запрос на получение списка фильтров для указанного журнала. Фильтр передается в параметре запроса doc с идентификатором журнала. Ответ содержит массив фильтров с информацией о каждом фильтре.

Параметры запроса:

При успешном запросе ответ содержит параметр infoCode равный 0, иначе infoCode равен 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

GET /entek/api/docs/doc_filter/get?doc=51

Пример ответа:

{ "filters": [ { "id": 1, "id_doc_field": 493, "number": 1, "filter_type": 0, "filter_active": 1, "name": "Фильтр", "filter_xml": "<FILTER_XML Beg=\"ИКЗ\"/>" }, { "id": 2, "id_doc_field": 494, "number": 2, "filter_type": 1, "filter_active": 0, "name": "Фильтр 2", "filter_xml": "<FILTER_XML Beg=\"ИКЗ\"/>" } ], "infoCode": 0 }

Создание фильтра журнала

запрос: /entek/api/docs/doc_filter/create

Запрос только для проектов версии 2

Запрос на создание нового фильтра для журнала. В теле запроса передается структура со следующими параметрами:

При успешном запросе ответ содержит параметр id с идентификатором созданного фильтра и infoCode равный 0, иначе infoCode равен 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "doc_id": 51, "id_doc_field": 493, "number": 1, "filter_type": 0, "filter_active": 1, "name": "Фильтр", "filter_xml": "<FILTER_XML Beg=\"ИКЗ\"/>" }

Пример ответа:

{ "id": 1, "infoCode": 0 }

Обновление фильтра журнала

запрос: /entek/api/docs/doc_filter/update

Запрос только для проектов версии 2

Запрос на обновление существующего фильтра. В теле запроса передается структура со следующими параметрами:

При успешном запросе ответ содержит параметр infoCode равный 0, иначе infoCode равен 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1, "number": 2, "filter_type": 0, "filter_active": 0, "name": "Фильтр", "filter_xml": "<FILTER_XML Beg=\"ИКЗ\"/>" }

Пример ответа:

{ "infoCode": 0 }

Удаление фильтра журнала

запрос: /entek/api/docs/doc_filter/delete

Запрос только для проектов версии 2

Запрос на удаление фильтра. В теле запроса передается структура со следующим параметром:

При успешном запросе ответ содержит параметр infoCode равный 0, иначе infoCode равен 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Пример ответа:

{ "infoCode": 0 }

Мнемосхемы

Список объектов из lTools

запрос: entek/api/mnemos/ltools_dialogs

Запрос возвращает ответ в формате json, в котором содержатся названия классов и guid шаблонной мнемосхемы из файла KVision/Extensions/lTools.xml.

Пример ответа:

[ { "class_name": "TRosseti_breaker", "mnemo_templ_id": "{F6D19E3A-6CCB-43D2-ACF9-25AE3E4F5171}" }, { "class_name": "TGroundDisconnector", "mnemo_templ_id": "{EB8838CE-91C8-4CC2-94A0-C08C8C74FA70}" } ]

Списки и параметры мнемосхем

запрос: entek/api/mnemos/<мнемосхема>

мнемосхема - может принимать следующие значения:

  1. 0 или entry - ответ содержит стартовую мнемосхему.
  2. GUID или Id - идентификатор мнемосхемы.
  3. Пустое значение – перечень всех мнемосхем.

Пример ответа:

{ "schemes": [ { "id": 25, "name": "START", "guid": "{21D1D68D-86F4-4F69-B254-543D215FF6C4}" } ] }

Структура и компоненты мнемосхемы

запрос: entek/api/mnemos/<мнемосхема>/scheme?<параметр>=<значение_1>,...

мнемосхема - может принимать следующие значения:

  1. 0 или entry - ответ содержит стартовую мнемосхему.
  2. GUID или Id - идентификатор мнемосхемы.

Пример ответа:

{ "mnemo": { "id": 25, "name": "START", "guid": "{21D1D68D-86F4-4F69-B254-543D215FF6C4}", "settings": { "ID": "{21D1D68D-86F4-4F69-B254-543D215FF6C4}", "Name": "START", "Comments": "", "BkColor": "#000000", "Width": 1300, "Height": 700 }, "Controls": [ { "ClassName": "TBBRotateLabel", "ID": "{6CB72DEA-AF09-4595-8FC3-C8DD621AA8D8}", "Idx": 0, "Left": 20, "Top": 104, "Width": 208, "Height": 22, "Obj": { "Text": "Элементы мнемосхем", "Font": { "Name": "Arial", "Size": 14, "Color": "#FFFFFF", "Bold": true } } } ] } }

Подсветка элементов подстанции

запрос: /entek/api/mnemos/highlight_elements

Запрос предназначен для подсветки элементов подстанции на мнемосхеме, который должен содержать тело для дальнейшей передачи в EVP. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

При выполнение запроса к топологии модуля Vision в запросе необходимо указать topology в query-параметрах запроса. В таком случае необходимо тело запроса в формате json с параметрами:

Для отключения подсветки достаточно передать mnemo_topic_id и действие на отключение.

Пример запроса:

{ "mnemo_topic_id": "74CF2F8B-365F-4A3B-A8C5-23F62B691823", "topology_id": "A28A91EE-ECDF-43FB-972E-F3E87E853C29", "action": 1, "type": 1 }

Пример ответа:

{ "infoCode": 1, "infoString": "Подсветка элементов подстанции не разрешена" }

Файл топологии мнемосхемы

запрос: entek/api/mnemos/topology/<идентификатор мнемосхемы>

Запрос предназначен для получения файла описывающего топологию мнемосхемы. Идентификатор мнемосхемы передается последним параметром в url запроса. При успешно найденном файле, его содержимое передается в теле запроса в формате text/xml; charset=Windows-1251. Если файл не найден, пустой или его не получилось открыть, то придет ответ с кодом 404.


Списки и параметры диалогов

запрос: entek/api/dialogs/<диалог>

диалог - может принимать следующие значения:

  1. GUID или Id - идентификатор диалога.
  2. Пустое значение – перечень всех диалогов.

Пример ответа:

{ "dialogs": [ { "id": 51, "name": "Основной сервер ССПИ", "guid": "{45218BF4-B89E-4DCE-A790-8DE6E08728AD}" } ] }

Структура и компоненты диалога

запрос: entek/api/ dialogs/<мнемосхема>/scheme?< диалог>=<значение_1>,...

диалог - GUID или Id идентификатор диалога.

Параметры запроса:

имя параметра описание
include включает в ответ только указанные разделы мнемосхемы
exclude исключает из ответа указанные разделы мнемосхемы

параметры include и exclude не могут присутствовать в запросе одновременно

Допустимые значения параметров запроса: name, guid, settings, controls (через ',' или ';').

Пример ответа:

{ "dialog": [ { "id": 51, "name": "Основной сервер ССПИ", "guid": "{45218BF4-B89E-4DCE-A790-8DE6E08728AD}", "settings": { "ID": "{45218BF4-B89E-4DCE-A790-8DE6E08728AD}", "Name": "Основной сервер ССПИ", "Comments": "", "BkColor": "#D5D6D1", "Width": 720, "Height": 670 }, "Controls": [ { "ClassName": "TRemShapes", "ID": "{05D9B156-73EC-464A-9545-F76106CCF0C2}", "Idx": -1, "Left": 353, "Top": 56, "Width": 300, "Height": 50, "Obj": { "Shape": "jstRectangle", "Border": { "Style": "psSolid", "Color": "#000000", "Width": 1 }, "Brush": { "Style": "bsSolid", "Color": "#FFFFFF" }, "UseGradient": false } } ] } ] }

Данные АСКУЭ

Показания счетчика

запрос: entek/api/meters/<идентификатор>/readings?<параметр>=<значение_1>,...

идентификатор - идентификатор потребителя в БД.

имя параметра описание допустимые значения
date дата-время показаний запрос возвращает ближайшие показания к началу заданного интервала от указанного даты-времени до текущего времени.
since дата-время начала поиска показаний запрос возвращает ближайшие показания к концу заданного интервала от указанного даты-времени до текущего времени.
include включает в ответ только указанные значения 'active', 'reactive' - активная и/или реактивная энергия для электроэнергии и их аналоги для неэлектрических ресурсов, 'direct', 'reverse' - прямое и обратное направление учета (через ',' или ';'). По умолчанию используется параметр &include=active;direct;reverse
exclude исключает из ответа указанные поля аналогично параметру include
tarifs номера тарифов счетчика номера тарифов: целые числа 0..8 (0 - круглосуточный) через ','. По умолчанию используется параметр &tarifs=0

Пример ответа:

{ "readings": { "active": { "direct": { "tarif0": { "value": "14805.400085", "units": "кВтч", "timestamp": "2022-12-20T00:00:17.0Z" } }, "reverse": { "tarif0": { "value": "61.799997", "units": "кВтч", "timestamp": "2022-12-20T00:00:17.0Z" } } }, "reactive": { "direct": { "tarif0": { "value": "369.000006", "units": "кВАрч", "timestamp": "2022-12-20T00:00:17.0Z" } }, "reverse": { "tarif0": { "value": "43323.599243", "units": "кВАрч", "timestamp": "2022-12-20T00:00:17.0Z" } } } } }

График профиля мощности 1 час

запрос: entek/api/meters/<идентификатор>/graph/hourly?<параметр>=<значение_1>,...

идентификатор - идентификатор потребителя в БД.

имя параметра описание допустимые значения
since дата-время начала графика формат даты ISO8601 (пример: 2014-12-01T00:00:00.000Z)
till дата-время конца графика аналогично параметру since
include включает в ответ только указанные значения 'active', 'reactive' - активная и/или реактивная энергия для электроэнергии и их аналоги для неэлектрических ресурсов, 'direct', 'reverse' - прямое и обратное направление учета (через ',' или ';'). По умолчанию используется параметр &include=active;direct;reverse
"active+":"3296.2148", "active-":"0.0000", "reactive+":"188.0654", "reactive-":"0.0000"

Пример ответа:

{ "graph": [ { "from": "2022-12-18T10:00:00.000Z", "to": "2022-12-18T11:00:00.000Z", "active+": "2.800000", "active-": "0.000000", "reactive+": "0.200000", "reactive-": "0.500000" }, { "from": "2022-12-18T11:00:00.000Z", "to": "2022-12-18T12:00:00.000Z", "active+": "2.800000", "active-": "0.000000", "reactive+": "0.200000", "reactive-": "0.500000" }, { "from": "2022-12-18T12:00:00.000Z", "to": "2022-12-18T13:00:00.000Z", "active+": "2.800000", "active-": "0.000000", "reactive+": "0.100000", "reactive-": "0.400000" }, { "from": "2022-12-18T13:00:00.000Z", "to": "2022-12-18T14:00:00.000Z", "active+": "2.800000", "active-": "0.000000", "reactive+": "0.100000", "reactive-": "0.400000" } ], "legend": { "active": { "units": "кВтч", "title": "электроэнергия активная" }, "reactive": { "units": "кВАрч", "title": "электроэнергия реактивная" } } }

График профиля мощности 30 минут

запрос: entek/api/meters/<идентификатор>/graph/half-hourly?<параметр>=<значение_1>,...

Набор параметров и формат ответа аналогичны запросу "График профиля мощности 1 час"

запрос применим только к счетчикам электроэнергии


График профиля мощности 1 сутки

запрос: entek/api/meters/<идентификатор>/graph/daily?<параметр>=<значение_1>,...

Набор параметров и формат ответа аналогичны запросу "График профиля мощности 1 час"


График профиля мощности 1 месяц

запрос: entek/api/meters/<идентификатор>/graph/monthly?<параметр>=<значение_1>,...

Набор параметров и формат ответа аналогичны запросу "График профиля мощности 1 час"


Мгновенные параметры (текущие измерения счетчика)

запрос: entek/api/meters/<идентификатор>/values?<параметр>=<значение_1>,...

имя параметра описание допустимые значения
since дата-время начала поиска значений запрос возвращает последние (текущие) значения мгновенных параметров после указанного даты-времени
include включает в ответ только указанные значения список мгновенных параметров (перечисляется через ',' или ';'): P, Pa, Pb, Pc, Q, Qa, Qb, Qc, S, Sa, Sb, Sc - мощности активная, реактивная и полная (линейный и фазные); Ua, Ub, Uc, Ia, Ib, Ic - фазные напряжения и токи; CosFi, CosFia, CosFib, CosFic - коэффициенты мощности (линейный и фазные); F - частота; dT - расхождение часов счетчика и сервера;по умолчанию используется полный набор параметров, применимый к типу ресурса данного счетчика

Пример ответа:

{ "values": { "P": { "title": "Мощность активная суммарная", "units": "кВт", "value": "29.080000", "timestamp": "2022-12-20T00:04:14.0Z" }, "Pa": { "title": "Мощность активная, фаза A", "units": "кВт", "value": "29.080000", "timestamp": "2022-12-20T00:04:14.0Z" }, "Pb": { "title": "Мощность активная, фаза B", "units": "кВт", "value": "0.000000", "timestamp": "2022-12-20T00:04:14.0Z" }, "Pc": { "title": "Мощность активная, фаза C", "units": "кВт", "value": "0.000000", "timestamp": "2022-12-20T00:04:14.0Z" } } }

Архив (график) мгновенных параметров (измерений счетчика)

запрос: entek/api/meters/<идентификатор>/value/<измерение>?<параметр>=<значение>,...

идентификатор - идентификатор потребителя в БД. измерение - один из мгновенных параметров:

имя параметра описание допустимые значения
since дата-время начала графика формат даты ISO8601 (пример: 2014-12-01T00:00:00.000Z)
till дата-время конца графика аналогично параметру since

Пример ответа:

{ "data": [ { "value": "238.039993", "timestamp": "2022-12-20T00:01:56.0Z" } ], "legend": { "units": "В", "title": "Фазное напряжение, фаза A" } }

Архив показаний счетчика

запрос: entek/api/meters/<идентификатор>/reading/<измерение>?<параметр>=<значение>,…

идентификатор - идентификатор потребителя в БД.

измерение - один из мгновенных параметров:

имя параметра описание допустимые значения
since дата-время начала графика формат даты ISO8601 (пример: 2014-12-01T00:00:00.000Z)
till дата-время конца графика аналогично параметру since

Пример ответа:

{ "data": [ { "value": "14805.400085", "timestamp": "2022-12-20T00:00:17.0Z" } ], "legend": { "units": "кВтч", "title": "Энергия активная прямая со сброса (показания)" } }

Проверка активности счетчика

запрос: entek/api/meters/check_activity

Запрос предназначен для проверки собираемости данных с приборов учета. В параметрах запроса необходимо указать: meterId - идентификатор точки точки учета из базы данных; period - глубина запроса в сутках от текущих (целое число). Последнему элементу массива в ответе соответствуют текущие сутки.

Пример ответа:

{ "link_days": [1, 1, 0, 0] }

Данные SCADA

Запрос станций

запрос: /entek/api/stations

Ответ содержит в себе список всех баз данных станций.

Пример ответа:

{ "stations": [ { "name": "WEB SCADA SRV", "id": 1, "dbs": [ { "dbname": "Новая БД 1", "fileName": "/home/db/kdb.fdb", "serverName": "localhost" }, { "dbname": "Новая БД 2", "fileName": "/home/db/kdb2.fdb", "serverName": "localhost" } ] } ] }

Запрос списка сохраняемых параметров в базу данных

запрос: entek/api/saving-params/<идентификатор>

идентификатор - id станции в проекте, содержится в ответе на запрос "Запрос станций".

Пример ответа:

{ "params": [ { "dbname": "Новая БД 1", "paramCode": "EnLogic.St1.T222.Grp0.Id271", "paramId": 1 }, { "dbname": "Новая БД 1", "paramCode": "EnLogic.St1.T222.Grp0.Id272", "paramId": 2 } ] }

Запрос данных измерительного канала

запрос: entek/api/signal/<канал>?<параметр>=<значение_1>,...

канал - код запрашиваемого параметра, содержится в ответе на запрос "Запрос станций". Формат кода: EnLogic.St<номер станции>.T<тип параметра>.Grp<номер группы>.Id<номер параметра>. Для запроса нескольких параметров формат запроса будет без номера параметра: EnLogic.St<номер станции>.T<тип параметра>.Grp<номер группы>. Вместо этого необходимые идентификаторы передаются в параметрах запроса в переменной ids разделенные ';' (ids=1;2;3.). При этом не будет использовано прореживание точек. Также для множественного запроса можно использовать запроса entek/api/signal/many, но при этом необходимо передать в теле запроса перечень необходимых каналов.

имя параметра описание допустимые значения
date дата-время начал запрашиваемых данных дата-время в формате ISO8601. Если присутствует только параметр date, запрашиваются данные с указанного момента времени до конца суток. Если присутствует только параметр till, запрашиваются данные с начала суток до указанного момента времени. Если отсутствуют оба параметра, выполняется запрос с параметром till, равным текущему моменту времени. Допускается указание только времени (начиная с 'T'), в этом случае дата считается равной текущей (если дата отсутствует в обоих параметрах) либо равной дате, указанной явно в одном из параметров
till дата-время конца запрашиваемых данных аналогично параметру date
point количество требуемых записей При передачи параметра запрашиваемый интервал разбивается на малые и на каждом производится поиск максимального и минимального значения. Если параметр не передавать, то будет возвращено количество записей ограниченное лимитом
utс сдвиг времени относительно нулевого меридиана вещественное число в диапазоне -12...+12, определяет часовой пояс времени, указанного в параметрах date и till; если utc равен 0, в запросе и ответе сервера используется единое время UTC; если параметр utc отсутствует, в запросе и ответе используется часовой пояс, указанный в конфигурационном файле.
ids идентификаторы параметров целое положительное число, перечисляются через ';'

Пример тела запроса с несколькими параметрами:

{ "channels": [ "EnLogic.St0.T222.Grp0.Id27", "EnLogic.St0.T222.Grp0.Id28", "EnLogic.St0.T222.Grp0.Id29" ] }

Пример ответа с одним параметром:

{ "data": [ { "v": 7054.796875, "t": "2023-01-09T08:28:58.990Z", "q": 255 }, { "v": 7054.796875, "t": "2023-01-09T08:28:59.0Z" }, { "v": 7126.419434, "t": "2023-01-09T08:29:09.0Z" }, { "v": 7271.118652, "t": "2023-01-09T08:29:20.0Z" } ] }

Пример ответа с несколькими параметрами:

{ "params": [ { "channel": "EnLogic.St0.T222.Grp0.Id61", "data": [ { "t": "2024-10-11T08:39:58.9", "v": 0.519001 }, { "t": "2024-10-11T08:39:59.0", "v": 3.563999 }, { "t": "2024-10-11T08:40:00.0", "v": 6.575998 } ] }, { "channel": "EnLogic.St0.T222.Grp0.Id63", "data": [ { "q": 255, "t": "2024-10-11T08:39:15.990", "v": 0 }, { "q": 43, "t": "2024-10-11T08:39:46.12", "v": 0 }, { "t": "2024-10-11T08:39:47.0", "v": 0.5015 } ] } ] }

q это quality — признак качества, может принимать следующие значения:

Если значение q < 5, то оно достоверное, если q >=5 — такое значение недостоверное.


Экспорт данных измерительных каналов

запрос: /entek/api/signal_export

Запрос для получения истории параметра в формате html или csv. В запросе необходимо передать параметры запроса:

имя параметра описание допустимые значения
date дата-время начал запрашиваемых данных дата-время в формате ISO8601. Если присутствует только параметр date, запрашиваются данные с указанного момента времени до конца суток. Если присутствует только параметр till, запрашиваются данные с начала суток до указанного момента времени. Если отсутствуют оба параметра, выполняется запрос с параметром till, равным текущему моменту времени. Допускается указание только времени (начиная с 'T'), в этом случае дата считается равной текущей (если дата отсутствует в обоих параметрах) либо равной дате, указанной явно в одном из параметров
till дата-время конца запрашиваемых данных аналогично параметру date
utс сдвиг времени относительно нулевого меридиана вещественное число в диапазоне -12...+12, определяет часовой пояс времени, указанного в параметрах date и till; если utc равен 0, в запросе и ответе сервера используется единое время UTC; если параметр utc отсутствует, в запросе и ответе используется часовой пояс, указанный в конфигурационном файле.
type тип экспорта Допустимые значения: html и csv

Запрашиваемые параметры описываются в теле запроса в формате json. Перечень параметров передается в массивом в переменной channels, каждый элемент массива состоит из структуры с переменной channel, в которой указывается канал параметра, и cipher, в которой указывается название параметра для отображения в отчете.

Пример тела запроса:

{ "channels": [ { "channel": "EnLogic.St0.T222.Grp0.Id27", "cipher": "Мощность" } ] }

При типе экспорта csv приходит ответ, который содержит заголовки Content-Type: text/csv и Content-Disposition: attachment; filename="data.csv, а в теле предается содержание файла в кодировке UTF-8. При экспорте html тело страницы передается в кодировке WIN-1251.


Данные журнала событий

Запрос настроек событий

запрос: /entek/api/events/config

GET запрос для получения содержания файла KEvents.json из проекта.


Запрос настроек всплывающего списка событий

запрос: /entek/api/events/popup_list_config

GET запрос для получения настроек всплывающего списка событий из проекта, которые хранятся в файле Settings.xml. Тело ответа передается в формате xml и содержит целиком ноду EvsListPopup. Если нода не найдена или пустая, то тело ответа имеет вид <EvsListPopup />.


Запрос всех групп событий

запрос: /entek/api/events/groups

GET запрос, в ответе на который передается список всех категорий и групп событий.

Пример ответа:

{ "categories": [ { "name": "Сервер", "BkColor": "#050000", "Font": { "Italic": false, "Bold": false, "Underline": false, "Color": "#080000" }, "groups": [ { "name": "STARTSTOPGROUP", "descrp": "СДД - запуск/останов", "BkColor": "#ff8080", "Font": { "Italic": false, "Bold": false, "Underline": false, "Color": "#080000" } }, { "name": "DASERVERGROUP", "descrp": "СДД - лог работы", "BkColor": "#050000", "Font": { "Italic": false, "Bold": false, "Underline": false, "Color": "#080000" } }, { "name": "ENLOGICMNGR-IEC", "descrp": "Библиотека EnLogicMngr - ПУ МЭК", "BkColor": "#050000", "Font": { "Italic": false, "Bold": true, "Underline": false, "Color": "#000080" } } ] } ] }

Запрос событий группы

запрос: entek/api/events/<идентификатор>?<параметр>=<значение_1>,...

GET запрос для получения событий по названию группы событий. В качестве идентификатора в строке запроса передается название группы событий, которое содержится в ответе на запрос всех групп событий. Также в запросе передаются query-параметры:

имя параметра описание
date время начала интервала запрашиваемых данных
till время окончания интервала запрашиваемых данных

Пример ответа:

{ "events": [ { "groupId": 3, "clientId": "10.0.2.15", "eventTimestamp": "2022-12-21T11:11:46.778Z", "eventText": "Запуск модуля настройки баз данных технологических параметров", "number": 710, "userName": "admin", "eventType": 0 }, { "groupId": 3, "clientId": "10.0.2.15", "eventTimestamp": "2022-12-21T11:11:52.213Z", "eventText": "Закрытие модуля настройки баз данных технологических параметров", "number": 711, "userName": "admin", "eventType": 0 } ] }

Запрос событий с применением фильтров

запрос: /entek/api/events_filtered

Запрос для получения событий по фильтрам, которые передаются в теле запроса в формате JSON. Тело запроса может содержать следующие параметры:

параметр назначение приоритет
db_guids guid БД, из которой будут запрашиваться события при отсутствии параметра или указании неверного guid данные берутся из БД назначенной по умолчанию
groups массив с названиями групп событий обязательно задать
client_ids массив айпи адресов необязательный
station_id номер станции необязательный параметр
controllers массив целочисленных идентификаторов контроллеров необязательный параметр
channels массив каналов указанных строками (["EnLogic.St1.T222.Grp0.Id0", "EnLogic.St1.T222.Grp0.Id1"]) необязательный параметр
time_begin время начала запрашиваемого интервала при отсутствии интервала задать last_evt_count
time_end время окончания запрашиваемого интервала при отсутствии интервала задать last_evt_count
last_evt_count количество последних событий необязательный параметр
sort_mode_asc логический параметр использования сортировки необязательный параметр
actual_alarms логический параметр передачи актуальных алармов необязательный параметр
filters массив идентификаторов пользовательских фильтров из БД параметров необязательный параметр
columns список названий стандартных полей, которые должны содержаться в ответе При отсутствии параметра предаются все допустимые параметры
attr_columns идентификаторы аттрибутов из БД параметров необязательный параметр
evt_types массив целочисленных идентификаторов типов событий необязательный параметр

Допустимые значения для параметра columns и их соответствие полям БД:

group_name -> from GROUP_ID JOIN GROUP_LIST.GROUP_NAME client_id -> CLIENT_ID event_time -> EVENT_DATE_UTC + EVENT_TIME_UTC event_text -> EVENT_TEXT event_number -> NUMBER event_type -> EVENT_TYPE comment -> COMMNENTS user -> USER_NAME station_id -> STATIONID group_id -> GROUPID passp_type -> PASSPTYPE passp_id -> PASSPID passp_time -> PASSPTIME passp_val -> ALARM_VAL alarm_priority -> ALARM_PRIORITY alarm_ack -> ALARM_ACK alarm_ack_user -> ALARM_ACK_USER alarm_ack_time -> ALARM_ACK_TIME alarm_end_time -> ALARM_END_TIME alarm_set_val -> ALARM_SETTINGS_VALUE passp_cipher -> DB Params или из xml конфигурации passp_name -> DB Params или из xml конфигурации object_name -> DB Params или из xml конфигурации

Запрос выдает ограниченное количество событий (по умолчнанию 1000 событий). Для получения следующего пакета событий используется Запрос следующего пакета событий. После получения всех событий рекомендуется выполнить запрос Остановка запроса пакетов событий. Каждый пакет имеет флаг got_all_data, который равняется true при получении последних данных.

Ответ содержит параметр events, в котором передается массив с событиями. Также может содержаться параметр params, в котором передается массив с описанием параметров, заданными полями passpcipher, passp_name, object_name и значения переданных атрибутов, название переменных атрибутов имеет форму **"attr<идентификатор атрибута>"**.

Примеры тела запроса:

{ "db_guids": ["1111"], "groups": ["ALARMSMEDIUMHIGH", "DASERVERGROUP"], "station_id": 0, "controllers": [0], "time_begin": "2023-12-29T00:00:00.000Z", "time_end": "2023-12-29T17:00:00.000Z" }
{ "db_guids": ["1111"], "groups": ["ALARMSMEDIUMHIGH", "DASERVERGROUP"], "station_id": 0, "controllers": [0], "last_evt_count": 10, "columns": ["group_name", "event_time", "event_text"] }

Пример ответов:

{ "events": [ { "group_name": "DASERVERGROUP", "client_id": "127.0.1.1", "event_time": "2024-01-09T06:01:32", "event_text": "StopMessagesAntraks", "event_number": "701", "event_type": "0", "station_id": "0", "passp_type": "222", "group_id": "0", "passp_id": "0" }, { "group_name": "DASERVERGROUP", "client_id": "127.0.1.1", "event_time": "2024-01-09T06:01:32", "event_text": "RTP - SUCCESSFULLY call STOPPROCESS", "event_number": "696", "event_type": "0", "station_id": "0", "passp_type": "222", "group_id": "0", "passp_id": "0" } ] }
{ "events": [ { "event_time": "2023-12-29T11:50:58", "event_text": "Переключение аларм выше среднего - Отключено", "passp_time": "2023-12-29T11:50:58" }, { "event_time": "2023-12-29T11:50:50", "event_text": "Переключение аларм выше среднего - Включено", "passp_time": "2023-12-29T11:50:50" } ], "params": [ { "station_id": 0, "group_id": 0, "passp_id": 4, "passp_type": 2, "passp_cipher": "ТС аларм выше среднего", "object_name": "Генератор демо-данных", "passp_name": "Генератор демо-данных.Задача 1.Для тестирования алармов.ТС аларм выше среднего", "attr_1": "Тестовое значение" } ] }

Запрос следующего пакета событий

запрос: /entek/api/get_next_events GET запрос требующий авторизацию. Предназначен для получения следующего пакета событий. Если запрос не выполнялся более 30 секунд, то необходимо повторно выполнить Запрос событий с применением фильтров. Успешный ответ аналогичен Запрос событий с применением фильтров, а также содержит в себе параметр infoCode (при 0 запрос выполнен успешно, при 1 были ошибки) и infoString (содержится в ответе, если infoCode не равен 0).


Остановка запроса пакетов событий

запрос: /entek/api/stop_get_events

GET запрос требующий авторизацию. Предназначен для прекращения получения пакетов событий. Ответ содержит в себе параметр infoCode (при 0 запрос выполнен успешно, при 1 были ошибки) и infoString (содержится в ответе, если infoCode не равен 0).

Пример ответа:

{ "infoCode": 1, "infoString": "Сессия событий не найдена" }

Удаление событий

запрос: /entek/api/events_delete

Запрос для удаления событий. В теле запроса может содержаться несколько переменных:

Пример запроса:

{ "group_name": "REST_EVENTS", "start_time": "2026-04-17T00:40:00.000", "end_time": "2026-04-21T07:00:00.000" }

Пример ответа:

{ "infoCode": 0 }

Работа с БД параметров

Информации о параметре

запрос: entek/api/params_db/param_info

Запрос для получения информации о параметре из БД параметров. Необходимо передать тело, которе будет перенаправлено в EVP для получения структуры адреса параметра и последующего запроса в БД для получения информации. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Для получения информации из БД тело запроса должно содержать следующие параметры:

Пример запроса:

{ "mnemo_topic_id": "74CF2F8B-365F-4A3B-A8C5-23F62B691823", "object_id": "48446A95-E881-4C1C-8E2C-11E9156D5C4F", "object_idx": 1 }

Пример ответа:

{ "infoCode": 0, "station_name": "local", "group_name": "group", "full_path": "path", "value_type": 0, "param_type": 1, "cipher": "cipher", "name": "name", "unit": "kVt", "vpu": "90", "npu": "10", "vau": "80", "nau": "20", "up_border": "100", "down_border": "0", "user_attr_list": [ { "name": "name", "value": "value" } ] }

Информации о параметрах объекта

запрос: entek/api/params_db/object_params

Запрос для получения информации о параметре из БД параметров. Необходимо передать тело, которе будет перенаправлено в EVP для получения структуры адреса параметров и последующего запроса в БД для получения информации. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Для получения информации из БД тело запроса должно содержать следующие параметры:

Пример запроса:

{ "mnemo_topic_id": "74CF2F8B-365F-4A3B-A8C5-23F62B691823", "object_id": "48446A95-E881-4C1C-8E2C-11E9156D5C4F", "object_idx": 1 }

Пример ответа:

{ "infoCode": 0, "params": [ { "stn_id": 0, "grp_id": 0, "psp_id": 0, "psp_type": 0, "station_name": "local", "group_name": "group", "full_path": "path", "value_type": 0, "param_type": 1, "cipher": "cipher", "name": "name", "unit": "kVt", "vpu": "90", "npu": "10", "vau": "80", "nau": "20", "up_border": "100", "down_border": "0", "user_attr_list": [ { "name": "name", "value": "value" } ] } ] }

Запись уставок параметра

запрос: entek/api/params_db/update_setpoints

Запрос для обновления уставок параметра. Необходимо передать тело, которе будет перенаправлено в EVP для обновления уставок. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки. Также для записи уставок пользователю необходимы права для аналогового управления.

Пример ответа:

{ "infoCode": 0 }

Запрос имени атрибута по id

запрос: entek/api/params_db/attr_name/<_id>

Запрос для получения имени пользовательского атрибута. В качестве _id передается идентификатор атрибута.

Пример ответа:

{ "attr_name": "Пользовательский атр" }

Запрос дерева пользователя

запрос: entek/api/params_db/user_tree

Запрос для получения пользовательского дерева для дальнейшей работы с фильтрами.

Пример ответа:

[ { "id": 1, "name": "Корень", "filter": false }, { "id": 5, "name": "фывф", "filter": false, "items": [ { "id": 6, "name": "ааааа", "filter": false, "items": [ { "id": 2, "name": "Контроллер 0", "filter": true }, { "id": 3, "name": "Контроллер 3", "filter": true } ] }, { "id": 4, "name": "РЗА", "filter": true } ] } ]

Управление параметрами

Дискретное

запрос: entek/api/dcontrol?level=<num>

Запрос для дискретного управления, передается с параметром level - уровень управления. Для выполнения команды у пользователя должны быть права для дискретного управления необходимого уровня. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 1, "infoString": "Управление не разрешено" }

Аналоговое

запрос: entek/api/acontrol

Запрос для аналогового управления. Для выполнения команды у пользователя должны быть права для аналогового управления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0 }

Алармы

Настройки алармов

запрос: entek/api/alarms/config/priority/

Запрос для получения информации о настройке алармов по их приоритету, который передается последним значением в запросе (num). В переменной sound_data содержится звуковой файл в кодировке Base64.

Пример ответа:

{ "sound_type": 2, "sound_name": "alarm_001.wav", "sound_data": "data", "sound_repeat": 10, "sound_pause": 10, "back_color": "#808080", "alarm_jump_mnemo": "{21D1D68D-86F4-4F69-B254-543D215FF6C4}" }

Квитирование алармов для ССД

запрос: entek/api/alarms/ack_all

Запрос для квитирования всех алармов, который должен содержать тело для дальнейшей передачи в EVP. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0 }

Квитирование алармов в базе данных

запрос: entek/api/alarms/set_ack_marks

Запрос для квитирования алармов в базе данных. Передается один или несколько алармов для них выставляется признак квитирования, время и пользователь, который выполнил запрос. В запросе передается время параметра, номер станции, тип параметра, идентификатор параметра, группа паараметра.

Пример запроса:

[ { "event_time": "2025-01-21T13:23:00.669Z", "station_id": 0, "passp_type": 222, "passp_id": 1, "group_id": 0 }, { "event_time": "2025-01-22T08:00:55.582Z", "station_id": 1, "passp_type": 222, "passp_id": 0, "group_id": 0 } ]

Пример ответа:

{ "infoCode": 0 }

Запрос изображений

запрос: entek/api/image/<image_name>

Запрос для получения изображений из папки проекта, название изображение передается последним параметром в запросе. Поиск производится в папке KVision/Images, если там нет, то в KVision/Animate. В ответе передается файл в кодировке Base64 и его название.

Пример ответа:

{ "file_name": "001.jpeg", "data": "data" }

Плакаты

Список плакатов

запрос: entek/api/sign/get_list

Запрос для получения всех плакатов из папки проекта. Анализ производится в в файле KVision/Signs/Signs.xml. Ответ передается массивом в переменной signList, если файл не найден или плакатов нет, то массив будет пустой.

Пример ответа:

{ "signList": [ { "autoSize": true, "fileName": "Rabota_Na_Linii.bmp", "highPriority": true, "id": "{B0D20A30-E99F-4BC1-B1C0-714C41CE7E98}", "name": "1. Работа на линии", "transp": false }, { "autoSize": true, "fileName": "Rabotaut_Ludi.bmp", "id": "{DFFA5C19-5C13-472F-8456-00910DC5EC1F}", "name": "2. Работают люди", "transp": false } ] }

Запрос изображения плаката

запрос: entek/api/sign/get_image

Запрос для получения изображений из папки проекта по названию файла, которое передается в теле запроса в переменной file_name. Поиск производится в папке KVision/Signs. В ответе передается файл в кодировке Base64 и идентификатор плаката.

Пример запроса:

{ "file_name": "Зашунтировано.bmp" }

Пример ответа:

{ "sign_id": "Зашунтировано.bmp", "data": "<файл в кодировке Base64>" }

Действия с плакатами

запросы:

Запросы предназначены для добавления, редактирования и удаления плакатов, которые должен содержать тело для дальнейшей передачи в EVP. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки. Для данных запросов пользователь должен быть с правами администратора или иметь разрешение на работу с плакатами, которое можно установить в модуле Пользователи.

Пример ответа:

{ "infoCode": 1, "infoString": "Добавление плаката не разрешено" }

Бланки переключений

Список бланков

запрос: entek/api/switch_blanks/get_list

Запрос получения списка бланков. В теле запроса в формате json передается идентификаторы мнемосхемы и объекта мнемосхемы. В ответе передается массив бланков в переменной switch_blanks. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "mnemo_id": "{74CF2F8B-365F-4A3B-A8C5-23F62B691823}", "mnemo_obj_id": "{0967A306-B06A-4BC4-861C-AB9CF59DFBEF}" }

Пример ответа:

{ "mnemo_id": "{F5F6C1FC-668C-4AF1-A04A-2511305FDF78}", "mnemo_obj_id": "{EEE41D05-929A-44A1-B71E-9D77B6E7D718}", "switch_blanks": [ { "id": 3, "blank_number": 0, "blank_name": "Новый бланк", "is_ready": 1, "save_report": 1, "last_edit_time": "2026-03-05T10:23:43", "last_edit_user": "admin", "exec_count": 4, "last_exec_time": "2026-03-13T15:52:09", "last_exec_user": "admin" }, { "id": 4, "blank_number": 1, "blank_name": "Типовой бланк переключений № 1", "is_ready": 1, "save_report": 1, "last_edit_time": "2026-03-13T16:00:07", "last_edit_user": "admin", "exec_count": 2, "last_exec_time": "2026-03-13T16:00:53", "last_exec_user": "admin", "purpose": "тест", "conditions": "1. Состояние исходной схемы и устройств РЗА: \r\n2. Выполнение переключений с использованием АРМ или терминалов: АРМ\r\n3. Наличие наведенного напряжения (указывается для ВЛ, КВЛ): -\r\n4. Возможность возникновения феррорезонанса: -\r\n5. Состояние оперативной блокировки: исправна\r\n", "users_checked": { "users": [ { "name": "Иван", "position": "Начальник" } ] }, "users_approved": { "users": [ { "name": "Петр", "position": "Руководитель" } ] } } ], "infoCode": 0 }

Список действий бланка

запрос: entek/api/switch_blanks/get_actions/<идентификатор бланка>

Запрос получения списка действий бланка. В строке запроса передается идентификатор бланка. В ответе сожержится массив действий в переменной actions. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "blank_id": 1, "actions": [ { "id": 2, "action_name": "Новое действие", "action_type": 1, "action_number": 0, "add_to_report": 1, "param_station": 0, "param_type": 0, "param_group": 0, "param_id": 0, "param_val": 1, "wait_time_sec": null, "user_task": null, "sing_set": null, "sign_mnemo_id": null, "sign_mnemo_obj_id": null, "sign_type": null, "ka_mnemo_id": null, "ka_tp_id": null, "ka_val": null }, { "id": 3, "action_name": "Новое действие 2", "action_type": 1, "action_number": 1, "add_to_report": 1, "param_station": 0, "param_type": 0, "param_group": 0, "param_id": 0, "param_val": 1, "wait_time_sec": null, "user_task": null, "sing_set": null, "sign_mnemo_id": null, "sign_mnemo_obj_id": null, "sign_type": null, "ka_mnemo_id": null, "ka_tp_id": null, "ka_val": null } ], "infoCode": 0 }

Запуск бланка

запрос: entek/api/switch_blanks/run_blank

При запросе запуска бланка тело запроса передается в EVP. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки. При выполнении запроса сохраняется событие в базу данных.

Пример ответа:

{ "infoCode": 1, "infoString": "Нет прав на запуск бланка" }

Завершение выполнения бланка

запрос: entek/api/switch_blanks/complete_blank

При запросе завершения бланка бланка тело запроса передается в EVP. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0 }

Получение всех отчетов бланка

запрос: entek/api/switch_blanks/blank_reports/<идентификатор бланка>

Запрос получения списка всех отчетов бланка без содержания самого отчета. В строке запроса передается идентификатор бланка. В теле ответа содержится иднетификатор бланка и массив отчетов в перемнной reports, который содержит в себе идентификатор отчета id, время формирования timestamp, пользователя username и результат выполнения result. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "blank_id": 1, "reports": [ { "id": 1, "timestamp": "2025-11-25T09:18:21", "username": "admin", "result": 1 } ], "infoCode": 0 }

Получение отчета бланка

запрос: entek/api/switch_blanks/report

Запрос получения отчета бланка. В теле запроса передается время отчета и идентификатор бланка. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "blank_id": 1, "report_dt": "2025-11-25T09:18:21Z" }

Пример ответа:

{ "blank_id": 1, "timestamp": "2025-11-25T09:18:21", "username": "admin", "result": 1, "report": "Результат выполнения", "infoCode": 0 }

Запросы к серверу сбора данных

Запрос состояния станций

запрос: entek/api/das/stations/status

Запрос только для проектов версии 2

Запрос получения состояния станций предоставляет информацию о доступности для каждой станции для основной и резервной. Возможно запросить статус конкретной станции указав в параметрах запроса системный адрес станции в переменной st_num. При успешном запросе ответ содержит массив станций в переменной stations, параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "stations": [ { "id": 2, "station_num": 0, "udp_port": 25923, "server_ip_1": "127.0.0.1", "status_1_code": 0, "server_ip_2": "", "status_2_code": 1, "status_2_data": "Не задан ip адрес станции" } ], "infoCode": 0 }

Запрос состояния контроллера

запрос: entek/api/das/controller/status

Запрос только для проектов версии 2

Запрос получения состояния контроллера. В теле запроса передается системный адрес станции и контроллера. При успешном запросе ответ содержит параметр state с информацией о статусе контроллера, infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "st_sys": 0, "ctrl_sys": 0 }

Пример ответа:

{ "state": { "Id": 0, "Link": false, "LinkDelay": false, "IP": "127.0.0.1", "UseSyncTime": false, "LastDataTime": "2026-09-03T23:04:15", "LinkLostCount": 0, "LinkQuality": 0, "PartialFail": true, "IEC_ASDUwithoutTS": 0, "IEC_ASDUwithTS": 0, "IEC_ParamsWithoutTS": 0, "IEC_ParamsWithTS": 0, "Logging": false, "SSDParamsQuanTS": 1131, "SSDParamsQuanTU": 164, "SSDParamsQuanTI": 499 }, "infoCode": 0 }

Запросы конфигурирования

Оркестратор

Запросы для конфигурирования доступны только для пользователей с правами администратора. При этом исполнительный файл Rest API должен находиться в одной директории с модулем Оркестратор.

Запрос глобальных настроек

запрос: entek/api/config/orch/get_config

Запрос глобальных настроек модуля Оркестратор. Если не заданы переменные restart_type, restart_delay или auto_start, то они не добавляются в ответ.

Пример ответа:

{ "debug_log": true, "http_port": 8847, "vars": [ { "id": "prj", "value": "/home/entek/SCADA/main.epr" }, { "id": "src", "value": "/opt/entek/bin/" }, { "id": "ascue", "value": "noascue" } ], "restart_type": "always", "restart_delay": 30, "auto_start": false }

Обновление глобальных настроек

запрос: entek/api/config/orch/update_config

Запрос полностью перепысывает конфигурационный файл модуля Оркестратор. Если переменные глобвальные настройки vars, restart_type, restart_delay или auto_start не надо задавать, то их можно не добавлять в запрос. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

При изменении настроек порта модуль Оркестратор необходимо перезапустить

Пример запроса:

{ "debug_log": true, "http_port": 8847, "vars": [ { "id": "prj", "value": "/home/entek/SCADA/main.epr" }, { "id": "src", "value": "/opt/entek/bin/" }, { "id": "ascue", "value": "noascue" } ], "restart_type": "always", "restart_delay": 30, "auto_start": false }

Пример ответа:

{ "infoCode": 1, "infoString": "Добавление плаката не разрешено" }

Запрос всех юнитов

запрос: entek/api/config/orch/get_units

Ответ содержит все юниты, с которыми работает модуль Оркестратор. Опционально у юнитов могут быть собственные настройки в переменных restart_type, restart_delay или auto_start.

Пример ответа:

{ "units": [ { "filename": "entek-daserver.orch", "name": "DAS-сервер", "cmd": "$src$daserver $prj$ stationid=1 noascue -daemon" }, { "filename": "entek-enlogic.orch", "name": "Enlogic", "cmd": "$src$enlogic/enlogic" }, { "filename": "entek-rest.orch", "name": "REST-сервер", "cmd": "$src$rest-srv $prj$ -daemon", // опционально "restart_type": "always", "restart_delay": 30, "auto_start": false } ] }

Создать юнит

запрос: entek/api/config/orch/create_unit

Запрос содержит тело с описанием юнита. Имя файла должно обязательно начинаться с entek- и иметь расширение .orch, чтобы модуль с ним работал. Если необходимо указать собственные настройки, отличающие от глобальных, то можно добавить переменные restart_type, restart_delay или auto_start. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "filename": "entek-rest.orch", "name": "REST-сервер", "cmd": "$src$rest-srv $prj$ -daemon", // опционально "restart_type": "always", "restart_delay": 30, "auto_start": false }

Пример ответа:

{ "infoCode": 1, "infoString": "Файл с таким именем уже существует" }

Обновить юнит

запрос: entek/api/config/orch/update_unit

Запрос содержит тело с описанием юнита. Можно изменить все настройки, кроме имени файла. Файл юнит будет полностью переписан при применении новых настроек. Если необходимо указать собственные настройки, отличающие от глобальных, то можно добавить переменные restart_type, restart_delay или auto_start. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "filename": "entek-rest.orch", "name": "REST-сервер", "cmd": "$src$rest-srv $prj$ -daemon", // опционально "restart_type": "always", "restart_delay": 30, "auto_start": false }

Пример ответа:

{ "infoCode": 1, "infoString": "Нет такого файла юнита" }

Удалить юнит

запрос: entek/api/config/orch/delete_unit

Запрос для удаления файлов юнитов. В теле запроса передается имя файла для удаления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "filename": "entek-rest.orch" }

Пример ответа:

{ "infoCode": 1, "infoString": "Нет такого файла юнита" }

Глобальные параметры

Получение значения параметра

Запрос только для проектов версии 2

запрос: entek/api/config/global_sets/get?key=<ключ>

Запрос на получение значения глобального параметра по его ключу.

Параметры запроса:

Пример ответа:

{ "config_value": "значение_параметра", "infoCode": 0 }

Установка значения параметра

Запрос только для проектов версии 2

запрос: entek/api/config/global_sets/set

Запрос на установку глобального параметра. Параметры передаются в теле запроса в формате JSON. Если в базе данных ключ параметра отсутствует, то создается новая запись.

Параметры тела запроса:

Пример запроса:

{ "config_key": "key", "config_value": "value" }

Удаление параметра

Запрос только для проектов версии 2

запрос: entek/api/config/global_sets/delete?key=<ключ>

Запрос на удаление глобального параметра по его ключу.

Параметры запроса:

Пример ответа:

{ "infoCode": 0 }

Станции

Запросы для конфигурирования станций доступны только для пользователей с правами администратора.

Запрос всех станций

запрос: entek/api/config/station/get_all

Запрос только для проектов версии 2

Ответ содержит все станции в проекте. При успешном запросе ответ также содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0, "stations": [ { "client_ip_1": "127.0.0.1", "client_ip_2": "127.0.0.1", "station_num": 10, "description": "Станция по умолчанию", "id": 1, "mode": "single", "name": "Станция ЭНТЕК", "port": 25900, "server_ip_1": "127.0.0.1", "server_ip_2": "127.0.0.1" } ] }

Запрос станции по идентификатору

запрос: entek/api/config/station/get

Запрос только для проектов версии 2

Запрос для получения станции, обязательно надо передать один из параметров запроса, stId идентификатор станции или stNum номер станции. Ответ содержит информацию о станции, в строке запроса передается идентификатор конкретной станции. При успешном запросе ответ также содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "infoCode": 0, "station": { "client_ip_1": "127.0.0.1", "client_ip_2": "127.0.0.1", "id": 10, "description": "Станция по умолчанию", "station_num": 1, "mode": "single", "name": "Станция ЭНТЕК", "port": 25900, "server_ip_1": "127.0.0.1", "server_ip_2": "127.0.0.1" } }

Создать станцию

запрос: entek/api/config/station/create

Запрос только для проектов версии 2

Запрос содержит тело с описанием станции. При успешном запросе ответ содержит id новой станции, параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Для запросов необходимо заранее задать уникальный номер станции. По умолчанию при создании проекта создается дефолтная станция с номером 10.

Режим работы передается в переменной mode, доступно только три режима single, reserve, duplicate. Если получен неизвестынй режим, то по умолчанию установится режим single

Пример запроса:

{ "station_num": 1, "name": "Тест станция", "description": "", "port": 0, "server_ip_1": "127.0.0.1", "server_ip_2": "", "client_ip_1": "127.0.0.1", "client_ip_2": "", "mode": "single" }

Пример ответа:

{ "id": 10, "infoCode": 0 }

Обновить станцию

запрос: entek/api/config/station/update

Запрос только для проектов версии 2

Запрос содержит тело с описанием станции, обязательно должен присутствовать id станции. Секция станции в файле будет полностью переписан при применении новых настроек. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Режим работы передается в переменной mode, доступно только три режима single, reserve, duplicate. Если получен неизвестынй режим, то по умолчанию установится режим single

Пример запроса:

{ "db_id": 1, "id": 1, "name": "Тест станция", "description": "", "port": 0, "server_ip_1": "127.0.0.1", "server_ip_2": "", "client_ip_1": "127.0.0.1", "client_ip_2": "", "mode": "single" }

Пример ответа:

{ "infoCode": 0 }

Удалить станцию

запрос: entek/api/config/station/delete

Запрос только для проектов версии 2

Запрос для удаления станции. В теле запроса передается id станции для удаления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "db_id": 1 }

Пример ответа:

{ "infoCode": 0 }

Пользователи

Запросы для конфигурирования пользователей доступны только для пользователей с правами администратора.

Получение списка разрешений

запрос: entek/api/config/users/permissions

Запрос только для проектов версии 2

Ответ содержит разрешения, которые доступны в дистрибутиве, передается содержимое файла в формате xml.


Получение прав текущего пользователя

запрос: entek/api/config/users/my_permissions

Запрос только для проектов версии 2

Запрос для получения прав текущего пользователя, определяется по токену сессии. Ответ содержит признак админа и перечень разрешений.

Пример запроса:

{ "is_admin": 1, "permissions": { "apps": [ { "act": ["run", "DC", "AC"], "app": "vision" } ] }, "infoCode": 0 }

Запрос дерева пользователей

запрос: entek/api/config/users/get_users_groups

Запрос только для проектов версии 2

Ответ содержит список групп и ролей. Все группы передаются в массиве groups, дополнительно передается список всех ролей в массиве roles. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "groups": [ { "group_id": 1, "group_name": "Администраторы", "role_id": 1 } ], "roles": [ { "id": 1, "name": "Администратор", "is_admin": 1 }, { "id": 2, "name": "Гость", "is_admin": 0 } ], "infoCode": 0 }

Получить пользователей группы

запрос: entek/api/config/users/get_group_users/<идентификатор группы>

Запрос только для проектов версии 2

В строке запроса передается идентификатор группы. В ответе содержится все пользователи группы с информацией о них. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "users": [ { "id": 1, "login": "ADMIN", "last_name": null, "first_name": null, "middle_name": null, "username": "Администратор", "job_title": null, "department": null, "email": null, "phone_number": null, "comment": "Пользователь созданный по умолчанию", "group_id": 1, "is_blocked": 0, "last_enter_time": null, "last_enter_ip": null, "last_bad_enter_time": null, "last_bad_enter_ip": null, "block_enter_count": 0, "last_psw_change": null, "psw_keep_time": null }, { "id": 4, "login": "TESTU2", "last_name": "Тестов", "first_name": "Тест", "middle_name": "Тестович", "username": "Пользователь тест", "job_title": "Тестировщик", "department": "123123", "email": "test@test", "phone_number": "+7777777", "comment": "Тестовый пользователь", "group_id": 1, "is_blocked": 0, "last_enter_time": null, "last_enter_ip": null, "last_bad_enter_time": null, "last_bad_enter_ip": null, "block_enter_count": 0, "last_psw_change": "2026-01-16T17:30:27", "psw_keep_time": 1 } ], "infoCode": 0 }

Получить информацию о пользователе

запрос: entek/api/config/users/get_user/<идентификатор пользователя>

Запрос только для проектов версии 2

В строке запроса передается идентификатор пользователя. В ответе содержится вся информация о пользователе. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1, "login": "ADMIN", "last_name": null, "first_name": null, "middle_name": null, "username": "Администратор", "job_title": null, "department": null, "email": null, "phone_number": null, "comment": "Пользователь созданный по умолчанию", "group_id": 1, "is_blocked": 0, "last_enter_time": null, "last_enter_ip": null, "last_bad_enter_time": null, "last_bad_enter_ip": null, "block_enter_count": 0, "last_psw_change": null, "psw_keep_time": null, "group_name": "Администраторы", "role_id": 1, "role_name": "Администратор", "is_admin": 1, "permissions": { "apps": [ { "act": ["run", "DC", "AC"], "app": "vision" } ] }, "infoCode": 0 }

Создать пользователя

запрос: entek/api/config/users/create_user

Запрос только для проектов версии 2

В запроссе передается тело в формате json с информацией о новом пользователе. Обязательно должен быть задан пароль, группа и логин. Ответ содержит идентификатор нового пользователя. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "login": "testu", "password": "123", "last_name": "Тестов", "first_name": "Тест", "middle_name": "Тестович", "username": "Пользователь тест", "job_title": "Тестировщик", "department": "123123", "email": "test@test", "phone_number": "+7777777", "comment": "Тестовый пользователь", "pwd_keep_period": 1, "group_id": 1 }

Пример ответа:

{ "id": 2, "infoCode": 0 }

Обновить пользователя

запрос: entek/api/config/users/update_user

Запрос только для проектов версии 2

В запроссе передается тело в формате json с настройками пользователя. Переписываются все настройки кроме пароля. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2, "last_name": "Тестов", "first_name": "Тест", "middle_name": "Тестович", "username": "Пользователь тест", "job_title": "Тестировщик", "department": "123123", "email": "test@test", "phone_number": "+7777777", "comment": "Тестовый пользователь", "pwd_keep_period": 1, "group_id": 1 }

Пример ответа:

{ "infoCode": 0 }

Удалить пользователя

запрос: entek/api/config/users/delete_user

Запрос только для проектов версии 2

Для удаления пользователя в теле запроса передается его идентификатор. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2 }

Пример ответа:

{ "infoCode": 0 }

Изменить пароль пользователя

запрос: entek/api/config/users/change_psw

Запрос только для проектов версии 2

Для сменя пароля в теле запроса передается логин пользователя, новый пароль и его идентификатор. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2, "login": "testu", "usr_pwd": "123123" }

Пример ответа:

{ "infoCode": 0 }

Создать группу

запрос: entek/api/config/users/create_group

Запрос только для проектов версии 2

В запроссе передается тело в формате json с настройками группы, которые содержат название группы и идентификатор роли, который является необязательным параметром. При успешном создании группы возвращается ее идентификатор в переменной id При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "Группа пользователей 1", "role_id": 1 }

Пример ответа:

{ "id": 2, "infoCode": 0 }

Обновить группу

запрос: entek/api/config/users/update_group

Запрос только для проектов версии 2

В запроссе передается тело в формате json с настройками группами. Переписываются все настройки. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2, "name": "Группа пользователей 1", "role_id": 1 }

Пример ответа:

{ "infoCode": 0 }

Удалить группу

запрос: entek/api/config/users/delete_group

Запрос только для проектов версии 2

В теле запроса передается идентификатор группы, которую надо удалить. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2 }

Пример ответа:

{ "infoCode": 0 }

Получить информацию о роли

запрос: entek/api/config/users/get_role

Запрос только для проектов версии 2

В теле запроса передается идентификатор роли, информацию о которой надо получить. В теле ответа передается json с информацией роли. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2 }

Пример ответа:

{ "name": "Гость", "is_admin": 0, "permissions": { "apps": [ { "act": ["run", "DC", "AC"], "app": "vision" } ] }, "infoCode": 0 }

Создать роль

запрос: entek/api/config/users/create_role

Запрос только для проектов версии 2

В запроссе передается тело в формате json с настройками роли, которые содержат название роли, флаг администратора со значением 0 или 1 (если не передается, то по умолчанию значение 0) и разрешения, которые являются необязательным параметром. При успешном создании роли возвращается ее идентификатор в переменной id. В переменной разрешения можно передать json любой структуры. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "Администратор", "id": 1, "is_admin": 1, "permissions": { "apps": [ { "act": ["run", "DC", "AC"], "app": "vision" } ] } }

Пример ответа:

{ "id": 1, "infoCode": 0 }

Обновить роль

запрос: entek/api/config/users/update_role

Запрос только для проектов версии 2

В запроссе передается тело в формате json с настройками роли. Переписываются все настройки. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2, "name": "Гость", "is_admin": 0, "permissions": { "apps": [ { "act": ["run", "DC", "AC"], "app": "vision" } ] } }

Пример ответа:

{ "infoCode": 0 }

Удалить роль

запрос: entek/api/config/users/delete_role

Запрос только для проектов версии 2

В теле запроса передается идентификатор роли, которую надо удалить. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2 }

Пример ответа:

{ "infoCode": 0 }

Контроллеры

Получить контроллеры

запрос: entek/api/config/controllers/get

Запрос только для проектов версии 2

Запрос для получения списка контроллеров. Доступно применение фильтров по станциям, для этого в строке запроса в переменной stationId передается идентификатор станции. Если для таблицы controllers настроены пользовательские атрибуты, в ответе присутствуют поля вида attr_<id>. Информация об атрибутах также возвращается в ответе. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "controllers": [ { "id": 5, "stationId": 1, "historyDbId": null, "name": "тест 2", "description": "тестовая конфигурация 2", "groupName": "группа тест 2", "sysAddr": 1, "ctrlType": "iec104", "linkType": "single", "linkAddr1": "127.0.0.1", "linkAddr2": "127.0.0.1", "port1": 30292, "port2": 30292, "linkSettings": { "settings": "settings" }, "uuid": "123123123", "identString": "asdasdfsadf", "timeSyncDelta": 0, "timeSyncPeriod": 0, "isBlocked": 0, "configVersion": 0, "attr_1": "доп. атрибут", "attr_2": "1", "isEdit": 0, "lastEditTime": "2026-01-29T18:29:16", "lastEditUserId": 1, "linkToDocId": 28574, "attr_5": "1", "attr_6": "2", "attr_7": "3" } ], "users": [ { "id": 1, "username": "Администратор" } ], "attributes": [ { "id": 5, "name": "пользовательский атрибут 4", "valueType": 1 }, { "id": 6, "name": "пользовательский атрибут 5", "valueType": 1 }, { "id": 7, "name": "пользовательский атрибут 6", "valueType": 1 } ], "infoCode": 0 }

Создать контроллер

запрос: entek/api/config/controllers/create

Запрос только для проектов версии 2

В теле запроса передается информация о контроллере, ответ содержит идентификатор созданной конфигурации. В запросе должен быть обязательно указан уникальный UUID контроллера. Дополнительно можно передавать пользовательские атрибуты полями вида attr_<id>. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "stationId": 1, "historyDbId": 2, "name": "тест", "description": "тестовая конфигурация", "groupName": "группа тест", "sysAddr": 1, "ctrlType": "iec104", "linkType": "single", "linkAddr1": "127.0.0.1", "linkAddr2": "", "port1": 30292, "port2": 30292, "linkSettings": { "settings": "settings" }, "uuid": "123123123", "identString": "asdasdfsadf", "timeSyncDelta": 0, "timeSyncPeriod": 0, "isBlocked": 0, "configVersion": 0, "attr_5": "доп. атрибут", "attr_6": "1", "attr_7": "4" }

Пример ответа:

{ "infoCode": 0, "id": 5 }

Изменить контроллер

запрос: entek/api/config/controllers/update

Запрос только для проектов версии 2

В запросе надо передать всю информацию о контроллере, так как обновляются все поля, в ином случае запишутся значения по умолчанию. Пользовательские атрибуты можно передавать полями attr_<id>. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 5, "stationId": 1, "historyDbId": 2, "name": "тест 2", "description": "тестовая конфигурация 2", "groupName": "группа тест 2", "sysAddr": 1, "ctrlType": "iec104", "linkType": "single", "linkAddr1": "127.0.0.1", "linkAddr2": "127.0.0.1", "port1": 30292, "port2": 30292, "linkSettings": { "settings": "settings" }, "uuid": "123123123", "identString": "asdasdfsadf", "timeSyncDelta": 0, "timeSyncPeriod": 0, "isBlocked": 0, "configVersion": 0, "attr_5": "доп. атрибут", "attr_6": "1", "attr_7": "4" }

Пример ответа:

{ "infoCode": 0 }

Удалить контроллер

запрос: entek/api/config/controllers/delete

Запрос только для проектов версии 2

В теле запроса передается идентификатор конфигурации, которую надо удалить. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2 }

Пример ответа:

{ "infoCode": 0 }

Изменить флаг редактирования

запрос: entek/api/config/controllers/set_edit_status

Запрос только для проектов версии 2

Запрос для изменения флага редактирования конфигурации контроллера. При необходимости указать, что конфигурация редактируется в переменной is_edit передается значение 1, иначе - 0. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 5, "is_edit": 1 }

Пример ответа:

{ "infoCode": 0 }

Параметры

Получить параметры

запрос: entek/api/config/params/get

Запрос только для проектов версии 2

Запрос для получения параметров. Есть возможность задавать фильтр в параметрах запроса. Доступны фильтры stationId, где указывается идентификатор станции, и ctrlId, где указывается идентификатор контроллера. Если для таблицы params настроены пользовательские атрибуты, в ответе присутствуют поля вида attr_<id>. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "params": [ { "ctrl_id": 2, "alarms_algo": null, "history_algo": null, "name": "name new", "cipher": "шифр new", "unit": "KWa new", "sysaddr": 1, "source_addr": "addr new", "param_type": 2, "inversion": 0, "vpu": null, "npu": null, "vau": null, "nau": null, "up_border": null, "down_border": null, "scale_coef": 1, "offset_coef": 0, "is_out": 0, "deadband": 0 }, { "ctrl_id": 2, "alarms_algo": null, "history_algo": null, "name": "name-2", "cipher": "шифр-2", "unit": "KWa-2", "sysaddr": 2, "source_addr": "addr-2", "param_type": 1, "inversion": 0, "vpu": null, "npu": null, "vau": null, "nau": null, "up_border": null, "down_border": null, "scale_coef": 1, "offset_coef": 0, "is_out": 0, "deadband": 0, "attr_5": "доп. атрибут", "attr_6": "1", "attr_7": "4" } ], "attributes": [ { "id": 5, "name": "пользовательский атрибут 4", "valueType": 1 }, { "id": 6, "name": "пользовательский атрибут 5", "valueType": 1 }, { "id": 7, "name": "пользовательский атрибут 6", "valueType": 1 } ], "infoCode": 0 }

Получить информацию о параметре

запрос: entek/api/config/params/param_info

Запрос только для проектов версии 2

Запрос для получения информации о параметре по его структуре адресации. В теле запроса передаются системные адреса станции, контроллера и параметра. Если для таблицы params настроены пользовательские атрибуты, в ответе присутствуют поля вида attr_<id>. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "station": 1, "ctrl": 430, "param": 4097 }

Пример ответа:

{ "param": { "ctrl_id": 1, "alarms_algo": null, "history_algo": 3, "name": "НК-1.Виртуальная группа 1.Карта МЭК-104 из Excel 1.ТС.Неисправность (общ)", "cipher": "Неисправность (общ)", "unit": "Норма/Нарушение", "sysaddr": 4097, "source_addr": "4097", "param_type": 1, "inversion": 0, "vpu": null, "npu": null, "vau": null, "nau": null, "up_border": null, "down_border": null, "scale_coef": 1, "offset_coef": 0, "is_out": 0, "deadband": 0.0, "attr_1": "Виртуальная группа 1", "attr_2": "Карта МЭК-104 из Excel 1", "attr_3": "ТС" }, "infoCode": 0 }

Создать параметры

запрос: entek/api/config/params/create

Запрос только для проектов версии 2

Запрос создания новых параметров. В теле запроса передается массив параметров в формате JSON. ctrl_id и sysaddr являются обязательными параметрами. Пользовательские атрибуты передаются как поля attr_<id>. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

[ { "ctrl_id": 1, "attr_1": "аттрибут 1", "attr_2": "аттрибут 2", "attr_3": "аттрибут 3", "attr_4": "аттрибут 4", "attr_5": "аттрибут 5", "name": "name", "cipher": "шифр", "unit": "KWa", "sysaddr": 1, "source_addr": "addr", "param_type": 1, "deadband": 0 }, { "ctrl_id": 1, "attr_1": "аттрибут 1-2", "attr_2": "аттрибут 2-2", "attr_3": "аттрибут 3-2", "attr_4": "аттрибут 4-2", "attr_5": "аттрибут 5-2", "name": "name-2", "cipher": "шифр-2", "unit": "KWa-2", "sysaddr": 2, "source_addr": "addr-2", "param_type": 1, "deadband": 0, "attr_5": "доп. атрибут", "attr_6": "1", "attr_7": "4" } ]

Пример ответа:

{ "infoCode": 0 }

Изменить параметры

запрос: entek/api/config/params/update

Запрос только для проектов версии 2

Запрос для изменения настроек параметров, при запросе переписываются все параметры кроме ctrl_id и sysaddr, их изменять нельзя. В теле запроса передается массив параметров в формате JSON. Пользовательские атрибуты передаются как поля attr_<id>. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

[ { "ctrl_id": 1, "attr_1": "аттрибут 1 new", "attr_2": "аттрибут 2 new", "attr_3": "аттрибут 3 new", "attr_4": "аттрибут 4 new", "attr_5": "аттрибут 5 new", "name": "name new", "cipher": "шифр new", "unit": "KWa new", "sysaddr": 1, "source_addr": "addr new", "param_type": 2, "scale_coef": 1, "offset_coef": 0, "is_out": 0, "deadband": 0, "attr_5": "доп. атрибут", "attr_6": "1", "attr_7": "4" } ]

Пример ответа:

{ "infoCode": 0 }

Удалить параметры

запрос: entek/api/config/params/delete

Запрос только для проектов версии 2

Запрос для удаления параметров. В теле запрос передается массив параметров в формате JSON. Необходимо передать ctrl_id и sysaddr каждого параметра. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

[ { "ctrl_id": 2, "sysaddr": 2 } ]

Пример ответа:

{ "infoCode": 0 }

Атрибуты

Запросы раздела используются для управления пользовательскими атрибутами конфигурационных таблиц. Для таблицы контроллеров используйте URI с префиксом config/controllers/attributes, для таблицы параметров — config/params/attributes. Для получения атрибутов всех таблиц используется URI config/attributes/attributes/get.

Получить атрибуты

запрос: entek/api/config/<controllers|params>/attributes/get

Запрос только для проектов версии 2

Запрос для получения атрибутов выбранной таблицы. Можно передать query-параметр ids со списком ID атрибутов через запятую. Для получения всех атрибутов (без фильтра по таблице) используйте entek/api/config/attributes/attributes/get, в этом случае в ответе в структуре каждого атрибута будет присутствовать переменная tableName. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

entek/api/config/params/attributes/get?ids=1,2,3

Пример ответа:

{ "attributes": [ { "id": 1, "name": "attr_name_1", "valueType": 1 }, { "id": 2, "name": "attr_name_2", "valueType": 2 } ], "infoCode": 0 }

Создать атрибут

запрос: entek/api/config/<controllers|params>/attributes/create

Запрос только для проектов версии 2

Запрос для создания пользовательского атрибута для выбранной таблицы. Таблица определяется по URI запроса. При успешном запросе ответ содержит id созданного атрибута, а также параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Доступны следующие типы:

Пример запроса:

{ "name": "attr_name_1", "valueType": 1 }

Пример ответа:

{ "infoCode": 0, "id": 1 }

Изменить атрибут

запрос: entek/api/config/attributes/update

Запрос только для проектов версии 2

Запрос для изменения атрибута. Идентификатор атрибута и новое имя передаются в теле запроса. В текущей реализации обновляется только поле name. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1, "name": "attr_name_1_new" }

Пример ответа:

{ "infoCode": 0 }

Удалить атрибут

запрос: entek/api/config/attributes/delete

Запрос только для проектов версии 2

Запрос для удаления атрибута. Идентификатор удаляемого атрибута передается в теле запроса в переменной id в формате JSON. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Пример ответа:

{ "infoCode": 0 }

Алгоритмы истории

Получить алгоритмы истории

запрос: entek/api/config/history_algo/get

Запрос только для проектов версии 2

Запрос для получния алгоритмов хранения истории, для получения конкретного алгоритма в параметрах запроса передается id с его идентификатором. Ответ содержит массив алгоритмов и массив пользователей. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "history_algos": [ { "id": 1, "name": "алгоритм 1", "is_off": 1, "settings": { "name": "settings" }, "edit_time": "2026-02-03T14:05:27", "edit_user_id": 1 }, { "id": 2, "name": "алгоритм 2", "is_off": 0, "edit_time": "2026-02-03T14:05:27", "edit_user_id": 1 }, { "id": 3, "name": "алгоритм 3", "is_off": 0, "settings": { "name": "settings 3" }, "edit_time": "2026-02-03T14:05:27", "edit_user_id": 1 } ], "users": [ { "id": 1, "username": "Администратор" } ], "infoCode": 0 }

Создать алгоритмы истории

запрос: entek/api/config/history_algo/create

Запрос только для проектов версии 2

Запрос для создания алгоритмов. В теле запроса передается вся информация об алгоритме. При успешном запросе ответ содержит параметр infoCode равный 0 и id новой записи, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "алгоритм 1", "is_off": 1, "settings": { "name": "settings" } }

Пример ответа:

{ "infoCode": 0, "id": 2 }

Изменить алгоритмы истории

запрос: entek/api/config/history_algo/update

Запрос только для проектов версии 2

Запрос для изменения алгоритмов. В теле запроса передается вся информация об алгоритме, все поля перезаписываются. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2, "name": "алгоритм 1 new", "is_off": 0, "settings": { "name": "settings new" } }

Пример ответа:

{ "infoCode": 0 }

Удалить алгоритмы истории

запрос: entek/api/config/history_algo/delete

Запрос только для проектов версии 2

Запрос удаления алгоритмов. В теле запроса передается идентификатор алгоритма для дальнейшего удаления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2 }

Пример ответа:

{ "infoCode": 0 }

Алгоритмы алармов

Получить алгоритмы алармов

запрос: entek/api/config/alarm_algo/get

Запрос только для проектов версии 2

Запрос для получния алгоритмов хранения алармов, для получения конкретного алгоритма в параметрах запроса передается id с его идентификатором. Ответ содержит массив алгоритмов и массив пользователей. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "alarm_algos": [ { "id": 1, "name": "алгоритм 1", "is_off": 0, "edit_time": "2026-02-04T11:18:26", "edit_user_id": 1 }, { "id": 2, "name": "алгоритм 2 new", "is_off": 1, "edit_time": "2026-02-04T11:20:32", "edit_user_id": 1 } ], "users": [ { "id": 1, "username": "Администратор" } ], "infoCode": 0 }

Создать алгоритмы алармов

запрос: entek/api/config/alarm_algo/create

Запрос только для проектов версии 2

Запрос для создания алгоритмов. В теле запроса передается информация об алгоритме. При успешном запросе ответ содержит параметр infoCode равный 0 и id новой записи, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "алгоритм 2", "is_off": 0, "settings": { "name": "settings" } }

Пример ответа:

{ "id": 1, "infoCode": 0 }

Изменить алгоритмы алармов

запрос: entek/api/config/alarm_algo/update

Запрос только для проектов версии 2

Запрос для изменения алгоритмов. В теле запроса передается информация об алгоритме, все поля перезаписываются. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2, "name": "алгоритм 2 new", "is_off": 1, "settings": { "name": "settings" } }

Пример ответа:

{ "infoCode": 0 }

Удалить алгоритмы алармов

запрос: entek/api/config/alarm_algo/delete

Запрос только для проектов версии 2

Запрос удаления алгоритмов. В теле запроса передается идентификатор алгоритма для дальнейшего удаления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Пример ответа:

{ "infoCode": 0 }

События

Получить категории и группы событий

запрос: entek/api/config/events/get_tree

Запрос только для проектов версии 2

Запрос получения категорий и групп событий, в ответе передается в виде дерева информация о каждой категории и входящие в нее группы. Группы без категорий передаются в массиве uncategorized_groups. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "categories": [ { "id": 1, "name": "Алармы", "description": "", "index_num": 1, "bk_color": "#050000", "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000", "groups": [ { "id": 1, "name": "ALARMSHIGH", "description": "Алармы высокого приоритета", "index_num": 1, "storage_depth": 0, "bk_color": "#ff0000", "not_write": 0, "font_italic": 0, "font_bold": 1, "font_underline": 0, "font_color": "#ffff00", "category_id": 1 }, { "id": 2, "name": "ALARMSMEDIUMHIGH", "description": "Алармы повышенного приоритета", "index_num": 2, "storage_depth": 0, "bk_color": "#ff8080", "not_write": 0, "font_italic": 0, "font_bold": 1, "font_underline": 0, "font_color": "#080000", "category_id": 1 } ] }, { "id": 2, "name": "Сообщения", "description": "", "index_num": 2, "bk_color": "#050000", "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000", "groups": [ { "id": 6, "name": "MESSAGESHIGH", "description": "Сообщения высокого приоритета", "index_num": 1, "storage_depth": 0, "bk_color": "#050000", "not_write": 0, "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000", "category_id": 2 } ] } ], "uncategorized_groups": [ { "id": 45, "name": "REST_EVENTS", "description": "События REST API", "index_num": 0, "storage_depth": 0, "bk_color": "", "not_write": 0, "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "", "category_id": 0 } ], "infoCode": 0 }

Создать категорию

запрос: entek/api/config/events/category/create

Запрос только для проектов версии 2

Запрос создания категории событий. В теле запроса передается информация о новой категории событий, index_num необходимо контролировать вручную. При успешном запросе ответ содержит id новой записи и параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "Тест", "description": "", "index_num": 8, "bk_color": "#050000", "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000" }

Пример ответа:

{ "id": 8, "infoCode": 0 }

Обновить категорию

запрос: entek/api/config/events/category/update

Запрос только для проектов версии 2

Запрос обновления записи категории. В теле запроса передается вся информация о категории, все поля записи обновляются. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 8, "name": "Тест updated", "description": "", "index_num": 8, "bk_color": "#050000", "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000" }

Пример ответа:

{ "infoCode": 0 }

Удалить категорию

запрос: entek/api/config/events/category/delete

Запрос только для проектов версии 2

Запрос удаления категории. В теле запроса идентификатор категории для дальнейшего удаления, также удаляются все группы категории. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Для удаления всех групп без категории необходимо передать id равный 0.

Пример запроса:

{ "id": 1 }

Пример ответа:

{ "infoCode": 0 }

Создать группу

запрос: entek/api/config/events/group/create

Запрос только для проектов версии 2

Запрос создания группы событий. В теле запроса передается информация о новой группе событий, index_num необходимо контролировать вручную. При успешном запросе ответ содержит id новой записи и параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Для создания группы без категории необходимо указать category_id равный 0.

Пример запроса:

{ "name": "Тест", "description": "", "index_num": 8, "bk_color": "#050000", "not_write": 0, "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000", "category_id": 12 }

Пример ответа:

{ "id": 46, "infoCode": 0 }

Обновить группу

запрос: entek/api/config/events/group/update

Запрос только для проектов версии 2

Запрос обновления записи группы. В теле запроса передается вся информация о группе, все поля записи обновляются. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 46, "name": "Тест updated", "description": "", "index_num": 8, "bk_color": "#050000", "not_write": 0, "font_italic": 0, "font_bold": 0, "font_underline": 0, "font_color": "#080000", "category_id": 12 }

Пример ответа:

{ "infoCode": 0 }

Удалить группу

запрос: entek/api/config/events/group/delete

Запрос только для проектов версии 2

Запрос удаления группы. В теле запроса идентификатор группы для дальнейшего удаления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Пример ответа:

{ "infoCode": 0 }

Получить псевдонимы

запрос: entek/api/config/alias/get

Запрос только для проектов версии 2

Запрос получения списка псевдонимов. В ответе передается массив aliases. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "aliases": [ { "id": 1, "alias": "Оператор включил режим", "source_val": "MODE_ON" }, { "id": 2, "alias": "Оператор выключил режим", "source_val": "MODE_OFF" } ], "infoCode": 0 }

Создать псевдоним

запрос: entek/api/config/alias/create

Запрос только для проектов версии 2

Запрос создания псевдонима события. В теле запроса передаются поля alias и source_val новой записи. При успешном запросе ответ содержит id новой записи и параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "alias": "Переход на резервную линию", "source_val": "RESERVE_LINE_ON" }

Пример ответа:

{ "id": 15, "infoCode": 0 }

Обновить псевдоним

запрос: entek/api/config/alias/update

Запрос только для проектов версии 2

Запрос обновления записи псевдонима. В теле запроса передается идентификатор и все поля записи. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 15, "alias": "Переход на резервную линию подтвержден", "source_val": "RESERVE_LINE_ON" }

Пример ответа:

{ "infoCode": 0 }

Удалить псевдоним

запрос: entek/api/config/alias/delete

Запрос только для проектов версии 2

Запрос удаления псевдонима. В теле запроса передается идентификатор записи для дальнейшего удаления. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 15 }

Пример ответа:

{ "infoCode": 0 }

Обновить порядок категорий и групп

запрос: entek/api/config/events/update_index?<параметр>=<значение>

Запрос только для проектов версии 2

Запрос обновления порядка категорий или групп событий. Для выбора типа обновления необходимо передать query-параметр:

При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Формат тела запроса для type=category массив объектов с полями id и index_num.

Пример запроса category:

[ { "id": 1, "index_num": 2 }, { "id": 2, "index_num": 1 } ]

Формат тела запроса для type=group объект с полями category_id и groups (массив объектов с полями id и index_num).

Пример запроса group (рекомендуемый):

{ "category_id": 12, "groups": [ { "id": 46, "index_num": 1 }, { "id": 47, "index_num": 2 } ] }

Пример ответа:

{ "infoCode": 0 }

Конфигурации БД

Получение списка конфигураций БД

запрос: entek/api/config/db/get

Запрос только для проектов версии 2

Запрос возвращает список конфигураций внешних баз данных в массиве dbs. При необходимости можно передать фильтр по идентификатору станции в параметрах запроса в переменной stId. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "dbs": [ { "id": 1, "guid": "", "name": "БД событий", "comments": "Основная БД событий", "db_type": 3, "sudb_type": 1, "db_version": 1, "db_filename": "events.fdb", "db_user": "", "db_password": "", "db_settings": { "use_short_db": 1 }, "save_period": 30, "station_id": 1 } ], "infoCode": 0 }

Создать конфигурацию БД

запрос: entek/api/config/db/create

Запрос только для проектов версии 2

Запрос добавляет новую конфигурацию базы данных. В теле запроса передаются параметры конфигурации. В ответе возвращается созданный id. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "guid": "", "name": "Тестовая БД", "comments": "Добавлена через REST API", "db_type": 2, "sudb_type": 1, "db_version": 1, "db_filename": "test.fdb", "db_user": "", "db_password": "", "db_settings": { "use_short_db": 1 }, "save_period": 7, "station_id": 1 }

Пример ответа:

{ "id": 15, "infoCode": 0 }

Обновить конфигурацию БД

запрос: entek/api/config/db/update

Запрос только для проектов версии 2

Запрос обновляет существующую конфигурацию базы данных. В теле запроса обязательно должен присутствовать id. Если конфигурация с переданным id не найдена, ответ содержит ошибку. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Поля db_type при обновлении не изменяются.

Пример запроса:

{ "id": 15, "guid": "", "name": "Тестовая БД (обновлено)", "comments": "Обновление через REST API", "db_version": 2, "db_filename": "test_new.fdb", "db_user": "", "db_password": "", "db_settings": { "use_short_db": 1 }, "save_period": 10, "station_id": 1 }

Пример ответа:

{ "infoCode": 0 }

Удалить конфигурацию БД

запрос: entek/api/config/db/delete

Запрос только для проектов версии 2

Запрос удаляет конфигурацию базы данных. В теле запроса передается id удаляемой конфигурации. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Удаление конфигурации БД событий (при db_type = 3) запрещено.

Пример запроса:

{ "id": 15 }

Пример ответа:

{ "infoCode": 0 }

Создать файл БД

запрос: entek/api/config/db_file/create

Запрос только для проектов версии 2

Запрос создает новый файл базы данных. В теле запроса передаются параметры подключения, тип БД и СУБД. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Тело запроса:

Пример запроса:

{ "db_file": "C:/ENTEK/db/events_new.fdb", "db_user": "user", "db_password": "password", "db_type": 3, "sudb_type": 1 }

Пример ответа:

{ "infoCode": 0 }

Проверить доступность файла БД

запрос: entek/api/config/db_file/check

Запрос только для проектов версии 2

Запрос проверяет доступность файла базы данных и корректность параметров подключения. В теле запроса передаются параметры подключения и тип СУБД. При успешной проверке ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "db_file": "C:/ENTEK/db/events.fdb", "db_user": "user", "db_password": "password", "sudb_type": 1 }

Пример ответа:

{ "infoCode": 0 }

Удалить файл БД

запрос: entek/api/config/db_file/delete

Запрос только для проектов версии 2

Запрос удаляет файл базы данных. В теле запроса передаются параметры подключения и тип СУБД. При успешном удалении ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "db_file": "C:/ENTEK/db/events_test.fdb", "db_user": "user", "db_password": "password", "sudb_type": 1 }

Пример ответа:

{ "infoCode": 0 }

Получить информацию о файле БД

запрос: entek/api/config/db_file/info

Запрос только для проектов версии 2

Запрос возвращает информацию о состоянии таблиц базы данных. Тело запроса имеет тот же формат, что и для запроса создания файла БД. При успешном запросе дополнительно возвращаются:

Если получить информацию не удалось, ответ содержит infoCode = 1 и параметр infoString с описанием ошибки.

Пример запроса:

{ "db_file": "C:/ENTEK/db/events.fdb", "db_user": "user", "db_password": "password", "db_type": 3, "sudb_type": 1 }

Пример ответа:

{ "table_count": 125, "total_records": 348920, "infoCode": 0 }

Ретрансляция

Запросы для конфигурирования ретрансляции доступны только для пользователей с правами администратора.

Получение конфигурации мастера ретрансляции

запрос: /entek/api/config/retransmit/pu/get

Запрос только для проектов версии 2

Запрос возвращает список всех ПУ (мастеров) ретрансляции. Адреса ips могут передваться следующим образом: один адрес, перечисление адресов с разделением ,, диапазон адресов 192.168.1.10-192.168.1.20. Также возможен фильтр по станции, для этого необходимо передать в параметрах запроса идентификатор станции в базе данныех в переменной stId. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "retransmit_pus": [ { "id": 1, "name": "Master 1", "station_id": 2, "ips": "192.168.1.10", "port": 2404, "start_addr": 1, "k_coef": 12, "w_coef": 8, "t0": 30, "t1": 15, "t2": 10, "t3": 20, "common_asdu_addr": 1, "time_sync": 1, "time_sync_delta": 0, "read_only": 0, "ssd_processing": 1, "is_opcua_srv": 0, "retransmit_conn_lost": 0 } ], "infoCode": 0 }

Добавление конфигурации мастера ретрансляции

запрос: /entek/api/config/retransmit/pu/create

Запрос только для проектов версии 2

Запрос добавляет ПУ (мастер) ретрансляции. Параметры передаются в теле запроса в формате JSON. В ответе возвращается id новой записи. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "name": "New Master", "station_id": 2, "ips": "192.168.1.11", "port": 2404, "start_addr": 1, "k_coef": 12, "w_coef": 8, "t0": 30, "t1": 15, "t2": 10, "t3": 20, "common_asdu_addr": 1, "time_sync": 1, "time_sync_delta": 0, "read_only": 0, "ssd_processing": 1, "is_opcua_srv": 0, "retransmit_conn_lost": 0 }

Пример ответа:

{ "id": 1 }

Изменение конфигурации мастера ретрансляции

запрос: /entek/api/config/retransmit/pu/update

Запрос только для проектов версии 2

Запрос изменяет параметры ПУ (мастера) ретрансляции. Параметры передаются в теле запроса в формате JSON. Обязательно наличие идентификатора id. При обновление переписываются все поля. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1, "name": "New Master", "station_id": 2, "ips": "192.168.1.11", "port": 2404, "start_addr": 1, "k_coef": 12, "w_coef": 8, "t0": 30, "t1": 15, "t2": 10, "t3": 20, "common_asdu_addr": 1, "time_sync": 1, "time_sync_delta": 0, "read_only": 0, "ssd_processing": 1, "is_opcua_srv": 0, "retransmit_conn_lost": 0 }

Удаление конфигурации мастера ретрансляции

запрос: /entek/api/config/retransmit/pu/delete

Запрос только для проектов версии 2

Запрос удаляет ПУ (мастер) ретрансляции. В теле запроса передается идентификатор id. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Получение групп ретрансляции

запрос: /entek/api/config/retransmit/group/get

Запрос только для проектов версии 2

Запрос возвращает список групп мастера ретрансляции. В параметрах запроса обязательно должен присутствовать puId, соответствующий id мастера ретрансляции, или ctrlId (id контроллера), или stId (id станции). При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "retransmit_groups": [ { "id": 1, "pu_id": 1, "ctrl_id": 101, "caa": 1 } ], "infoCode": 0 }

Добавление группы ретрансляции

запрос: /entek/api/config/retransmit/group/create

Запрос только для проектов версии 2

Запрос добавляет группу ретрансляции. Параметры передаются в теле запроса в формате JSON. В ответе возвращается id новой записи. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "pu_id": 1, "ctrl_id": 102, "caa": 2 }

Пример ответа:

{ "id": 1 }

Изменение группы ретрансляции

запрос: /entek/api/config/retransmit/group/update

Запрос только для проектов версии 2

Запрос изменяет параметры группы ретрансляции. Параметры передаются в теле запроса в формате JSON. Обязательно наличие идентификатора id. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 2041, "pu_id": 1, "ctrl_id": 102, "caa": 3 }

Удаление группы ретрансляции

запрос: /entek/api/config/retransmit/group/delete

Запрос только для проектов версии 2

Запрос удаляет группу ретрансляции. В теле запроса передается идентификатор id. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Получение параметров ретрансляции

запрос: /entek/api/config/retransmit/params/get

Запрос только для проектов версии 2

Запрос возвращает список параметров ретрансляции группы. В параметрах запроса необходимо передать groupId соответсующий id группы ретрансляции. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "retransmit_params": [ { "id": 1, "group_id": 1, "param_sysaddr": 1001, "retransmit_addr": 16385 } ], "infoCode": 0 }

Добавление параметра ретрансляции

запрос: /entek/api/config/retransmit/params/create

Запрос только для проектов версии 2

Запрос добавляет параметр ретрансляции. Параметры передаются в теле запроса в формате JSON. В ответе возвращается id новой записи. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "group_id": 1, "param_sysaddr": 1002, "retransmit_addr": 16386 }

Пример ответа:

{ "id": 1 }

Изменение параметра ретрансляции

запрос: /entek/api/config/retransmit/params/update

Запрос только для проектов версии 2

Запрос изменяет параметр ретрансляции. Параметры передаются в теле запроса в формате JSON. Обязательно наличие идентификатора id. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 41779, "group_id": 1, "param_sysaddr": 101, "retransmit_addr": 501 }

Удаление параметра ретрансляции

запрос: /entek/api/config/retransmit/params/delete

Запрос только для проектов версии 2

Запрос удаляет параметр ретрансляции. В теле запроса передается идентификатор id. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример запроса:

{ "id": 1 }

Настройки мнемосхем

Получение списка мнемосхем

запрос: /entek/api/config/mnemo/get_list

Запрос только для проектов версии 2

Запрос возвращает список всех мнемосхем. При успешном запросе ответ содержит параметр infoCode равный 0, иначе - 1 и присутствует параметр infoString с описанием ошибки.

Пример ответа:

{ "mnemos": [ { "id": 1, "guid": "21D1D68D-86F4-4F69-B254-543D215FF6C4", "name": "Главная", "auto_load": 1, "mnemo_type": 0, "is_dialog": 0, "show_in_web": 1, "is_check_users": 0, "mnemo_version": 1, "description": "Основная мнемосхема объекта", "is_edit": 1, "edit_user": "admin", "last_save_user": "admin", "last_save_time": "2023-10-27T10:00:00" } ], "infoCode": 0 }

Создание мнемосхемы

запрос: /entek/api/config/mnemo/create

Запрос только для проектов версии 2

Запрос создает новую запись о мнемосхеме в базе данных. Параметры передаются в теле запроса в формате JSON. При успешном запросе ответ содержит идентификатор созданной записи id и параметр infoCode равный 0.

Пример запроса:

{ "guid": "{399B6F3C-A19F-4B1C-B6A5-D6A8E4C7B1E4}", "name": "Новая мнемосхема", "auto_load": 0, "mnemo_type": 0, "is_dialog": 0, "show_in_web": 0, "is_check_users": 0, "description": "" }

Пример ответа:

{ "id": 26, "infoCode": 0 }

Обновление мнемосхемы

запрос: /entek/api/config/mnemo/update

Запрос только для проектов версии 2

Запрос обновляет существующей мнемосхемы по её идентификатору. Тело запроса должно содержать идентификатор id.

Пример запроса:

{ "id": 10, "guid": "{399B6F3C-A19F-4B1C-B6A5-D6A8E4C7B1E4}", "name": "Обновленная мнемосхема", "auto_load": 1, "is_dialog": 0, "show_in_web": 1, "is_check_users": 0, "description": "Измененное описание" }

Удаление мнемосхемы

запрос: /entek/api/config/mnemo/delete

Запрос только для проектов версии 2

Запрос удаляет запись о мнемосхеме из базы данных. Идентификатор удаляемой записи передается в теле запроса.

Пример запроса:

{ "id": 10 }

Получение XML-файла мнемосхемы

запрос: /entek/api/config/mnemo/settings/get

Запрос только для проектов версии 2

Запрос предназначен для скачивания XML-файла описания мнемосхемы. GUID мнемосхемы передается в теле запроса. Для установки признака того, что мнемосхема находится в режиме редактирования, в строке запроса необходимо передать параметр edit, чтобы снять этот признак необходимо выполнить запрос сохранения XML-файла мнемосхемы.

Пример запроса:

{ "guid": "{21D1D68D-86F4-4F69-B254-543D215FF6C4}" }

Сохранение XML-файла мнемосхемы

запрос: /entek/api/config/mnemo/settings/commit

Запрос только для проектов версии 2

Запрос сохраняет XML-файл описания мнемосхемы на сервере. В параметрах запроса необходимо передать guid. Тело запроса должно содержать данные файла. При успешном сохранении версия мнемосхемы в БД увеличивается на 1, а флаг редактирования сбрасывается.


Получение файла параметров мнемосхемы

запрос: /entek/api/config/mnemo/params/get

Запрос только для проектов версии 2

Запрос предназначен для скачивания файла параметров мнемосхемы (.param). GUID мнемосхемы передается в теле запроса.

Пример запроса:

{ "guid": "{21D1D68D-86F4-4F69-B254-543D215FF6C4}" }

Сохранение файла параметров мнемосхемы

запрос: /entek/api/config/mnemo/params/commit

Запрос только для проектов версии 2

Запрос сохраняет файл параметров мнемосхемы (.param) на сервере. В строке запроса обязателен параметр guid. Тело запроса должно содержать бинарные данные файла.


HTML формы справочников и интеграция с NGW

Для интеграции с сервисом NGW необходимо добавить конфигурационный файл ngwConfig.json в корень проекта в папку Dispatcher. Данные используются для синхронизации данных между базой данных проекта SCADA-ЭНТЕК и сервисом NGW, а также для отображения HTML форм.

Файл содержит следующие настройки:

Настройки журналов состоят из следующих полей:

{ "ngwUrl": "", "ngwUser": "", "ngwPassword": "", "attrTableWidth": 300, "valTableWidth": 400, "journals": [ { "info": "Объекты", "jrnlId": 49, "gisIdFieldId": 193, "objectNameFieldId": 1, "ngwWebMapId": 20, "ngwLayerId": 185, "ngwGisIdFieldName": "sid", "ngwDispLinkField": "surl" } ] }

Список журналов из конфигурационного файла NGW

запрос: entek/api/ngw/config

Запрос возвращает HTML страницу со списком журналов (идентификатор и название), указанных в конфигурационном файле, а также их общее количество.


Настройки журналов из конфигурационного файла NGW

запрос: entek/api/ngw/journal/<journalId>

Запрос передается с идентификатором журнала и возвращает HTML страницу, которая отображает название журнала и таблицу с настройками из ngwConfig.json файла.


Запись ссылок в объекты NGW на страницы из БД

запрос: entek/api/ngw/sync/<journalId>

Запрос передается с идентификатором журнала. В процессе работы обновляются записи в NGW, добавляя к ним ссылки на информацию о записях в базе данных. По ходу выполнения будет отображаться результат синхронизации.


Страница с информацией о записи из базы данных

запрос: entek/api/dsp/<docId>/<objectId>

Запрос передается с идентификатором журнала и идентификатором объекта. Возвращает HTML страницу, которая отображает название записи и таблицу со всеми атрибутами и их значениями. А также ссылки на список зависимостей в других журналах и список файлов доступных к загрузке.

Для запроса по уникальному полю вместо objectId необходимо указать unique_field, а затем в параметрах запроса передать значение поля в переменной value. Поле, по которому будет производиться поиск, указывается в переменной gisIdFieldId в настройках журнала в конфигурационном файле ngwConfig.json. Значения уникальных полей не должны содержать кириллицы. Пример запроса: entek/api/dsp/<docId>/unique_field?value=<value>


Список ссылок записи журнала на записи из другого журнала

запрос: entek/api/ngw/multilinks/<objectId>/<refToField>

Запрос передается идентификатором журнала и идентификатором на ссылаемое поле. Возвращает HTML страницу, которая отображает список связанных записей и название журнала, к которому они относятся.


Скачать документ прикрепленный к записи журнала

запрос: entek/api/ngw/download/<fileId>

Запрос передается идентификатором файла и возвращает файл в байтовом предоставлении.


Формирование отчетов HTML

запрос: /entek/api/report/history

Запрос предназначен для формирования отчетов в фромате html из шаблона. Запрос должен содержать обязательные параметры запроса:

Шаблоны необходимо разместить в корне проекта в папке /reports/templates/

Шаблон должен быть валидным xml файлом, т.е. все открывающие ноды должны быть закрыты. Генерация данных происходит в элементе таблицы, вне этого элемента доступны параметры:

Их можно указать подставив в текст, например {@timeGen}.

<br>Report interval from {@timeStart} to {@timeEnd}</br>

Таблица должна содержать два элемента thead для заголовка таблицы и tbody для тела, в котором будут генерироваться данные, также есть обязательный блок scada с настройками таблицы. В ноде scada указываются параметры, которые будут запрашиваться в базе данных, а также тип отчета, шаг, с которым отображаются данные, количество знаков после запятой, количество строк и режим сортировки.

Атрибуты доступные для ноды scada:

Внутри ноды scada перечисляются параметры в нодах value с обязательными атрибутами name - пользовательское наименование переменной, которое будет подставляться в теле таблицы; addr - код параметра для запросов к базе данных для запроса истории или код поля событий для запроса событий. Также при запросе истории для параметров опционально можно задать доступные алгоритмы для обработки данных (sum - сумма, average-sum - среднее значение), для них предусмотрен атрибут algorithm, в котором можно перечислить, разделяя строго только запятой, все нобходимые алгоритмы для каждого параметра. Для запроса событий можно задать группы событий в ноде groups, перечисляя их через символ ';', группы должны быть указаны в верхнем регистре. А также можно указать станции и контроллеры для поиска событий в ноде controllers, id контроллеров указываются числом в значении ноды, а станции в ее атрибуте stId.

Пример перечисления групп событий

<groups>DASERVERGROUP;STARTSTOPGROUP</group>

Пример перечисления контроллеров и станции

<controllers stId="0;1">0;1</controllers>

Пример ноды scada:

<scada type="values" step="1m" decimal="3"> <value name="V1P" addr="EnLogic.St0.T222.Grp0.Id91"></value> <value name="V1Q" addr="EnLogic.St0.T222.Grp0.Id92" algorithm="sum,average-sum"></value> <value name="V1I" addr="EnLogic.St0.T222.Grp0.Id93" algorithm="average-sum"></value> </scada>

Допустимые коды полей событий:

имя параметра описание
group_name название группы событий
client_id ip-адресс клиента
event_time временная метка события
event_text текст события
event_number номер события
event_type тип события
comment комментарий
user имя пользователя
station_id id станции
group_id id контроллера
passp_type тип параметра
passp_id id параметра
passp_time временная метка значения
passp_val значение параметра
alarm_priority приоритет
alarm_ack квитирование аларма
alarm_ack_user пользователь, заквитировавший аларм
alarm_ack_time время квитирования
alarm_end_time время окончания аларма
alarm_set_val значение аларма

Внутри ноды tbody в ноде tr с атрибутом gen="true" указываются параметры, которые будут генерироваться. Параметры указываются в фигурных скобках и перед пользовательским названием ставится символ @ (Пример: {@V1P}). Также достуны функция формирования метки интервала, для этого указывается переменная timestamp, а через точку указывается тип временной метки Date - для даты, Time - для времени, если ничего не указать то формат будет содержать дату и время, а для временной метки событий необходимо использовать поле event_time, которое перед этим необходимо указать в ноде value в секции scada. Функция genNum предназначена для подстановки номера строки таблицы.

А для вызова результата алгоритма в таблице надо указать его название из атрибута name и через точку указать название алгоритма (доступно только для статических строк без атрибута gen="true").

Пример ноды tbody:

<tbody> <tr gen="true"> <td>{@timestamp.Date}</td> <td>{@timestamp.Time}</td> <td>{@V1P}</td> <td>{@V1Q}</td> <td>{@V1I}</td> </tr> </tbody>

Пример использования алгоритма в сроке таблицы:

<tr> <td>Average</td> <td></td> <td></td> <td>{@V1Q.average-sum}</td> <td>{@V1I.average-sum}</td> </tr>

Пример полного шаблона отчета истории:

<html> <body> <br>SCADA report</br> <br>from {@timeStart} to {@timeEnd}</br> <table id="table1" cols="23" border="1" cellspacing="0" cellpadding="2" width="100%%"> <scada type="values" step="1m" decimal="3"> <value name="V1P" addr="EnLogic.St0.T222.Grp0.Id91"></value> <value name="V1Q" addr="EnLogic.St0.T222.Grp0.Id92" algorithm="sum,average-sum"></value> <value name="V1I" addr="EnLogic.St0.T222.Grp0.Id93" algorithm="average-sum"></value> </scada> <thead> <tr align="center"> <th>Num</th> <th>Date</th> <th>Time</th> <th>Q, kVA</th> <th>I, A</th> </tr> </thead> <tbody> <tr gen="true"> <td>{@genNum}</td> <td>{@timestamp.Date}</td> <td>{@timestamp.Time}</td> <td>{@V1P}</td> <td>{@V1Q}</td> <td>{@V1I}</td> </tr> <tr> <td>Total</td> <td></td> <td></td> <td>{@V1Q.sum}</td> <td></td> </tr> <tr> <td>Average</td> <td></td> <td></td> <td>{@V1Q.average-sum}</td> <td>{@V1I.average-sum}</td> </tr> </tbody> </table> </body> </html>

Пример полного шаблона отчета событий:

<html> <body> <br>SCADA report</br> <br>from {@timeStart} to {@timeEnd}</br> <table id="table1" cols="23" border="1" cellspacing="0" cellpadding="2" width="100%%"> <scada type="events" sort="desc" dataCount="100" lastData="1" useColors="1"> <groups>DASERVERGROUP;STARTSTOPGROUP</groups> <controllers stId="0">0;1</controllers> <value name="group_name" addr="group_name"></value> <value name="client_id" addr="client_id"></value> <value name="event_time" addr="event_time"></value> <value name="event_text" addr="event_text"></value> <value name="comment" addr="comment"></value> <value name="station_id" addr="station_id"></value> <value name="group_id" addr="group_id"></value> <value name="passp_type" addr="passp_type"></value> </scada> <thead> <tr align="center"> <th>Num</th> <th>Date</th> <th>Group</th> <th>Client</th> <th>Event</th> <th>Comment</th> <th>Station</th> <th>controller</th> <th>Passp type</th> </tr> </thead> <tbody> <tr gen="true"> <td>{@genNum}</td> <td>{@event_time}</td> <td>{@group_name}</td> <td>{@client_id}</td> <td>{@event_text}</td> <td>{@comment}</td> <td>{@station_id}</td> <td>{@group_id}</td> <td>{@passp_type}</td> </tr> </tbody> </table> </body> </html> ---