I keep hearing about MQTT in connection with IoT type projects. I have always just "rolled my own" protocol for this kind of thing, but there probably are advantages to using a standard like this.
MQTT stands for MQ Telemetry Transport. It is a publish/subscribe protocol that requires clients to work with a broker (i.e. a server). It is designed for use on low bandwidth networks. It is also designed to have a small footprint on devices that utilize it. A "broker" can handle thousands of clients.
MQTT was invented by Andy Stanford-Clark (IBM) and Arlen Nipper (Arcom, now Cirrus Link) back in 1999, when their use case was to create a protocol for minimal battery loss and minimal bandwidth connecting oil pipelines over satellite connection.
mosquitto.i686 1.4.10-2.fc25 updates mosquitto.x86_64 1.4.10-2.fc25 updates mosquitto-devel.i686 1.4.10-2.fc25 updates mosquitto-devel.x86_64 1.4.10-2.fc25 updatesDoing the install on my fedora system also pulls in the websockets library.
(1/2): libwebsockets-2.1.1-1.fc25.x86_64.rpm 196 kB/s | 94 kB 00:00 (2/2): mosquitto-1.4.14-1.fc25.x86_64.rpm 371 kB/s | 190 kB 00:00This also provides some clients:
[root@trona tom]# ls /usr/sbin/mosquitto* /usr/sbin/mosquitto [root@trona tom]# ls /usr/bin/mosquitto* /usr/bin/mosquitto_passwd /usr/bin/mosquitto_pub /usr/bin/mosquitto_subMosquitto listens on a default port of 1883, which is the IANA reserved port for MQTT. This can easily be changed. There does not seem to be an RFC describing MQTT.
There is a ruby gem for mqtt, also python modules and a perl module on CPAN. The mosquitto distribution includes C++ client libraries. If C++ is not your game (it is not mine), take a look at the Paho C library.
Fedora also includes some Paho packages:
eclipse-paho-mqtt-java.noarch 1.0.2-1.fc25 fedora eclipse-paho-mqtt-java-javadoc.noarch 1.0.2-1.fc25 fedora eclipse-paho-mqtt-java-tests.noarch 1.0.2-1.fc25 fedora python2-paho-mqtt.noarch 1.2-2.fc25 fedora python3-paho-mqtt.noarch 1.2-2.fc25 fedora
The protocol is supposedly simple and lightweight, so why not roll your own?
Take a look at the third of the Hackaday series "control and clients" for some tips on Android clients that talk MQTT. The MQTT.js library and websockets hint that it should be straightforward to work up some web based clients (but now we start thinking about security and authentication). The last of the Hackaday article talks about security and "bridging" to an MQTT server that is more generally accessible than one you run inside your home wifi network.
Tom's Computer Info / tom@mmto.org