Types of IoT Messaging
There are several types of IoT messaging, and choosing the right one depends on your needs and your budget. DDS is an Object Management Group machine-to-machine standard, designed for high-performance systems. DDS eliminates the need for servers and delivers millions of messages to many receivers. It also addresses the specific needs of medical devices, mobile applications, and other real-time information exchange systems. This open standard also makes it easy to create and maintain custom IoT messaging systems.
A MQTT broker is a software server that receives and forwards messages from clients. Clients subscribe to a topic, which serves as the title of the message. The broker can be on the edge, in the cloud, or anywhere in between. To publish messages, the client publishes the message and it’s forwarded to all clients that subscribe to that topic. MQTT clients connect to the broker via subscribers and publishers.
When using MQTT, clients have two different functions: publishing and receiving. Publishing means sending data to a server, while receiving means receiving data from a server. Subscribers can connect to a broker to subscribe to multiple topics, so they can send and receive messages. A single MQTT client can send multiple messages, but the broker must be able to process 10*10 of those messages. To handle the increasing load, MQTT clients have a last will message feature.
A URI is a representation of a resource, and is the most basic type of a message. It is used for establishing communication between different IoT devices, and is often a part of the standard XML-RPC standard. Typically, a CoAP response is composed of one or more messages and is matched with a client-generated token. This means that a single request can be used to establish communication between different devices.
To send a message, an end-point in the IoT must maintain a timeout and retransmission counter. The timeout is set to a random number, and the retransmission counter is incremented when the timeout is reached. When the retransmission counter reaches MAX_RETRANSMIT, it is cancelled. In order to use CoAP, the end-point MUST not rely on cross-layer behavior, because this would result in a lost message.
Using SigFox for IoT messages is possible with a number of tools, but it is not without its difficulties. For one, the Sigfox backend does not support direct connectivity. Instead, it must send a downlink message to the Sigfox device, where it is forwarded to the Sigfox Device. The documentation for bidirectional connectivity is sketchy, but the key is to use the DATA and BIDIR callback types. The JSON body of the message must contain the ack variable, which allows backend logic to determine whether the downlink has responded to the request.
Sigfox also features strict limitations regarding throughput and utilization. It is ideal for small bursts of data, such as temperature and humidity data. The data from these sensors can fit within the restrictions. The data from these devices can be as small as two bytes, with 0.004 degrees of precision. The data can take up to a second to send. It is also worth noting that earlier versions of Sigfox were unidirectional. However, later versions support bidirectional communication.
AMQP is an open-standard communication protocol, which specifies behavior for both service clients and messaging providers. It also enables interoperability among messaging implementations. Earlier standardizations of middleware occurred at the API level and focused on standardizing the interaction between middlewares and programmer applications. For example, JMS defines a set of behaviors, whereas AMQP specifies a wire-level protocol and describes the format of messages.
AMQP is open-standard, and uses multiple TLS extensions for encryption and client authentication. Its origin is in the financial industry, which required a protocol to handle a large amount of market data and avoid licensing headaches. Its popularity grew, and the underlying technology has been widely adopted for IoT. Nevertheless, its inherent complexity and lack of scalability makes it inefficient for many IoT applications.