MQTT Client paho.mqtt.python使用简介

╄→гoц情女王★ 提交于 2020-08-18 12:55:28

简介

MQTT协议目前可能是物联网最为流行的传输协议,那么如何使用Python作为客户端,和MQTT服务器端进行交互?

本文将以paho.mqtt.python (https://github.com/eclipse/paho.mqtt.python)作为客户端,EMQ为MQTT Broker来介绍paho与EMQ之间交互。

安装MQTT Broker: EMQ

EMQ是目前开源社区最为流行的MQTT Broker,之前EMQ君的博客上已经对如何在不同的操作系统安装,本文不再赘述。

在Ubuntu上安装EMQ,请点击这里;在Windows上安装EMQ,请点击这里

准备paho.mqtt.python

Python安装请参考这三篇文章:Linux系统python安装Windows系统Python安装Mac系统Python安装

EMQ君建议Python版本为python3.6(paho建议版本为2.7+和3.2+)

解压paho.mqtt.python-master.zip

打开命令行窗口,切换到解压后paho目录,安装paho

python setup.py install

Windows安装完成后paho文件在Python\Lib\site-packages\paho_mqtt-1.3.1-py3.6.egg\paho\mqtt目录。

 

Ubuntu安装完成后paho文件在/usr/local/lib/python3.6/dist-packages/paho_mqtt-1.3.1-py3.6.egg/paho/mqtt/目录。

 

其中client.py文件中主要Client用法如下:

  • 使用 connect() / connect_async() 连接Broker
  • 调用 loop() 保持与Broker网络连接
  • 使用 loop_start() 调用一个loop()进程
  • 使用 loop_forever() 保持 loop()调用
  • 使用 subscribe() 订阅主题并接收消息
  • 使用 publish() 发布消息
  • 使用 disconnect() 与Broker断开连接

使用回调函数使Broker返回数据可用,例子如下:

 

def on_connect(client, userdata, flags, rc):
  print("Connection returned " + str(rc))
client.on_connect = on_connect

所有的回调都有一个“client”和一个“userdata”参数,“client”是调用回调的客户端实例,“userdata”是任何类型的用户数据,可以在创建新客户端实例时设置或者使用user_data_set(userdata)

on_connect(client, userdata, flags, rc)

当Broker响应我们请求时调用,“flags” 是一个包含Broker响应参数的字典:flags['session present'] –此标志仅对于干净会话设置为0,如果设置session=0,用于客户端重新连接到之前Broker是否仍然保存之前会话信息,如果设1,会话一直存在。“rc”值用于判断是否连接成功:

 

0: 连接成功
1: 连接失败-不正确的协议版本
2: 连接失败-无效的客户端标识符
3: 连接失败-服务器不可用
4: 连接失败-错误的用户名或密码
5: 连接失败-未授权
6-255: 未定义.

on_disconnect(client, userdata, rc)

当客户端与Broker断开时调用

on_message(client, userdata, message)

在客户端订阅的主题上接收到消息时调用,“message”变量是一个MQTT消息描述所有消息特征

on_publish(client, userdata, mid)

当使用publish()发送的消息已经完成传输到代理时调用。对于QoS级别为1和2的消息,这意味着适当的握手已经完成。对于QoS 0,这仅仅意味着消息已经离开客户端。“mid”变量是从相应的publish()调用返回的中间变量。这个回调很重要,因为即使publish()调用返回成功,也并不总是意味着消息已经被发送

on_subscribe(client, userdata, mid, granted_qos)

当Broker响应订阅请求时调用,“mid”变量是从相应的subscribe()调用返回的中间变量,“granted_qos”变量是每次发送不同订阅请求Qos级别的列表

on_unsubscribe(client, userdata, mid)

当Broker响应取消订阅请求时调用,“mid“变量是从相应的unsubscribe()调用返回的中间变量

on_log(client, userdata, level, buf)

当客户端有日志信息时调用,定义允许调试,“level“变量是消息级别包含MQTT_LOG_INFO, MQTT_LOG_NOTICE, MQTT_LOG_WARNING, MQTT_LOG_ERR, MQTT_LOG_DEBUG,消息本身是buf。

使用举例

paho连接并订阅主题

使用paho建立连接,并订阅及发布主题。连接前EMQ控制台显示信息如下所示。

 

Pub代码如下:

 

import paho.mqtt.client as mqtt
 
def on_connect(client, userdata, flags, rc):
  print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
  print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("127.0.0.1", 1883, 600)
client.publish('emqtt',payload='Hello,EMQ!',qos=0)
client.loop_start()

运行后显示如下图所示。

 

Sub代码如下,

 

import paho.mqtt.client as mqtt
 
def on_connect(client, userdata, flags, rc):
  print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
  print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("127.0.0.1", 1883, 600)
client.subscribe('emqtt',qos=0)
client.loop_start()

运行后显示如下图所示。

 

执行代码后EMQ控制台显示信息

 

总结

paho客户端与MQTT交互的相关功能介绍到这里,如果读者还有继续了解更多的话,请关注EMQ君的博客。


更多信息请访问我们的官网 emqx.io,或关注我们的开源项目 github.com/emqx/emqx ,详细文档请访问 官方文档



作者:EMQ
链接:https://www.jianshu.com/p/b76dbc675141
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!