代码之家  ›  专栏  ›  技术社区  ›  Harshad Holkar

使用Paho库通过MQTT协议向Azure IOT hub发送消息

  •  0
  • Harshad Holkar  · 技术社区  · 6 年前

    大家好,

    Azure物联网中心 协议( )通过使用 图书馆。我提到过 https://docs.microsoft.com/en-in/azure/iot-hub/iot-hub-mqtt-support

    下面是

    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()
    

    我在下面 错误 在运行 .

    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.
    

    enter image description here

    我在代码中使用的SAS令牌是

    sas_token ="SharedAccessSignature sr=PuneODCIOTHub.azure-devices.net%2Fdevices%2FMyDotnetDevice&sig=KqyeH0n2kez3Zyz3%2BnVnOVyAsG%2F65MYO95%2FrgdJjBzI%3D&se=1536300480"
    

    任何帮助都将不胜感激。提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Michael Xu    6 年前

    看来 sas_token 是不正确的,它不包含 %2Fdevices%2F{deviceid} . 我不知道你是怎么拿到令牌的,但我想你可以用 Device Explorer 用于生成SAS令牌的工具。

    enter image description here