5-python庫之-paho mqtt通訊

mqtt可以說是顯示物聯(lián)網(wǎng)上面應(yīng)用十分廣泛的協(xié)議了,其輕量、簡單、開放和易于實現(xiàn)等這些特點。paho也實現(xiàn)了python版的mqtt。

1.連接

連接調(diào)用connect接口,然后調(diào)用loop_forever后就開始跑了

connect的第三個參數(shù)為mqtt的心跳時間

on_connecton_disconnect為連接成功和斷開的回掉函數(shù),

import paho.mqtt.client as mqtt

mqttClient = mqtt.Client("python_test")


def on_disconnect(client, userdata, rc):
    print("mqtt broker lost "+str(rc))


def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))


if __name__ == '__main__':
    mqttClient.on_connect = on_connect
    mqttClient.on_disconnect = on_disconnect
    mqttClient.connect("192.168.18.1", 1883, 10)
    mqttClient.loop_forever()
    

2.SSL登錄

添加證書,只需要在調(diào)用connect函數(shù)之前,添加下面兩條內(nèi)容即可。

mqttClient.tls_set(ca_certs="cacert.pem", certfile=None, keyfile=None, cert_reqs=mqtt.ssl.CERT_REQUIRED,
                       tls_version=mqtt.ssl.PROTOCOL_TLSv1, ciphers=None)
    mqttClient.tls_insecure_set(True)

3.賬號密碼

設(shè)置賬號密碼,在調(diào)用connect函數(shù)之前,添加下面一條內(nèi)容即可。

mqttClient.username_pw_set("python", passwd)

4.WILL主題設(shè)置

設(shè)置WILL主題,在調(diào)用connect函數(shù)之前,使用will_set接口設(shè)置,添加will主題和will主題的payload

will_payload = {
    "ver":  "v1",
    "module": "offline",
    "api":  "disconnect",
    "param":  [{
        "k": "mac",
        "v": "DC4BDD1DFA48"
    }, {
        "k": "protypeid",
        "v": "PYTHON"
    }]
}
    
mqttClient.will_set("local/offline", payload=json.dumps(will_payload), qos=CLINET_TOPIC_QOS)

5.訂閱

主題的訂閱使用subscribe接口,一般在on_connect回調(diào)函數(shù)里面設(shè)置

訂閱完主題,我們的目的就是要收到訂閱的數(shù)據(jù),所以需要設(shè)置接收數(shù)據(jù)的回調(diào)函數(shù)on_message
,只要有數(shù)據(jù)發(fā)送過來on_message就會收到。

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# Author: ye.lin
# Time: 2020/02/24
# Describe:

import paho.mqtt.client as mqtt

mqttClient = mqtt.Client("python_test")

def on_disconnect(client, userdata, rc):
    print("mqtt broker lost "+str(rc))


def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    mqttClient.subscribe(local/broadcast, qos=1)


def on_message_come(lient, userdata, msg):
    print(msg.topic + " " + ":" + str(msg.payload))


if __name__ == '__main__':
    mqttClient.on_connect = on_connect
    mqttClient.on_disconnect = on_disconnect
    mqttClient.on_message = on_message_come

    mqttClient.tls_set(ca_certs="zgateway_cacert.pem", certfile=None, keyfile=None, cert_reqs=mqtt.ssl.CERT_REQUIRED,
                       tls_version=mqtt.ssl.PROTOCOL_TLSv1, ciphers=None)
    mqttClient.tls_insecure_set(True)

    mqttClient.connect("192.168.18.1", 6885, 10)
    mqttClient.loop_forever()

6.發(fā)布

發(fā)布使用publish接口,如下

    info_payload = {
        "msg":      "test"
    }
    mqttClient.publish("local/notify", payload=json.dumps(info_payload), qos=CLINET_TOPIC_QOS)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容