python 連接mqtt發布和訂閱信息


一、下載依賴包

pip install paho-mqtt

二、創建監聽訂閱和發布

  • 監聽程序,訂閱和發布,可以根據訂閱的信息進行處理
    import paho.mqtt.client as mqtt

    import json
    import time

    host = '127.0.0.1'  # mqtt服務器地址
    port = 1883
    client_id = '101'  # 客戶端id,自己設置

    # 同時訂閱多個主題方式使用#通配符
    # '#'號是通配符,訂閱匹配#平級及子級主題的所有主題
    # '+'號是單層通配符,在主題過濾器的任意層級都可以使用單層通配符,包括第一個和最后一個層級。然而它必須占據過濾器的整個層級。可以在主題過濾器中的多個層級中使用它,也可以和多層通配符一起使用。
    # 消息服務質量,0最多一次,1最少一次,2只一次

    def on_connect(client, userdata, flags, rc):
        '''
        訂閱信息
        :param client: 鏈接
        :param userdata:
        :param flags:
        :param rc:
        :return:
        '''
        print('鏈接-----------------------------')
        print(f'Connected with result code {rc}---鏈接結束-------------')
        client.subscribe('data/send')
        pass


    def on_message(client, userdata, msg):
        '''
        消息主題
        :param client:
        :param userdata:
        :param msg:
        :return:
        '''
        print('信息-------------------------------')
        print(f'主題:{msg.topic} 消息:{msg.payload.decode("utf-8")}------信息結束-------')
        pass


    def on_subscribe(client, userdata, mid, granted_qos):
        '''
        消息狀態
        :param client:
        :param userdata:
        :param mid:
        :param granted_qos:
        :return:
        '''
        print('狀態--------------------------')
        print(client)
        print(userdata)
        print(mid)
        print(f'On Subscribed: qos = {granted_qos}---------狀態結束--------')
        pass


    def on_disconnect(client, userdata, rc):
        if rc != 0:
            print(f'Unexpeced disconnection {rc}--disconnect')
            pass
        pass

    data = {
        "type": 2,
        "timestamp": time.time(),
        "messageId": "gajisrwa-fdsarakm-fdas",
        "command": "xx/recommend",
        "data": {
            "openId": "xxxx",
            "appId": 1001,
            "recommendType": "temRecommend"
        }
    }

    param = json.dumps(data)
    client = mqtt.Client(client_id)
    client.username_pw_set("admin", "public")
    client.on_connect = on_connect
    client.on_message = on_message
    client.on_subscribe = on_subscribe
    client.on_disconnect = on_disconnect
    client.connect(host, port, 60)

    client.subscribe("data/send")
    client.publish("data/send", payload=param, qos=0)     # 發送消息
    # print(client.loop_read())
    # print(client.loop_write())
    # print(client.subscribe('data/send', qos=0))
    client.loop_forever()

  • 發布信息
import sys
import paho.mqtt.publish as publish
import paho.mqtt.subscribe as subscribe

# 發布信息
publish.single('data/send', '{"hello":2}', hostname='127.0.0.1')
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM