簡體   English   中英

MQTT 發布到 AWS IoT Core

[英]MQTT publishing to AWS IoT Core

我正在嘗試使用 paho-mqtt 將數據框中的數據(最初在 txt 文件中)發布到 AWS IoT Core。 我的發布腳本設置如下:

# paho mqtt
import paho.mqtt.client as mqtt

clientID = "iotconsole-somenumber-0"
broker = "alphanumeric-ats.iot.us-west-1.amazonaws.com"
port = 8883

pub = mqtt.Client(clientID)
pub.tls_set("certs/AmazonRootCA1.pem", certfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_certificate.pem.crt", keyfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_private.pem.key")
pub.connect(broker, port)
pub.publish("awsiot_test", dataframe, qos = 1)

但是,當我運行此腳本時,出現以下錯誤。 我認為我的東西證書做錯了。 但不能歸零。

  File ~\PyProj\projfolder\code.py:9 in <module>
    pub.tls_set("certs/AmazonRootCA1.pem", certfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_certificate.pem.crt", keyfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_private.pem.key")

  File ~\anaconda3\lib\site-packages\paho\mqtt\client.py:796 in tls_set
    context.load_cert_chain(certfile, keyfile, keyfile_password)

FileNotFoundError: [Errno 2] No such file or directory

我認為這是一個證書文件 -/_ 問題或擴展問題。 但是,還沒有找到解決辦法。 我該如何解決? 謝謝!

根據評論,您看到的錯誤是由調用context.load_cert_chain(certfile, keyfile, keyfile_password);觸發的。 並指示其中一個文件( certs/AmazonRootCA1.pem和/或certs/a0c9496....afd4f67f_certificate.pem.crt )不存在(這可能與權限相關)。

為了幫助顯示最可能的原因,我復制並運行了您的代碼,結果相同:

python3 app.py
Traceback (most recent call last):
  File "/workspaces/test/app.py", line 9, in <module>
    pub.tls_set("certs/AmazonRootCA1.pem", certfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_certificate.pem.crt", keyfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_private.pem.key")
  File "/usr/local/pip-global/paho/mqtt/client.py", line 796, in tls_set
    context.load_cert_chain(certfile, keyfile, keyfile_password)
FileNotFoundError: [Errno 2] No such file or directory

然后我創建了證書文件:

mkdir certs 
touch certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_certificate.pem.crt

並再次運行應用程序(不做其他更改):

python3 app.py
Traceback (most recent call last):
  File "/workspaces/test/app.py", line 9, in <module>
    pub.tls_set("certs/AmazonRootCA1.pem", certfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_certificate.pem.crt", keyfile = "certs/a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_private.pem.key")
  File "/usr/local/pip-global/paho/mqtt/client.py", line 796, in tls_set
    context.load_cert_chain(certfile, keyfile, keyfile_password)
ssl.SSLError: [SSL] PEM lib (_ssl.c:4044)

您會注意到現在有一​​個不同的錯誤(證書現在存在但不是有效的證書)。 添加有效的crt文件將導致再次出現No such file or directory錯誤(由於嘗試加載密鑰文件)。

To complete the example I generated a test certificate and put the certificate into AmazonRootCA1.pem and a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_certificate.pem.crt and the key into a0c94969f1e7d914d6fe54425d772e8d4611a4710d460e9f56374ea0afd4f67f_private.pem.key and ran the app:

python3 app.py
Traceback (most recent call last):
  File "/workspaces/test/app.py", line 10, in <module>
    pub.connect(broker, port)
  File "/usr/local/pip-global/paho/mqtt/client.py", line 914, in connect
    return self.reconnect()
  File "/usr/local/pip-global/paho/mqtt/client.py", line 1044, in reconnect
    sock = self._create_socket_connection()
  File "/usr/local/pip-global/paho/mqtt/client.py", line 3685, in _create_socket_connection
    return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source)
  File "/usr/local/lib/python3.9/socket.py", line 823, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/local/lib/python3.9/socket.py", line 954, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

這表明擁有有效的證書/密鑰可以導致函數成功完成(它現在正在嘗試連接到alphanumeric-ats.iot.us-west-1.amazonaws.com將失敗)。

您的問題沒有提供足夠的信息來進行任何進一步的調查; 如果您仍然遇到問題,請嘗試復制上述過程,這很可能有助於找到原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM