The MQTT-SN
protocol is a sibling of MQTT. While MQTT is designed to be
used over a reliable stream transport protocol (such as TCP/IP), the MQTT-SN
was designed to be used over a datagram transport protocol. It means, that
if a message is received by the other end on the communication link, it is
received in full and correctly.
There are multiple implementations of MQTT-SN client libraries and/or gateway
applications, most of them support only UDP/IP and/or ZigBee transport
layers. However, it is possible to use MQTT-SN protocol with any other I/O link, such as
RS-232 serial or CAN bus, as long as additional "packatization" of the native
MQTT-SN message is provided, to insure the message is delivered in full
and without errors.
I'd like to present to you my implementation of single threaded, asynchronous, non-blocking, easy to
use, suitable for embedded platforms, well documented libraries
of both MQTT-SN client and gateway. They are completely generic and don't make any assumptions about the system they are running on. There are no socket/network abstractions, all the required services (such as delivery of the message or time measurement) are requested via callbacks. The driving code is free to introduce any extra modification to the exchanged data, such as additional packetization and/or encryption. It makes the whole architecture very flexible and open for use with any third party framework (such as Asio, QT, various RTOSes, etc...).
All the details are on https://github.com/arobenko/mqtt-sn
I'll appreciate any feedback, suggestions, and bug reports.
Regards,
Alex