编程语言
首页 > 编程语言> > 与Azure Iot Hub的Python MQTT连接

与Azure Iot Hub的Python MQTT连接

作者:互联网

我想使用Python MQTT连接到Azure Iot Hub.

Iot Hub需要用户名和SAS令牌.这是我的代码:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("$SYS/#")

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.username_pw_set("myHub.azure-devices.net/device1", "mySASToken")

client.connect("myHub.azure-devices.net", 1883, 60)

client.loop_forever()

但运行一段时间后,抛出此异常:

TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应

有人知道为什么我无法连接到Iot Hub吗?

解决方法:

现在有一个官方的Python SDK将设备连接到Azure IoT Hub:
https://github.com/Azure/azure-iot-sdks/tree/master/python/device

This sample演示了如何使用MQTT协议进行连接.

基本上,这是它的工作原理:

>创建设备客户端并为协议指定MQTT
>设置收到消息时将调用的回调
>使用send_event_async将消息发送到Azure IoT Hub实例.

from iothub_client import *

def send_confirmation_callback(message, result, userContext):
    print "Confirmation[%d] received for message with result = %s" % (userContext, result)

def receive_message_callback(message, counter):
    buffer = message.get_bytearray()
    size = len(buffer)
    print "Received Message"
    print "    Data: <<<%s>>> & Size=%d" % (buffer[:size], size)
    return IoTHubMessageDispositionResult.ACCEPTED

iotHubClient = IoTHubClient(connectionString, IoTHubTransportProvider.MQTT)
iotHubClient.set_message_callback(receive_message_callback, 0)
iotHubClient.send_event_async(message, send_confirmation_callback, 0)

标签:mqtt,python,azure,azure-iot-hub
来源: https://codeday.me/bug/20191002/1841414.html