Python快速上手paho-mqtt物联网

Posted 以梦为马&不负韶华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python快速上手paho-mqtt物联网相关的知识,希望对你有一定的参考价值。


前言

在我另一篇[Python快速实现MQTT双向订阅发布](https://blog.csdn.net/m0_47958289/article/details/115004791) ,已经详细介绍了相关概念,环境的搭建,代码方面不够完善,下面是完善后的代码。后面还会更新阿里云aliyun-iot-linkkit,这是阿里云物联网官方封装paho-mqtt后的,结合阿里云物联网平台使用更加方便,同时也可以将阿里云aliyun-iot-linkkit相关属性解析后,继续使用paho-mqtt。

提示:以下是本篇文章正文内容,下面案例可供参考

一、示例代码

如果代码看不懂,建议结合Python paho-mqtt 模块使用,解析和实战相结合。学习,也欢迎留言私信交流

import json
import sys


# 引入mqtt包
import paho.mqtt.client as mqtt
# 使用独立线程运行
from threading import Thread


# 建立mqtt连接
def on_connect(client, userdata, flag, rc):
    if rc == 0:
        # 连接成功
        print("Connection successful")
    elif rc == 1:
        # 协议版本错误
        print("Protocol version error")
    elif rc == 2:
        # 无效的客户端标识
        print("Invalid client identity")
    elif rc == 3:
        # 服务器无法使用
        print("server unavailable")
    elif rc == 4:
        # 错误的用户名或密码
        print("Wrong user name or password")
    elif rc == 5:
        # 未经授权
        print("unaccredited")
    print("Connect with the result code " + str(rc))
    # 订阅频道
    # client.subscribe('31765425213673472', qos=2)


# 当与代理断开连接时调用
def on_disconnect(client, userdata, rc):
    #  rc == 0回调被调用以响应disconnect()调用
    # 如果以任何其他值断开连接是意外的,例如可能出现网络错误。
    if rc != 0:
        print("Unexpected disconnection %s" % rc)


# 当收到关于客户订阅的主题的消息时调用。
def on_message(client, userdata, msg):
    print(msg.topic + " " + str(msg.payload))
    json_msg = json.loads(msg.payload.decode('utf-8'))
    # 加入个人逻辑
    pass


# 当使用使用publish()发送的消息已经传输到代理时被调用。
def on_publish(client, obj, mid):
    print("on_Publish, mid: " + str(mid))


# 当代理响应订阅请求时被调用
def on_subscribe(client, userdata, mid, granted_qos):
    print("on_Subscribed: " + str(mid) + " " + str(granted_qos))


# 当代理响应取消订阅请求时调用。
def on_unsubscribe(client, userdata, mid):
    print("on_unsubscribe, mid: " + str(mid))


# 当客户端有日志信息时调用
def on_log(client, obj, level, string):
    print("on_Log:" + string)


# mqtt订阅启动函数
def mqtt_subscribe():
    global client
    client.loop_forever()


# mqtt发布启动函数
def mqtt_publish(sensor_data, topic='xxxxxxxx', qos=2):
    global client
    try:
        client.publish(topic=topic, payload=sensor_data, qos=qos)
    except KeyboardInterrupt:
        print("EXIT")
        # 这是网络循环的阻塞形式,直到客户端调用disconnect()时才会返回。它会自动处理重新连接。
        client.disconnect()
        sys.exit(0)


client = mqtt.Client()


# 启动函数
def mqtt_run():
    # 账号密码验证放到最前面
    client.username_pw_set('user', 'user')
    # client = mqtt.Client()
    # 建立mqtt连接
    client.on_connect = on_connect
    client.on_subscribe = on_subscribe
    client.on_message = on_message
    # 当与代理断开连接时调用
    client.on_disconnect = on_disconnect
    client.on_log = on_log

    # 绑定 MQTT 服务器地址
    broker_ip = ''
    # MQTT服务器的端口号
    # client.connect(host=broker_ip, port=1883, keepalive=6000)
    client.connect(host=broker_ip, port=1883)
    client.reconnect_delay_set(min_delay=1, max_delay=2000)
    client.subscribe('xxxxxxxx', qos=0)
    # 创建线程去持续接收订阅信息
    subscribe_thread = Thread(target=mqtt_subscribe)
    subscribe_thread.start()


if __name__ == "__main__":
    mqtt_run()

总结

欢迎各位交流,如有错误,欢迎指正,Figting!

以上是关于Python快速上手paho-mqtt物联网的主要内容,如果未能解决你的问题,请参考以下文章

Python快速上手paho-mqtt物联网

Python快速上手paho-mqtt物联网

IoT 设备接入服务,你从这篇博客就能快速上手~

Python轻应用示例

物联网(二)---原理分析[STM32+OneNET+ESP8266]

从阿里云mqtt配置解析到用户名密码等信息