Smit Gardhariya Smit Gardhariya - 4 months ago 89
Python Question

MQTT over websocket in python

is there any support in python to subscribe on mqtt broker with port 8080

import sys
import paho.mqtt.client as mqtt

def on_connect(mqttc, obj, flags, rc):
print("rc: "+str(rc))

def on_message(mqttc, obj, msg):
print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))

def on_publish(mqttc, obj, mid):
print("mid: "+str(mid))

def on_subscribe(mqttc, obj, mid, granted_qos):
print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(mqttc, obj, level, string):
print(string)

mqttc = mqtt.Client()
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
mqttc.connect("test.mosquitto.org", 8080, 60)
mqttc.subscribe("test/iot", 0)

mqttc.loop_forever()


i can not connect with this code. Mosquitto has websocket support at port 8080 but this paho library does not work for it. any solution for python?
i am using python 2.7 on windows 10.

Answer

The Paho MQTT module introduced websocket support some days ago. I don't think it is released yet, but you can install from the master under Linux branch using

pip install git+git://github.com/eclipse/paho.mqtt.python.git

Also works under windows. (Thanks for info from the comments)

You can use the websockets as transport by connecting with

mqttc = mqtt.Client(transport="websockets")

UPDATE:

If you try to use the websocket protocol with the python client because you alsow need to connect a browser client (for example MQTT.js) then you can also configure mosquitto to listen to websockets and the normal mqtt protocol.

Simply create a configuration file for example in

/etc/mosquitto/mosquitto.conf

with the following contents:

listener 1883
protocol mqtt

listener 9001
protocol websockets

Then you can then run mosquitto with

mosquitto -c /etc/mosquitto/mosquitto.conf

Your python client then connects to port 1883 and the browser client to 9001

Comments