[英]Python MQTT connection to Azure Iot Hub
我想使用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中心: https : //github.com/Azure/azure-iot-sdks/tree/master/python/device
此示例演示如何使用MQTT协议进行连接。
基本上,这是它的工作方式:
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)
正如@FarukCelik所说,没有适用于Python的Azure IoT SDK。
但是,根据我的经验,我认为使用Python中用于Azure IoTHub的现有SDK有四种可行的方法。
Paho
的Azure IoT SDK通过同一个Eclipse项目Paho
for JavaScript Client支持MQTT,因此我认为您可以尝试参考GitHub上的Azure NodeJS IoT SDK的源代码,以了解如何正确地将Paho Python客户端用于Azure IoTHub。 同时,在GitHub https://github.com/bechynsky/AzureIoTDeviceClientPY上有一个用于Azure IoTHub设备的非官方Python库。 您可以关注此项目存储库,但目前它仍处于开发阶段。
希望能帮助到你。 最好的祝福。
以下是使用paho(mosquitto)通过标准MQTT连接到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/<YOUR DEVICE ID>/messages/devicebound/#")
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)))
# Do this only if you want to send a reply message every time you receive one
client.publish("devices/<YOUR DEVICE ID>/messages/events", "REPLY", qos=1)
def on_publish(client, userdata, mid):
print "Sent message"
client = mqtt.Client(cleint_id=<YOUR DEVICE ID>, protocol=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="<YOUR NAMESPACE>.azure-devices.net/<YOUR DEVICE ID>",
password="<YOUR SHARED ACCESS SIGNATURE FOR THE DEVICE>")
client.tls_insecure_set(True) # You can also set the proper certificate using client.tls_set()
client.connect("<YOUR NAMESPACE>.azure-devices.net", port=8883)
client.loop_forever()
参考https://azure.microsoft.com/zh-cn/documentation/articles/iot-hub-sdks-summary/ Azure IoT SDK不包含Pyhon“尚”。 其他客户已经在https://feedback.azure.com/forums/321918-azure-iot中提出了这一要求。 (直接链接: https : //feedback.azure.com/forums/321918-azure-iot/suggestions/10522101-add-python-client-sdk )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.