MQTT And Python

2015-02-18 20:01

Update: This article now also exists as a git repository.

I played around with MQTT and Python for an upcoming project of mine.

Here are some notes and a simple example code for a subscriber.

Requirements

Requires Mosquitto to be installed.

On Linux with the apt-get package manager:

sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients

Note: mosquitto-clients is to get the mosquitto_pub to make it simple to try stuff from the command line.

Also install virtualenv if you want to use it (recommended):

sudo apt-get install python-virtualenv

Working directory

The use of virtualenv is optional but recommended for playing around with this example code.

mkdir mqtt-mosquitto-example
cd mqtt-mosquitto-example
virtualenv .
source bin/activate
pip install paho-mqtt

Subscriber code

import paho.mqtt.client as paho

def on_message(mosq, obj, msg):
    print "%-20s %d %s" % (msg.topic, msg.qos, msg.payload)
    mosq.publish('pong', 'ack', 0)

def on_publish(mosq, obj, mid):
    pass

if __name__ == '__main__':
    client = paho.Client()
    client.on_message = on_message
    client.on_publish = on_publish

    #client.tls_set('root.ca', certfile='c1.crt', keyfile='c1.key')
    client.connect("127.0.0.1", 1883, 60)

    client.subscribe("kids/yolo", 0)
    client.subscribe("adult/#", 0)

    while client.loop() == 0:
        pass

# vi: set fileencoding=utf-8 :

Test the subscriber example

First start the subscriber which will enter a loop waiting for new messages: ::bash ./subscriber.py

Then open a new terminal and send a message:

mosquitto_pub -d -h localhost -q 0 -t adult/pics -m "can i haz moar kittenz"

This should generate a message in the terminal running the subscriber.

Configure SSL/TLS

See mosquitto-tls on how to generate certificates and keys.

Once created you need to adjust /etc/mosquitto/mosquitto.conf and subscriber.py accordingly and then use mosquitto_pub with cert and key:

mosquitto_pub -d -h localhost --cafile root.ca --cert c1.crt --key c1.key -q 0 -t adult/pics -m "can i haz moar kittenz"

References

* http://jpmens.net/2013/02/25/lots-of-messages-mqtt-pub-sub-and-the-mosquitto-broker/
* https://www.justinribeiro.com/chronicle/2012/11/08/securing-mqtt-communication-between-ardruino-and-mosquitto/
* http://www.instructables.com/id/USB-RFID-Python-Pub-Sub-MQTT/
* http://mosquitto.org/documentation/python/
* https://pypi.python.org/pypi/paho-mqtt