美文网首页MQTT
MQTT Client paho.mqtt.python使用简介

MQTT Client paho.mqtt.python使用简介

作者: EMQ | 来源:发表于2018-07-18 21:43 被阅读234次

    简介

    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君的博客。

    相关文章

      网友评论

        本文标题:MQTT Client paho.mqtt.python使用简介

        本文链接:https://www.haomeiwen.com/subject/tomapftx.html