June 18th, 2020

API проекта автоматизации 5277. Структура данных ответа на запрос выбора локации.

Для коммуникации между собой таких узлов как клиент, контроллер и сервер я использую бинарный протокол.  Моя Java библиотека, с реализацией этого протокола, может преобразовывать его в JSON.  Для удобства чнетия я привожу описание структуры именно на JSON.

  *Это больше ознакомительная часть, чтобы иметь представление как оно работает. Вся детальная информация будет описана в отдельной документации.

  Здесь я опущу заголовочные данные пакета и рассмотрю только тело:


SCB - блок сценариев
LOCATIONS - блок локаций


TIMESTAMP - метка времени(в миллисекундах) последнего изменения сценариев, для определения актуальности данных
SCENARIO_GROUPS - блок  с группами сценариев


ID - идентификатор группы сценариев
LOCATION_ID - идентификатор локации, к которой привязана данная группа
DISABLED - сстояние группы(заблокирована или нет)
NAME - имя группы
SCENARIOS - блок сценариев данной группы


ID - идентификатор сценария
DISABLED - сстояние сценария(заблокирован или нет)
NAME - имя сценария
COMMENT - комментарий к сценарию
PARAMS - блок параметров


ID - идентификатор параметра
TYPE_ID - тип параметра
VALUE - данные параметра(структура и данные зависят от типа параметра)
*детально параметры сценария будут описаны отдельно

Блок SCB рассмотрен, возвращаюсь к верхним элементам.

ID - идентификатор локации
SERIAL - серийный номер контроллера(десятеричная форма), к которому привязана локация
NAME - имя локации
ICON - имя иконки локации
COMMENT - комментарий к локации
INTERROGATE_PERIOD_ID - идентификатор периода опроса устройств
AGGREGATION_PERIOD_ID - идентификатор периода выгрузки данных в БД для статистики
DISABLED - сстояние локации(заблокирован или нет)
IS_LINK - признак локации из другого проекта
PLACES - блок помещений в данной локации
GATEWAYS - блок шлюзов для конечных устройств
DEVICES - блок конечных устройств
GROUPS - группы конечных устройств(для режима вывода наборов показаний, вместо упорядоченного списка устройств с показаниями)
PERMS - блок разрешений, в рамках локации, для пользователей
DATA - блок с данными


ID - идентификатор помещения
NAME - имя помещения
ICON - имя иконки помещения
COMMENT - комментарий к помещению


ID - идентификатор шлюза
TYPE_ID - идентификатор типа шлюза
DEVICE_ID - идентификатор устройства в линейке устройств производителя
VENDOR_ID - идентификатор производителя
PARAMS - параметры устройства(ниже будут описаны на примере конечного устройства)
OWNER_IFACE_ID - идентфикатор физического порта интерфейса к которому подключено данное устройство(входящий).
IFACE - физический порт иннтерфейса который соединен с устройством к которому подключается данное устройство.


ID - идентифкатор интерфейса
IFACE_TYPE_ID - идентификатор типа интерфейса(например UART)
IFACE_NUM - порядковый номер интерфейса(например '0' - UART0)
PARAMS - блок параметров интерфейса


ID - идентификатор параметра
EXT_PARAM_ID - идентфикатор параметра из табличных данных описания набора интерфейсов и параметров каждого типа шлюза(дает гибкость системе, позволяя расширять систему буквально налету)
TYPE_ID - идентификатор типа параметра
SUBTYPE_ID - подтип идентификатора параметра(позволяет описать несколько параметров одного типа)

 Возвращаемся назад.

ID - идентификатор конечного устройства
TYPE_ID - идентификатор типа конечного устройства
NAME - имя конечного устройства
PLACE_ID - идентификатор помещения
COMMENT - комментарий к конечному устройству
INTERROGATE_PERIOD_ID - идентификатор периода опроса конкретного устройства
DISABLED - сстояние устройства(заблокирован или нет)
PARAMS - блок параметров устройства
DEVICE_ID - идентификатор устройства в линейке устройств производителя
VENDOR_ID - идентификатор производителя
GATEWAY_ID - шлюз, к которому подключено данное устройство, null - подключено непосредственно к контроллеру
ICON - имя иконки конечного устройства
AGGREGATION_PERIOD_ID - идентификатор периода выгрузки данных конкретного устройства в БД для статистики
AGGREGATION_EVENT_ID - идентификатор события вне периодической выгрузки данных конкретного устройства в БД для статистики
EXTRASCAN - признак поддержки конкретным устройством функционала экстренного опроса конечных устройств
PERMS - блок разрешений в рамках данного устройства для пользователей(аналогичен PERMS в описании LOCATION)
OWNER_IFACE_ID - идентфикатор физического порта интерфейса к которому подключено данное устройство(входящий).
IFACE - физический порт иннтерфейса который соединен с устройством к которому подключается данное устройство(аналогичен IFACE в GATEWAY).


ID - идентификатор параметра
PARAM_ID  - идентификатор типа параметра
VALUE - значение параметра
SUBTYPE_ID - подтип параметра(например для параметра 'Имя показания' здесь содержится идентификатор типа показания)

Возвращаемся назад.

ID - идентфикатор группы
NAME - имя группы
ICON - имя иконки группы
PLACE_ID - идентификатор помещения
COMMENT - комментарий к группе
*все вышеперечисленные параметры используются аналогично как и в DEVICE
SORT - значение для сорировки групп
ITEMS - блок элементов группы


ID - идентификатор элемента
DEVICE_ID - идентификатор конечного устройства
MEASURE_TYPE_ID - идентфикатор типа показания
NAME - имя показания
SORT - значение для сортировки элементов


ID - идентификатор разрешения
USER_ID - идентификатор пользователя
TYPE_ID - идентификатор типа разрешения


ID - идентфикатор локации
DEVICES - блок данных конечных устройств


ID - идентифкатор конечного устройства
MEASURES - блок показаний конечного устройства


TYPE_ID - идентификатор типа показания устройства
VALUE - значение показания устрйоства


Как сказал ранее, здесь далеко не вся информация, запросов и различных типов ответов большое количество.

Кроме описания структуры и данных таких параметров как значения PARAMS есть еще большое количество табличных данных, в которых описаны практически все данные с которыми работает система.
К примеру, если рассматривать показания, то в таблицах можно найти их типы, иднетификатор текста для словарей, идентификатор единицы измерения, идентификатор типа данных и цвет.
В свою очередь единица измерения содержит идентификатор текста для словарей, идентификатор базовой единицы измерения и множитель. Т.е. система понимает, к примеру, как амперы, так и миллиамперы и может их, при необходимости, преобразовать.

Все это дает некоторую гибкость системе и позволяет ее достаточно легко расширять без участия разработчика.