Some time back we took a look at Internet-of-Things (IoT) communications in an attempt to digest some of the vague marketing messages from various companies participating in that business. I identified three layers: formal protocols overlaid by abstract messaging overlaid by business objects.
The “formal protocols” layer is typically referred to generically as the “transport” (even though it may or may not contain formal OSI transport-layer functionality). When IoT comms folks talk about being standards-based, this is typically where most of the standards lie, whether it’s TCP/IP or Zigbee or whatever.
Above that is the generic messaging layer, and it’s simply a way to encode information for shipment elsewhere. There are no semantics, and the receiving entity needs to understand how the message was built in order to unpack it properly. The contents themselves aren’t standardized. We identified Xively as an example of this, but there are other standards working here as well; MQTT would be an example. DDS is another one. Note that, at this level, there may be some level of prescribed format, but there are no prescribed semantics for specific types of endpoints.
Such semantics belong in the layer above, where we find business objects. Just to clarify the difference here, let’s take 3 examples:
– In one case, a generic message protocol might be leveraged to carry, say, instructions to a thermostat. Let’s say there are a couple header bytes and then a message field. The designer could use the first byte of the message field to identify that this is going to a thermostat and the second byte could identify which thermostat, and then the following bytes would carry the instruction and any data (for instance, “set temperature to 72”). This structure has been defined for this system only, and both ends of the system need to know what the various bytes signify in order to communicate.
– In another case, more like DDS, there may already be a provision for generic “topics.” So, in this case, the designer could encode instructions just like above, but rather than having to build in a field for “thermostats,” he or she could simply use a thermostat topic to which interested subscribers could subscribe. The specific thermostat instructions would still be custom, but some of the infrastructure for getting the messages to interested parties is built into the protocol.
– Those prior two fall short of containing business object semantics because the thermostat-specific instructions are custom. The third example would, by contrast, include a thermostat object, and that object would have a pre-defined API. You wouldn’t “invent” codes for “set temp,” “turn on,” “turn off,” etc.; they would be part of the protocol. The benefit here is that any system talking to a thermostat from any vendor supporting the protocol would work. There’s no vendor lock-in (which may not be viewed as a benefit by some vendors).
The IPSO Alliance has put together a “starter pack” of IoT objects. They’ve done so given that their main objective, proliferation of IP, can be extended to include constrained-resource Things via IPv6 and 6LoWPAN. The reference implementation leverages the Lightweight M2M protocol, designed for device management and services, which is itself based on the new CoAP protocol, which provides messaging for low-bandwidth, low-power devices with constrained resources.
That said, the objects can be implemented over other protocols as well. There’s nothing about them that constrains them to IP-based transport.
They’ve created 18 different objects. Some of them are rather generic:
- Digital input
- Digital output
- Analog input
- Analog output
- Generic sensor
- Power measurement
- Set point
- Load control
So, for instance, while there’s not a specific thermostat object, the “actuation” object allows for turn on/off, and the “set point” object allows for setting a value, like the temperature.
Then there are some specific objects:
- Illuminance sensor
- Presence sensor
- Temperature sensor
- Humidity sensor
- Light control
- Power control
Each object has defined “resources.” For example, the Illuminance sensor object has the following resources:
- Sensor value
- Min measured value (since last reset)
- Max measured value (since last reset)
- Min range value
- Max range value
- Reset min/max measured values
Each resource has its own ID. Names and IDs are registered through the Open Mobile Alliance (the group that defined LWM2M) Name Authority.
You can read more about the announcement here, and the “starter pack” guidelines are available here.