簡體   English   中英

Python paho-MQTT 與 azure IoT-Hub 的連接

[英]Python paho-MQTT connection with azure IoT-Hub

我正在嘗試使用 MQTT 連接 Azure IoT-Hub 並發送和接收消息。

我正在關注這里給出的官方文檔

但它總是與結果代碼斷開連接:1,盡管它永遠不會進入 on_connect 函數。 但是,如果我嘗試在函數之外發布它(連接字符串后的注釋行),它會進入 on_publish 方法。

我在這里使用的設備是我在 Azure IoT 套件中創建的模擬設備

這是我正在使用的代碼

from paho.mqtt import client as mqtt


def on_connect(client, userdata, flags, rc):
    print "Connected with result code: %s" % rc
    client.subscribe("devices/MyTestDevice02/messages/devicebound/#")
    client.publish("devices/MyTestDevice02/messages/events", "Hello World!")


def on_disconnect(client, userdata, rc):
    print "Disconnected with result code: %s" % rc


def on_message(client, userdata, msg):
    print " - ".join((msg.topic, str(msg.payload)))
    client.publish("devices/MyTestDevice02/messages/events", "REPLY", qos=1)


def on_publish(client, userdata, mid):
    print "Sent message"


client = mqtt.Client("MyTestDevice02", mqtt.MQTTv311)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.on_publish = on_publish
client.username_pw_set(username="USERNAME.azure-devices.net/MyTestDevice02",
                       password="SharedAccessSignature=SharedAccessSignature sr=USERNAME.azure-devices.net%2fdevices%2fMyTestDevice02&sig=xxxxxx5rRr7c%3d&se=1492318301")
client.tls_insecure_set(True) # You can also set the proper certificate using client.tls_set()
client.connect("USERNAME.azure-devices.net", port=8883)
#client.publish("devices/MyTestDevice02/messages/events", "Hello World!")
client.loop_forever()

任何幫助表示贊賞。 而且我不想使用 sdk,這就是我嘗試直接發布它的原因。

您尚未啟用 TLS - 您需要使用tls_set()將 CA 證書傳遞給信任。 tls_insecure_set()使用tls_insecure_set()沒有任何作用。

MS TechNet 有一個類似的帖子https://social.technet.microsoft.com/Forums/en-US/0c2cc683-c50f-428c-90ca-eeff132ba5e9/python-azure-iot-hub-mqtt-direct-with- basic-library?forum=windowsazuredevelopment

建議您可以嘗試使用其他支持 Azure IoTHub 的語言,例如 Node.js 或 Java。

同時,您可以參考我的建議,通過使用其他支持語言擴展 Python,在 SO 線程Python MQTT 連接到 Azure Iot Hub 中使用 Python 使用 Azure IoTHub。

有任何問題,請隨時告訴我。

終於解決了這個問題。 這是設置 tls 的問題,由於某種原因我無法在 python 中做到這一點,所以我使用了 C#,

這是它的一個簡單版本。

client = new MqttClient("MyTestHub.azure-devices.net", 8883, true, MqttSslProtocols.TLSv1_0, null, null);
byte code = client.Connect("MyDevice1", "MyTestHub.azure-devices.net/MyDevice123","Use My SAS token");
ushort msgId = client.Publish("devices/MyDevice1/messages/events/", Encoding.UTF8.GetBytes("Test Message"), 1, false);

我將Nuget庫用於 MQTT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM