There are four basic building blocks of data management in IOTile Cloud:
- Stream - A unique time series of data. A stream is the data produced from a given input or output of a specific device (like temperature or electrical pulses from a sensor device). Streams can also be time series data imported from a 3rd party source (like temperature from the API of an internet weather site).
- Device - A unique source of data. Physical IOTile Devices are typically sensors (a temperature sensor generating a temperature data stream) or machine readers (a USB or serial port reader generating a data stream from reading an industrial machine like a motor). Any other source of data that is not a physical device is considered a Virtual Device and can be treated analogously to a Device in the IOTile Framework.
- Variables - A set of data streams that share a common index and physical units. Ten temperature sensors would produce ten unique streams that could be described by a single temperature variable with units of degrees. For physical IOTile Devices, a variable is made to correspond directly with the identical input/output port on all devices of the same type. Thus a sensor with two temperature sensors could be said to have two variables (for example, Temp 1 and Temp 2 that might be used for differential measurements).
- Projects - A set of devices grouped together to accomplish useful work. IOTile Cloud uses projects as the primary grouping to encapsulate a set of devices, as well as their variables and streams, to accomplish tasks useful to the user. This could be a temperature sensor, motor machine reader, and vibration sensor, which together describe the state of the motor in such a way that insight can be ascertained from their relation. Thus, a project is a digital representation of a physical system.
For a Project formed of identical Devices, all possible Stream combinations (Device * Variable) exist:
|V1: Temp 1 (°C)||V2: Temp 2 (°C)||V3: Battery (Volts)||V4: Reboot Counter (Count)|
|D1: Temperature Sensor||D1V1||D1V2||D1V3||D1V4|
|D2: Temperature Sensor||D2V1||D2V2||D2V3||D2V4|
|D3: Temperature Sensor||D3V1||D3V2||D3V3||D3V4|
This Project might be used to represent a set of refrigerators where the differential between the inner cold and outer warm temperatures create a useful representation of the refrigerator system state.
For a Project formed from dissimilar Devices, only sparse Stream combinations exist:
|V1: Temp (°C)||V2: Speed (RPM)||V3: Vibration (G)||V3: Battery (V)||V4: Reboot Counter (#)|
|D1: Temp Sensor||D1V1||D1V3||D1V4|
|D2: Motor Reader||D2V2||D2V3||D2V4|
|D3: Vibration Sensor||D3V3||D3V3||D3V4|
This Project might be used to represent the motor discussed above, where the temperature, motor speed, and external vibration can be used to characterize the health and predictive maintenance of a given motor.
The relationship between Devices, Variables, and Streams can be shown graphically as in the diagram below.
Treating Streams in this manner creates three-dimensional tensor structures to hold historical data. The physical or virtual Device is the first dimension, the Variable is the second, and Time is the third. This structure allows for IOTile data to be easily ingested and processed for data analysis. Derivative Streams can be created by understanding and relating different Streams to one another. Passing sets of Streams through filters allows for the automated triggering of actions. The creation of derivative Streams, compound filtering, and compound triggering allows for the use of any modern big data and machine learning analytics to be incorporated directly into an automatic data processing system that makes data actionable for the Internet of Things.