Python pahoMQTT与azure IoTHub的连接

2024-10-01 15:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用MQTT连接Azure IoT Hub并发送和接收消息。在

我遵循给定的官方文件here

但它总是与结果代码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,这就是为什么我要直接发布它。在


Tags: clientmessageondefconnecteventsmqttpublish
3条回答

终于解决了这个问题。 这是设置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);

我为MQTT使用了Nuget库。在

您尚未启用TLS-需要使用tls_set()将CA证书传递给信任。单独使用tls_insecure_set()没有任何作用。在

有一个类似的主题来自微软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的其他支持语言,例如节点.js或者Java。在

同时,您可以参考我的建议,在SO线程Python MQTT connection to Azure Iot Hub中使用azureiothub和Python,通过使用其他支持语言扩展Python。在

有任何问题,请随时告诉我。在

相关问题 更多 >

    热门问题