Technologies

A Technology is a type of object that enables a software program to do one or more of the following fundamental operations:

  • Discover new things
  • Host things for other things/devices to use
  • Manage groups, automation primitives, and security contexts

A Technology instance could be thought of as a Splot-colored window into the world of a specific IoT application protocol.

For example, using a SMCP-based technology would allow a software program to discover, monitor, and control SMCP-based devices. Likewise, using a ZigBee-based Technology instance will allow a software program to discover, monitor and control ZigBee-based devices, providing a SOM-compliant interface to the ZigBee world.

While not a fundamental SOM type, the concept of a Technology is nonetheless an important concept to understand since groups, automation primitives, security contexts, and UIDs are all technology-scoped.

The Things discovered using a Technology instance and things hosted by that Technology instance are in the same URL-space.

From a software perspective, a Thing is just an interface to an object. Consider, for example, a fake on/off switch that implemented the thing interface. It wouldn't need anything else to be usable within the process that created it.

Things that implement automation primitives are different. They need a window into the world around them because some of their properties contain URLs that they need to monitor and/or change. Thus, automation primitives cannot exist in a vacuum, instances are always be associated with a technology instance. Specifically, they need a way to perform REST operations on arbitrary URLs.

Group things are even more tightly related to technologies: they don't ideally just exist on one device, they exist across all devices that have things in them, and potentially many more.

Taking a thing that is discovered from one technology instance and then hosting that on a separate technology is called "bridging".