MQTT FTW

This blog post isn't really a proper post, more of a way in which I can remember how to use MQTT for future projects.

Feel free to refer to this and of course comment :)


What is MQTT?

MQTT: Message Queuing Telemetry Transport.

A lightweight machine to machine protocol for IoT devices.

How can I install it on Linux / Raspberry Pi?

In a terminal

sudo apt update
sudo apt install mosquitto mosquitto-clients

To test

Run the mosquitto background service broker

sudo service mosquitto start

Subscribe to a topic

One one computer which will react to a message (this was my Pocket Chip SBC)

-d = debug mode, handy for finding issues

-t = topic, the subject that we are listening to, almost like a channel

-h = IP address of the broker

mosquitto_sub -d -t hello/world -h IP ADDRESS

Publish a message on the set topic

On another computer, this was my laptop.

-d = debug mode, handy for finding issues

-t = topic, the subject that we are sending a message to, almost like a channel

-m = message, the message that we wish to send

-h = The IP address of the broker

mosquitto_pub -d -t hello/world -m "Is this thing on?" -h IP ADDRESS

So what happens?

The laptop publishing a message on the hello/world topic will send its message that will be picked up by every device that is subscribing / listening to that topic.

To install MQTT for Python 3

sudo pip3 install paho-mqtt

An example Python script that will listen and can post to topic.

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
        print("Connected with result code "+str(rc))
        client.subscribe("hello/world")

def on_message(client, userdata, msg):
        message = str(msg.payload)
        message = message[2:(len(message))]
        print(message)
        if(message=="test"):
                print("I'm working!")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
#connects to a certain IP address
client.connect("192.168.1.191", 1883, 60)

client.publish("hello/world","test")

client.loop_forever()