Перейти к содержанию

Конечные точки

Примечание

В данном разделе для описания примеров с HTTPS-запросами к конечным точкам API используется расширение REST Client для VSCode.

Сервер

Аутентификация

POST /api/login

Данный запрос требуется для получения токена.

Тело запроса:

Параметр Тип данных Описание
username
string
Имя пользователя учетной записи
password
string
Пароль учетной записи

Тело ответа:

Параметр Тип данных Описание
code
number
Код ответа
expire
string
Время действия токена в формате RFC3339
token
string
Токен доступа к системе
POST /api/login
@host = https://127.0.0.1:8080
@login = admin
@password = admin

###
POST {{host}}/api/login/?username={{login}}&password={{password}}
POST /api/login
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Set-Cookie:token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Path=/; Max-Age=3600; Secure; SameSite=None
Date: Tue, 14 Jul 2026 11:12:18 GMT
Content-Length: 349
Connection: close

{
    "code": 200,
    "expire": "2026-07-14T15:12:18+03:00",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Обновление токена

GET /auth/token

Данный запрос необходимо выполнять периодически для обновления выданного токена.

Тело ответа:

Параметр Тип данных Описание
code
number
Код ответа
expire
string
Время действия токена в формате RFC3339
token
string
Токен доступа к системе
GET /auth/refresh_token
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/auth/refresh_token
Authorization: Bearer {{access_token}}
GET /auth/refresh_token
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Set-Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Path=/; Max-Age=3600; Secure; SameSite=None
Date: Wed, 15 Jul 2026 17:17:58 GMT
Content-Length: 349
Connection: close

{
  "code": 200,
  "expire": "2026-07-15T21:17:58+03:00",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

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

GET /api/server/info

Получение данных о необходимости аутентификации на сервере и статусе его работы.

Тело ответа:

Параметр Тип данных Описание
authRequired
boolean
Статус аутентификации (TRUE — требуется, FALSE — не требуется)
status
string
Статус сервера
GET /api/server/info
@host = https://127.0.0.1:8080

###
GET {{host}}/api/server/info
GET /api/server/info
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Date: Tue, 14 Jul 2026 12:13:52 GMT
Content-Length: 35
Connection: close

{
  "authRequired": true,
  "status": "ok"
}

Паспорта

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

Получение всех паспортов

GET /api/v2/passports

Тело ответа:

Параметр Тип данных Описание
passport
array
Массив структур паспортов

Структура passport:

Параметр Тип данных Описание
eventCatID
int64
Уникальный идентификатор категории событий тега
name
string
Имя тега
ID
string
Уникальный идентификатор тега
readable
boolean
Флаг возможности чтения тега
saveDB
boolean
Флаг активности сохранения в базу данных
saveStrategy
enum SaveStrategy
Стратегия сохранения значения в базе данных
sourceType
string
Тип источника значения тега
type
enum ValueType
Тип значения тега
variableFormat
int32
Количествово знаков после запятой
visible
boolean
Флаг видимости тега в таблице тегов в меню клиента
writable
boolean
Флаг доступа тега на запись
scale
Scale
Шкала тега
customMessages
CustomMessages
Шаблоны сообщений для различных видов событий

Структура scale:

Параметр Тип данных Описание
alarmDelay
int32
Задержка сигнала тревоги (в тактах опроса значение -1 означает отсутствие тревоги)
highScale
double
Максимальное значение диапазона шкалы тега
lowScale
double
Минимальное значение диапазона шкалы тега
hiHiAlarm
double
Верхнее уставка аварийного события
hiHiAlarmEnabled
boolean
Флаг активации аварийной сигнализации верхней уставки
hiAlarm
double
Верхняя уставка предупредительного события
hiAlarmEnabled
boolean
Флаг активации предупредительной сигнализации верхней уставки
loAlarm
double
Нижнее уставка предупредительного события
loAlarmEnabled
boolean
Флаг активации предупредительной сигнализации нижней уставки
loLoAlarm
double
Нижнея уставка аварийного события
loLoAlarmEnabled
boolean
Флаг активации аварийной сигнализации нижней уставки
trackDiscreteOn
boolean
Контроль состояния "Вкл"
trackDiscreteOff
boolean
Контроль состояния "Выкл"
units
string
Единицы измерения

Структура СustomMessages:

Параметр Тип данных Описание
enabled
boolean
Флаг активации механизма пользовательских сообщений для данного тега
badQuality
string
Сообщение, выводимое при установлении статуса "Плохое качество" тега
discreteOn
string
Сообщение, соответствующее состоянию "Вкл"
discreteOff
string
Сообщение, соответствующее логическому состоянию "Выкл"
hiHiAlarm
string
Сообщение о срабатывании аварийной верхней уставки
hiAlarm
string
Сообщение о срабатывании предупредительной верхней уставки
normal
string
Сообщение о возврате значения тега в нормальный диапазон
loAlarm
string
Сообщение о срабатывании предупредительной нижней уставки
loLoAlarm
string
Сообщение о срабатывании аварийной нижней уставки

Перечисление ValueType:

Значение Описание
int64
Знаковое целое число размером 64 бит
uint64
Беззнаковое целое число размером 64 бит
double
Число с плавающей запятой двойной точности размером 64 бит
datetime
Момент времени, представленный в формате RFC3339
string
Строка символов в кодировке UTF-8
boolean
Логическое значение, принимающее одно из двух состояний: true или false
float
Число с плавающей запятой одинарной точности размером 32 бит
int8
Знаковое целое число размером 8 бит
int16
Знаковое целое число размером 16 бит
int32
Знаковое целое число размером 32 бита
uint8
Беззнаковое целое число размером 8 бит
uint16
Беззнаковое целое число размером 16 бит
uint32
Беззнаковое целое число размером 32 бит

Перечисление SaveStrategy:

Значение Описание
0
Запись по таймеру
1
Запись по изменению
2
Смешанная запись
GET /api/v2/passports
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/api/v2/passports
Authorization: Bearer {{access_token}}
GET /api/v2/passports
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 15 Jul 2026 13:13:02 GMT
Content-Length: 1010
Connection: close

[
  {
    "eventCatID": 0,
    "group": "",
    "name": "Counter",
    "persistByScript": false,
    "readable": true,
    "saveDB": true,
    "saveStrategy": 1,
    "sourceType": "virtual",
    "type": "double",
    "variableFormat": 2,
    "visible": true,
    "writable": true,
    "ID": 1,
    "scale": {
      "alarmDelay": 0,
      "highScale": 100,
      "lowScale": 0,
      "hiHiAlarm": 100,
      "hiHiAlarmEnabled": true,
      "hiAlarm": 80,
      "hiAlarmEnabled": false,
      "loAlarm": 20,
      "loAlarmEnabled": false,
      "loLoAlarm": 0,
      "loLoAlarmEnabled": true,
      "trackDiscreteOn": true,
      "trackDiscreteOff": false,
      "units": ""
    },
    "customMessages": {
      "enabled": true,
      "loLoAlarm": "Значение ниже нижней аварийной уставки",
      "loAlarm": "Значение ниже нижней предупредительной уставки",
      "normal": "Значение в нормальном диапазоне",
      "hiAlarm": "Значение выше верхней предупредительной уставки",
      "hiHiAlarm": "Значение выше верхней аварийной уставки",
      "badQuality": "",
      "discreteOn": "",
      "discreteOff": ""
    }
  }
]

Получение паспортов по ID тегов

GET /api/v2/passports/{ids}

Запрос на получение паспортов по идентификатору тега ID. Идентификаторы тегов в запросе перечисляются через запятую.

При ответе содержит массив passport:

Параметр Тип данных Описание
results
Passport[]
Массив объектов типа Passport
GET /api/v2/passports/{ids}
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/api/v2/passports/1,13
Authorization: Bearer {{access_token}}
GET /api/v2/passports/{ids}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 15 Jul 2026 22:50:33 GMT
Content-Length: 1653
Connection: close

{
  "results": [
    {
      "eventCatID": 0,
      "group": "",
      "name": "Counter",
      "persistByScript": false,
      "readable": true,
      "saveDB": true,
      "saveStrategy": 1,
      "sourceType": "virtual",
      "type": "double",
      "variableFormat": 2,
      "visible": true,
      "writable": true,
      "ID": 1,
      "scale": {
        "alarmDelay": 0,
        "highScale": 100,
        "lowScale": 0,
        "hiHiAlarm": 100,
        "hiHiAlarmEnabled": true,
        "hiAlarm": 80,
        "hiAlarmEnabled": false,
        "loAlarm": 20,
        "loAlarmEnabled": false,
        "loLoAlarm": 0,
        "loLoAlarmEnabled": true,
        "trackDiscreteOn": true,
        "trackDiscreteOff": false,
        "units": ""
      },
      "customMessages": {
        "enabled": true,
        "loLoAlarm": "Значение ниже нижней аварийной уставки",
        "loAlarm": "Значение ниже нижней предупредительной уставки",
        "normal": "Значение в нормальном диапазоне",
        "hiAlarm": "Значение выше верхней предупредительной уставки",
        "hiHiAlarm": "Значение выше верхней аварийной уставки",
        "badQuality": "",
        "discreteOn": "",
        "discreteOff": ""
      }
    },
    {
      "eventCatID": 0,
      "group": "",
      "name": "Counter_10",
      "persistByScript": false,
      "readable": true,
      "saveDB": true,
      "saveStrategy": 1,
      "sourceType": "virtual",
      "type": "double",
      "variableFormat": 2,
      "visible": true,
      "writable": true,
      "ID": 13,
      "scale": {
        "alarmDelay": 0,
        "highScale": 100,
        "lowScale": 0,
        "hiHiAlarm": 100,
        "hiHiAlarmEnabled": true,
        "hiAlarm": 80,
        "hiAlarmEnabled": false,
        "loAlarm": 20,
        "loAlarmEnabled": false,
        "loLoAlarm": 0,
        "loLoAlarmEnabled": true,
        "trackDiscreteOn": true,
        "trackDiscreteOff": false,
        "units": ""
      },
      "customMessages": {
        "enabled": false,
        "loLoAlarm": "",
        "loAlarm": "",
        "normal": "",
        "hiAlarm": "",
        "hiHiAlarm": "",
        "badQuality": "",
        "discreteOn": "",
        "discreteOff": ""
      }
    }
  ]
}

Теги

Получение тегов по ID

GET /api/channels/{ids}

Запрос на получение данных тегов по их идентификаторам. Идентификаторы тегов в запросе перечисляются через запятую.

Тело запроса:

Параметр Тип данных Описание
nullIfNotFound
boolean
TRUE — если тег не найден, заменить его значение на null. FALSE возвращает ошибку 404
reduceProps
boolean
Сокращение названия свойств для уменьшения нагрузки на сеть
props
string
Свойства, которые нужно вернуть в ответе. Доступны: channelID, quality, value, valueType, viewValue, viewValueTag

Тело ответа:

Параметр Тип данных Описание
results
TagProps[]
Массив структур свойств тегов

Структура TagProps:

Название Сокращение Тип данных Описание
channelID
id
int64
Уникальный идентификатор тега
quality
q
uint64
Качество тега
value
v
any
Значение тега
valueType
vt
enum ValueType
Тип значения тега
viewValue
vv
string
Форматированное значение тега
viewValueTag
vvt
string
Форматированное значение тега c единицами измерения

Пример запроса значений тегов с ID 1, 13, 14.

GET /api/channels/{ids}
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@null = TRUE
@reduceProps = TRUE
@props = value

###
GET {{host}}/api/channels/1,13,14?nullIfNotFound={{null}}&reduceProps={{reduceProps}}&props={{props}}
Authorization: Bearer {{access_token}}
GET /api/channels/{ids}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Thu, 16 Jul 2026 12:00:32 GMT
Content-Length: 44
Connection: close

{
  "results": [
    {
      "v": 3322
    },
    {
      "v": 33220
    },
    {
      "v": 0
    }
  ]
}

Изменение значения тега

PATCH /api/channels/{id}

Запрос на изменение значение тега.

Внимание

Данный запрос поддерживается только лицензией Base, Standard и Enterprise проекта. В случае использования лицензии Free запрос может быть выполнен только с инженерной станции, на которой развернут проект.

Параметры в теле запроса указываются в виде JSON-объекта. При положительном ответе сервер возвращает код 204 (No content).

Параметр Тип данных Описание
value
any
Новое значение тега
PATCH /api/channels/{ids}
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
PATCH {{host}}/api/channels/14
Authorization: Bearer {{access_token}}

{
    "value": 113
}
PATCH /api/channels/{ids}
HTTP/1.1 204 No Content
Content-Type: text/plain; charset=utf-8
Date: Thu, 16 Jul 2026 13:41:32 GMT
Connection: close

Получение ID актуальных событий

GET /api/channels/actualEventIds

Для получения событий проекта сначала требуется получить их идентификаторы, а затем выполнить обмен на сами события, используя запрос к серверу ресурсов
GET /api/v1/events/resolveIds?ids={ids}

Тело ответа:

Параметр Тип данных Описание
EventID
array
Массив идентификаторов событий в системе
GET /api/channels/actualEventIds
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/api/channels/actualEventIds
Authorization: Bearer {{access_token}}
GET /api/channels/actualEventIds
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Thu, 16 Jul 2026 14:34:34 GMT
Content-Length: 10
Connection: close

[
  74,
  73,
  75
]

Bus77

Подключенные устройства

POST /api/bus77/browse

Запрос на получение дерева подключенных устройств и тегов по протоколу Bus77.

Тело запроса:

Параметр Тип данных Описание
address
string
Адрес нахождения IP-Hub в сети

Тело ответа:

Параметр Тип данных Описание
Bus77Node
array
Массив структур данных узла

Структура Bus77Node:

Параметр Тип данных Описание
type
enum Bus77NodeType
Тип узла
name
string
Имя узла
tagID
string
UUID тега
tagGlobalVariableID
uint16
Уникальный ID глобальной переменной
tagValueType
enum Bus77ValueType
Тип данных Bus77

Перечисление Bus77NodeType:

Значение Описание
driver
Драйвер
group
Группа
tcpEndpoint
TCP-узел
tag
Тег Bus77

Перечисление Bus77ValueType:

Значение Описание
none
Отсутствие типа
bool
Логическое значение
s8
Знаковое целое число размером 8 бит
u8
Беззнаковое целое число размером 8 бит
s16
Знаковое целое число размером 16 бит
u16
Беззнаковое целое число размером 16 бит
s32
Знаковое целое число размером 32 бит
u32
Беззнаковое целое число размером 32 бит
f32
Число с плавающей запятой размером 32 бит
s64
Знаковое целое число размером 64 бит
u64
Беззнаковое целое число размером 64 бит
string8
Строка
time
Дата и время
arrayU8
Массив байт
POST /api/bus77/browse
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
POST /api/bus77/browse
Authorization: Bearer {{access_token}}

Проект

Название проекта

GET /api/project

Запрос на получение названия проекта, развернутого на сервере.

Тело ответа:

Параметр Тип данных Описание
name
string
Наименование проекта
GET /api/project
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/api/project
Authorization: Bearer {{access_token}}
GET /api/project
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 07:39:06 GMT
Content-Length: 18
Connection: close

{
  "name": "counter"
}

Дерево проекта

POST /api/project-tree

Запрос на получение дерева подключенных устройств и тегов проекта.

Тело ответа:

Параметр Тип данных Описание
ProjectNode
array
Массив структур дерева проекта

Структура ProjectNode:

Параметр Тип данных Описание
type
enum ProjectNodeType
Тип узла
passportID
int64
ID тега
name
string
Название узла (для тегов пропускается)
children
ProjectNode[]
Дочерние узлы дерева проекта

Перечисление ProjectNodeType:

Значение Описание
tag
Тег проекта
group
Группа проекта
GET /api/project-tree
@host = https://127.0.0.1:8080
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/api/project-tree
Authorization: Bearer {{access_token}}
GET /api/project-tree
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 08:00:52 GMT
Content-Length: 93
Connection: close

[
  {
    "type": "tag",
    "passportID": 1
  },
  {
    "type": "tag",
    "passportID": 13
  },
  {
    "type": "tag",
    "passportID": 14
  }
]

Сервис ресурсов

Внимание

При запросах к сервису ресурсов в поле хост должен быть указан порт сервиса (по умолчанию — 23501).

Моменты

GET /api/v1/channels/{id}/moments

Запрос на получение моментов проекта. Момент – это запись тега в архиве, состоящая из метки времени, значения и качества тега на момент метки времени.

Тело запроса:

Параметр Тип данных Описание
start_time
string
Начальное время выборки в ISO8601
end_time
string
Конечное время выборки в ISO8601

Тело ответа:

Параметр Тип данных Описание
Moment
array
Массив структур моментов

Структура Moment:

Параметр Тип данных Описание
q
number
Значение качества тега
t
string
Время момента в ISO8601. Время указывается без смещения по Гринвичу
v
any
Значение тега в моменте
GET /api/v1/channels/{id}/moments
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@start_time = 2026-07-17T09:34:00.000%2B03:00
@end_time = 2026-07-17T09:34:05.000%2B03:00

###
GET {{host}}/api/v1/channels/1/moments?start_time={{start_time}}&end_time={{end_time}}
Authorization: Bearer {{access_token}}
GET /api/v1/channels/{id}/moments
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 09:37:53 GMT
Content-Length: 271
Connection: close

[
  {
    "q": 192,
    "t": "2026-07-17T09:34:00.018+03:00",
    "v": 523
  },
  {
    "q": 192,
    "t": "2026-07-17T09:34:01.018+03:00",
    "v": 524
  },
  {
    "q": 192,
    "t": "2026-07-17T09:34:02.018+03:00",
    "v": 525
  },
  {
    "q": 192,
    "t": "2026-07-17T09:34:03.018+03:00",
    "v": 526
  },
  {
    "q": 192,
    "t": "2026-07-17T09:34:04.018+03:00",
    "v": 527
  }
]

Числовые моменты

GET /api/v1/channels/{id}/numeric-moments

Запрос на выполнение числовых моментов. Числовые моменты отличаются от обычных тем, что сервис ресурсов возвращает их именно для числовых тегов. Они предназначены для вывода на график. Сервис ресурсов дополняет моменты там, где это необходимо для графика.

Справка

Значения числовых моментов для тегов со сценарием записи в СУБД "по изменению" возвращаются с начала суток по всемирному координированному времени (UTC) независимо от временного запроса, указанного в запросе.

Тело запроса:

Параметр Тип данных Описание
start_time
string
Начальное время выборки в ISO8601
end_time
string
Конечное время выборки в ISO8601

Тело ответа:

Параметр Тип данных Описание
NumericMoment
array
Массив структур числовых моментов

Структура NumericMoment:

Параметр Тип данных Описание
q
number
Значение качества тега
t
string
Время момента в ISO8601. Время указывается по Гринвичу (часовой пояс не учитывается)
v
any
Значение тега в моменте
GET /api/v1/channels/{id}/numeric-moments
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
@start_time = 2026-07-22T18:27:00.000%2B03:00
@end_time = 2026-07-22T18:27:05.000%2B03:00

###
GET {{host}}/api/v1/channels/1/numeric-moments?start_time={{start_time}}&end_time={{end_time}}
Authorization: Bearer {{access_token}}
GET /api/v1/channels/{id}/numeric-moments
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Wed, 22 Jul 2026 15:28:26 GMT
Connection: close
Transfer-Encoding: chunked

[
  {
    "q": 0,
    "t": "2026-07-22T18:26:09.048+03:00",
    "v": 0
  },
  {
    "q": 192,
    "t": "2026-07-22T18:26:10.136+03:00",
    "v": 1
  },
  {
    "q": 192,
    "t": "2026-07-22T18:26:11.136+03:00",
    "v": 2
  },
  {
    "q": 192,
    "t": "2026-07-22T18:26:12.136+03:00",
    "v": 3
  },
  {
    "q": 192,
    "t": "2026-07-22T18:26:13.145+03:00",
    "v": 4
  },
  {
    "q": 192,
    "t": "2026-07-22T18:26:14.145+03:00",
    "v": 5
  },
]

События

GET /api/v1/events/resolveIds?ids={ids}

Запрос на получение событий системы по их идентификатору ID.

Тело ответа:

Параметр Тип данных Описание
Event
array
Массив структур событий

Структура Event:

Параметр Тип данных Описание
type
string
Тип события
channelID
number
Уникальный идентификатор тега
acked
boolean
Флаг подтверждения события оператором (FALSE — не подтверждено)
ackTime
string
Время подтверждения события. "0001-01-01T00:00:00Z" — это "нулевая" дата, что означает "не подтверждено"
ackComment
string
Комментарий оператора при подтверждении
priority
number
Приоритет события
ID
number
Уникальный числовой идентификатор события в системе
startTime
string
Время возникновения события по ISO 8601
text
string
Текстовое описание события
textOwn
boolean
Флаг, что событие имеет уже сформированный текст
endTime
string
Время окончания события по ISO 8601
value
number
Значение тега в момент активности события
userID
number
Идентификатор пользователя, который выполнил действие, вызвавшее событие
userName
string
Имя пользователя, связанного с событием. Пустая строка — пользователь не назначен или событие системное
GET /api/v1/events/resolveIds?ids={ids}
@host = https://127.0.0.1:23501
@access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

###
GET {{host}}/api/v1/events/resolveIds?ids=79,78
Authorization: Bearer {{access_token}}
GET /api/v1/events/resolveIds?ids={ids}
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Fri, 17 Jul 2026 07:15:19 GMT
Content-Length: 490
Connection: close

[
  {
    "type": "hiHiAlarm",
    "channelID": 13,
    "acked": false,
    "ackTime": "0001-01-01T00:00:00Z",
    "ackComment": "",
    "priority": 2,
    "ID": 78,
    "startTime": "2026-07-17T08:30:19.197+03:00",
    "text": "",
    "textOwn": false,
    "endTime": null,
    "value": 100,
    "userID": null,
    "userName": ""
  },
  {
    "type": "hiHiAlarm",
    "channelID": 1,
    "acked": false,
    "ackTime": "0001-01-01T00:00:00Z",
    "ackComment": "",
    "priority": 2,
    "ID": 79,
    "startTime": "2026-07-17T08:31:49.217+03:00",
    "text": "",
    "textOwn": false,
    "endTime": null,
    "value": 100,
    "userID": null,
    "userName": ""
  }
]