Unified Data Model

In AggreGate, each device or system object is represented as a so-called context within a hierarchical structure of contexts. Each context includes a set of formalized data elements: variables, functions, and events. A context also contains metadata that describes the data elements available in it. This patented technology is called object normalization.

Some parallels exist with the object-oriented programming:

  • Variables support read and write operations
  • Functions can be executed by collecting the input values and passing the output
  • It’s possible to subscribe to the events and receive their instances asynchronously

Context Tree

All contexts of an AggreGate Server dwell in a hierarchical structure called context tree. In this tree, each context has a name, that is its unique ID within its parent, and a path, that is the context's unique ID within the server.

Since all contexts implement the unified interface, they can interoperate within the server context tree, offering an unprecedented level of flexibility.

Distributed architecture expands interoperation throughout the network, allowing different servers to exchange parts of their context trees.

Data Tables

For even further unification, every piece of context data within AggreGate shares a single data type called data table:

  • Values of the context variables are data tables
  • Each context function gets an input data table and returns an output data table
  • Every instance of a context event has an associated data table with the event-specific data

Tables are flexible enough to hold any kind of data:

  • Scalar values (numbers, strings, dates, etc.) are represented by single-cell tables
  • Arrays are represented by single-column tables
  • Structures are represented by single-row tables
  • Streams are handled as special tables of the unlimited length
  • And, finally, tabular data is stored "as is"

Each data table has a specific format describing the table fields and general properties.

Cells of data tables may contain the nested tables, making it possible to use a single top-level table to represent an object of whatever complexity.


The server contexts also define actions that represent the human-executable operations. There is a key difference between the context actions and the context functions: unlike functions, actions may interact with a user by generating some output or requesting the data input.

Actions interact with the user using UI Procedures. Every action is a combination of UI Procedures and server-side data operations.

Device Normalization

Drivers and agents create a normalized presentation of various hardware devices and data sources. In this case, variables are internal settings of the device, functions are operations that the device can perform, and events are notifications the device can send to inform the server of changes detected in internal or external operating conditions.

Virtually any device or system object can be described as a set of variables, functions and events. For example, a smart remotely-controlled water tank can have a “water level” variable to reflect the current amount of water in the tank and “turn the valve on/off” functions to control the valve that lets water into the tank. This smart water tank can also generate a number of events, such as “nearly empty”, “nearly full”, and “overflow”.