我想使用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]连接尝试失败,因为连接方在一段时间后没有正确响应,或者 Build 的连接失败,因为连接的主机无法响应
有人知道为什么我无法连接到Iot Hub吗?
4 回答
现在有一个官方的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实例 .
正如@FarukCelik所说,没有适用于Python的Azure IoT SDK .
但是,根据我的经验,我认为在Python中使用现有的SDK for IoTHub有四种可行的方法 .
使用Azure IoT SDK for C扩展Python,您可以尝试引用https://docs.python.org/2/extending/extending.html来实现它 .
使用Azure IoT SDK for Java作为导入的Jython包,您可以尝试引用http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html以了解如何执行此操作 .
类似于第二种方式,将IronPython与Azure IoT SDK集成用于C#/ .Net,请参阅http://ironpython.net/documentation/dotnet/ .
用于NodeJS的Azure IoT SDK通过用于JavaScript Client的相同Eclipse项目
Paho
支持MQTT,因此我认为您可以尝试参考Azure NodeJS IoT SDK on GitHub的源代码以了解如何正确使用paho Python client for Azure IoTHub .同时,在GitHub https://github.com/bechynsky/AzureIoTDeviceClientPY上有一个用于Azure IoTHub设备的非官方Python库 . 您可以关注这个项目存储库,但它现在还处于开发阶段 .
希望能帮助到你 . 最好的祝福 .
以下是如何使用paho(mosquitto)通过标准MQTT连接到Azure IoT Hub:
参考https://azure.microsoft.com/en-gb/documentation/articles/iot-hub-sdks-summary/ Azure IoT SDK不包含Pyhon "yet" . 这已由https://feedback.azure.com/forums/321918-azure-iot中的其他客户提出 . (直接链接:https://feedback.azure.com/forums/321918-azure-iot/suggestions/10522101-add-python-client-sdk) .