Единая модель данных
В AggreGate каждое устройство представлено так называемым контекстом, являющимся частью иерархической структуры контекстов. Каждый контекст включает формализованные элементы данных трех типов: переменные, функции и события. Контекст также содержит метаданные, описывающие все имеющиеся элементы. Эта запатентованная технология называется нормализацией объектов.
Можно провести некоторые параллели между единой моделью данных и объектно-ориентированным программированием:
- Переменные поддерживают операции чтения и записи
- Функции могут быть выполнены путём сбора входных значений и передачи выходных данных
- Существует возможность подписаться на события и асинхронно получать их экземпляры
Дерево контекстов
Все контексты сервера AggreGate располагаются в иерархической структуре под названием дерево контекстов. Каждый контекст в этом дереве имеет название, то есть уникальный ID в пределах его родителя, и путь - уникальный ID контекста в пределах сервера.
Поскольку все контексты имеют общий интерфейс, они могут взаимодействовать внутри контекстного дерева сервера, обеспечивая беспрецедентный уровень гибкости.
Распределённая архитектура расширяет возможности взаимодействия через сеть передачи данных, позволяя различным серверам обмениваться друг с другом частями деревьев контекстов.
Таблицы данных
В целях дальнейшей унификации каждая часть контекстных данных в AggreGate использует единый тип данных под названием таблица данных:
- Значения свойств контекста являются таблицами данных
- Каждая функция контекста получает таблицу входных данных и возвращает таблицу выходных данных
- Каждый экземпляр события контекста имеет соответствующую таблицу со специфичными данными по событию
Таблицы достаточно гибки для вмещения любого типа данных:
- Скалярные величины (числа, строки, даты и т.д.) представлены таблицами в одну ячейку
- Массивы представлены таблицами в одну колонку
- Структуры представлены таблицами в одну строку
- Потоки данных обрабатываются как специальные таблицы неограниченной длины
- И, наконец, табличные данные хранятся в том виде, в каком они представлены
Каждая таблица данных имеет специальный формат, описывающий поля таблицы и её общие свойства.
Ячейки таблиц данных могут содержать вложенные таблицы, позволяя использовать одну таблицу данных верхнего уровня для комплексного отображения объекта любой сложности.
Действия
Контексты сервера также могут включать в себя действия, которые представляют собой инициируемые человеком операции. Ключевая разница между действиями контекстов и функциями контекстов состоит в том, что в отличие от функций, действия могут взаимодействовать с пользователем в процессе выполнения, предоставляя некоторую информацию или запрашивая ввод данных.
Действия взаимодействуют с пользователем с помощью UI-процедур. Каждое действие - это комбинация UI-процедур и операций на стороне сервера.
Нормализация устройств
Драйверы и агенты позволяют создать нормализованное представление различных аппаратных устройств и источников данных. В этом случае переменными будут являться внутренние настройки устройства, функциями - доступные устройству операции, а событиями - уведомления, которые устройство может отправить, чтобы информировать сервер об изменениях условий, вызванных как внутренними, так и внешними факторами.
В сущности, любое устройство или системный объект могут быть представлены как набор переменных, функций и событий. Например, «умная» дистанционно обслуживаемая водонапорная башня может иметь переменную «Уровень воды», отражающую текущее количество воды в резервуаре, а также функции «Открыть/закрыть клапан» для управления клапаном, который регулирует подачу воды в резервуар. Также эта водонапорная башня может генерировать различные события, такие как «Резервуар практически пуст», «Резервуар практически полон» или «Переполнение резервуара».