使用 Paho 库通过 MQTT 协议向 Azure IOT 中心发送消息
Sending messages to Azure IOT hub through MQTT protocol using Paho library
大家好,
我正在尝试通过 MQTT 协议将遥测消息发送到 Azure IOT hub(使用 Python ) 通过使用 Paho 库。我已经提到
https://docs.microsoft.com/en-in/azure/iot-hub/iot-hub-mqtt-support (Microsoft Docs) 并遵循与文档完全相同的步骤。但是我在 运行 代码时遇到错误。
下面是python代码
from paho.mqtt import client as mqtt
import ssl
path_to_root_cert = "C:\Python_Files\Digicert_Cert.txt"
device_id = "MyDeviceName"
sas_token = "SharedAccessSignature sr=MyHubName.azure-devices.net&sig=UclWeYtF5WSy4QUvTQvDF1ml2fVze0VFpv4e7YLFdQE%3D&se=1567761926&skn=iothubowner"
iot_hub_name = "MyHubName"
def on_connect(client, userdata, flags, rc):
print ("Device connected with result code: " + str(rc))
def on_disconnect(client, userdata, rc):
print ("Device disconnected with result code: " + str(rc))
def on_publish(client, userdata, mid):
print ("Device sent message")
client = mqtt.Client(client_id=device_id, protocol=mqtt.MQTTv311)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_publish = on_publish
client.username_pw_set(username=iot_hub_name+".azure-devices.net/" + device_id, password=sas_token)
client.tls_set(ca_certs=path_to_root_cert, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1, ciphers=None)
client.tls_insecure_set(False)
client.connect(iot_hub_name+".azure-devices.net", port=8883)
client.publish("devices/" + device_id + "/messages/events/", "{id=123}", qos=1)
client.loop_forever()
我收到以下 错误 而 运行 python 代码 .
Traceback (most recent call last):
File "C:\Python_Files\Python Script.py", line 27, in <module>
client.connect(iot_hub_name+".azure-devices.net", port=8883)
File "C:\Python27\lib\site-packages\paho\mqtt\client.py", line 839, in connect
return self.reconnect()
File "C:\Python27\lib\site-packages\paho\mqtt\client.py", line 962, in reconnect
sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
File "C:\Python27\lib\socket.py", line 575, in create_connection
raise err
error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
我正在使用设备资源管理器工具生成 SAS 令牌。下面是相同
的截图
我在代码中使用的 SAS 令牌是
sas_token ="SharedAccessSignature sr=PuneODCIOTHub.azure-devices.net%2Fdevices%2FMyDotnetDevice&sig=KqyeH0n2kez3Zyz3%2BnVnOVyAsG%2F65MYO95%2FrgdJjBzI%3D&se=1536300480"
如有任何帮助,我们将不胜感激。提前致谢。
您的 post 中的 sas_token
似乎不正确,它不包含 %2Fdevices%2F{deviceid}
。我不知道你是如何获得令牌的,但我认为你可以使用 Device Explorer 工具来生成 SAS 令牌。
大家好,
我正在尝试通过 MQTT 协议将遥测消息发送到 Azure IOT hub(使用 Python ) 通过使用 Paho 库。我已经提到 https://docs.microsoft.com/en-in/azure/iot-hub/iot-hub-mqtt-support (Microsoft Docs) 并遵循与文档完全相同的步骤。但是我在 运行 代码时遇到错误。
下面是python代码
from paho.mqtt import client as mqtt
import ssl
path_to_root_cert = "C:\Python_Files\Digicert_Cert.txt"
device_id = "MyDeviceName"
sas_token = "SharedAccessSignature sr=MyHubName.azure-devices.net&sig=UclWeYtF5WSy4QUvTQvDF1ml2fVze0VFpv4e7YLFdQE%3D&se=1567761926&skn=iothubowner"
iot_hub_name = "MyHubName"
def on_connect(client, userdata, flags, rc):
print ("Device connected with result code: " + str(rc))
def on_disconnect(client, userdata, rc):
print ("Device disconnected with result code: " + str(rc))
def on_publish(client, userdata, mid):
print ("Device sent message")
client = mqtt.Client(client_id=device_id, protocol=mqtt.MQTTv311)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_publish = on_publish
client.username_pw_set(username=iot_hub_name+".azure-devices.net/" + device_id, password=sas_token)
client.tls_set(ca_certs=path_to_root_cert, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1, ciphers=None)
client.tls_insecure_set(False)
client.connect(iot_hub_name+".azure-devices.net", port=8883)
client.publish("devices/" + device_id + "/messages/events/", "{id=123}", qos=1)
client.loop_forever()
我收到以下 错误 而 运行 python 代码 .
Traceback (most recent call last):
File "C:\Python_Files\Python Script.py", line 27, in <module>
client.connect(iot_hub_name+".azure-devices.net", port=8883)
File "C:\Python27\lib\site-packages\paho\mqtt\client.py", line 839, in connect
return self.reconnect()
File "C:\Python27\lib\site-packages\paho\mqtt\client.py", line 962, in reconnect
sock = socket.create_connection((self._host, self._port), source_address=(self._bind_address, 0))
File "C:\Python27\lib\socket.py", line 575, in create_connection
raise err
error: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
我正在使用设备资源管理器工具生成 SAS 令牌。下面是相同
我在代码中使用的 SAS 令牌是
sas_token ="SharedAccessSignature sr=PuneODCIOTHub.azure-devices.net%2Fdevices%2FMyDotnetDevice&sig=KqyeH0n2kez3Zyz3%2BnVnOVyAsG%2F65MYO95%2FrgdJjBzI%3D&se=1536300480"
如有任何帮助,我们将不胜感激。提前致谢。
您的 post 中的 sas_token
似乎不正确,它不包含 %2Fdevices%2F{deviceid}
。我不知道你是如何获得令牌的,但我认为你可以使用 Device Explorer 工具来生成 SAS 令牌。