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".