You can exchange data between devices by creating connections between datapoints on the devices. Connections are like virtual wires, replacing the physical wires of traditional hard-wired systems. A connection defines the data flow between one or more output datapoints to one or more input datapoints. The process of creating a self-installed connection is called enrollment. Inputs and outputs join a connection during open enrollment, much like students join a class during open enrollment.
Connections are created during an open enrollment period that is initiated by a user, a connection controller, or a device application. Once initiated, a device is selected to open enrollment—this device is called the connection host. Any device in a connection may be the connection host—the connection host is responsible for defining the open enrollment period and for selecting the connection address to be used by all network variables within the connection. Connection address assignment and maintenance is handled by the ISI engine, and is transparent to your application. For example, a temperature sensor application can offer the temperature output value to the network with the value izot.resources.datapoints.temperature. Other applications may subscribe to this data and join the connection to monitor the temperature value.
Even though any device in a connection may be the connection host, if you have a choice of connection hosts, network resource utilization will be optimized if you pick the natural hub as the connection host. For example, in a connection with one light controlled by multiple switches, the light is the natural hub. In a connection with one switch and multiple lights, the switch is the natural hub. If there is no natural hub—multiple switches connected to multiple lights for example—using one of the devices with an output network variable will optimize network resource utilization. If all the devices have both inputs and outputs, as in the typical switch and light case, you can pick either as the host. For the IzoT SDK example applications, the LED Controller is the connection host for the Keypad to LED Controller connections, and the Keypad is the connection host for the Environment Sensor to Keypad connections. Offering data connections and decisions about enrollment can be made fully automatically by your application, or might involve local input (for example, through a push button).
A connection host opens enrollment by sending a connection invitation. Once a connection host opens enrollment then any number of devices may join the connection.
Connections are created among connection assemblies. A connection assembly is a block of functionality, much like a functional block. A connection assembly that consists of a single datapoint is called a simple assembly. A single assembly can include multiple datapoints in a single block, can include multiple datapoints that span multiple blocks, or can exist on a device that does not have any blocks; an assembly is simply a collection of one or more datapoints that can be connected as a unit for some common purpose. A connection assembly consisting of more than one datapoint is called a compound assembly.
For example, a combination light-switch and lamp ballast controller may have both a Keypad and a Load Control block, which are paired to act as a single assembly in an ISI network, but may be handled as independent blocks in a managed network.
To communicate and identify an assembly to the ISI engine, the application assigns a unique number to each assembly. This assembly number must be in the 0 – 254 range sequentially assigned starting at 0. Required assemblies for standard profiles must be first, assigned in the order the profiles are declared in the application. Standard ISI profiles that define multiple assemblies must specify the order the assemblies are to be assigned.
Each assembly has a width which is typically equal to the number of datapoints in the assembly. All assemblies must have a width of at least 1. Simple assemblies have a width of 1; compound assemblies typically have a width of greater than 1. One of the datapoints in a compound assembly is designated as the primary datapoint. If the primary datapoint is part of a block, that block is designated as the primary block. Information about the primary datapoint may be included in the connection invitation.
To open enrollment, the connection host broadcasts a connection invitation that may include the following information about the assembly on offer: the datapoint type of the primary datapoint in the assembly, the profile number of the primary profile used by the assembly, and the connection width. Applications which initiate enrollment need to create one or more enrollment objects. Enrollment objects are used when initiating an enrollment process, and are used to describe the data connection to other applications in the network. Other devices on the network receive the invitation and interpret the offered assembly to decide whether they could join the new connection. Once enrollment data has been exchanged and accepted, participating devices implement this enrollment by creating the connections. Your application needs to instruct the device stack about the mapping between the enrollment and one or more input or output datapoints to be enrolled in the connection.
See the embedded Python documentation (Getting More Information) for more details about enrollment.