MQ Telemetry Transport (MQTT)

From Neuromeka Wiki
Jump to: navigation, search


Overview

MQTT is a light-weight publish/subscribe messaging protocol. The protocol runs over TCP/IP or other ordered, lossless and bi-directional network protocols. MQTT is ideal for use in in many situations including resource-constrained environments and low-bandwidth and high-latency networks. In addition, MQTT is able to handle connection between many thousand of small devices simultaneously.

The following figure describes an example (from HiveMQ) of MQTT infrastructure where there is a center broker and many clients classified as either publisher or subscriber.

HiveMQ-MQTT Overview.png


Components

MQTT Broker

The Broker is the heart of any publish/subscribe protocol. It is directly exposed on the internet and handles a lot of clients and then passes messages along to downstream systems.

It is primarily responsible for receiving all messages, filtering them and then sending the message to all subscribed clients who are interested in it. The Broker is also extensible which allows to easily integrate custom authentication, authorization and integration into back-end systems.

In summary, the Broker works like a central hub which every message needs to pass.


MQTT Client

Multiple clients connect to a broker and subscribe to topics that they are interested in. Clients also connect to the broker and publish messages to topics. Many clients may subscribe to the same topics and process the received information as they want.


Message Topic

Messages in MQTT are published on topics. Topics are treated as a hierarchy, using a slash (/) as a separator.

For example, multiple computers may all publish their hard drive temperature information on the following topic, with their own computer and hard drive name being replaced as appropriate:

sensors/COMPUTER_NAME/temperature/HARDDRIVE_NAME


Quality of Service (QoS)

MQTT defines three levels of QoS. Basically, the QoS defines how hard the broker and clients try to ensure that a message is received.

In MQTT, the clients choose the maximum QoS it will receive. For example, if a message is published at level 2 of QoS, the message will be delivered to clients who satisfy with level 0 or 1 of QoS.

Higher levels of QoS are more reliable, but result higher latency and higher bandwidth requirements.

  • Level 0: The broker/client will deliver the message once, with no confirmation.
  • Level 1: The broker/client will deliver the message at least once, with confirmation required.
  • Level 2: The broker/client will deliver the message exactly once by using a four step handshake.


Getting Started with Mosquitto - An Open-source MQTT

Installation

  • Preparation
    • Operating System: Ubuntu (versions: vivid, trusty, precise...)
deb http://ppa.launchpad.net/mosquitto-dev/mosquitto-ppa/ubuntu [_UBUNTU_VERSION_] main
deb-src http://ppa.launchpad.net/mosquitto-dev/mosquitto-ppa/ubuntu [_UBUNTU_VERSION_] main
  • Mosquitto MQTT Broker
    • This Broke will automatically run on background after installation.
sudo aptitude install mosquitto
  • Mosquitto MQTT Client
sudo aptitude install mosquitto-clients

Subscribing to a topic

  • For instance, the topic message is hello/world
mosquitto_sub -h [_THE_HOST_IP_ADDRESS_] -d -t hello/world

Publishing to a topic

  • For instance, the topic message is hello/world and the message content is "Hello World"
mosquitto_pub -h [_THE_HOST_IP_ADDRESS_] -d -t hello/world -m "Hello World"

Additional Notes

  • _THE_HOST_IP_ADDRESS_ is the IP Address of the host where we installed MQTT Broker.
  • By default, the MQTT Broker listens on port 1883. In case you want to change the listening port, please refer to Mosquitto Broker Configuration
  • In some cases, you may need to open up port (ex 1883) on your Ubuntu machine for proper operation of MQTT. Then, iptables command can be used.
sudo iptables -A INPUT -p tcp -m tcp --dport 1883 -j ACCEPT