【问题标题】:Cant connect to AWS IoT Core via MQTT using AWSIoTPythonSDK无法使用 AWSIoTPythonSDK 通过 MQTT 连接到 AWS IoT Core
【发布时间】:2020-11-13 00:46:05
【问题描述】:

我已逐步按照 AWS 教程进行操作。 https://aws.amazon.com/premiumsupport/knowledge-center/iot-core-publish-mqtt-messages-python/

我创建了带有 * 的开放式策略,注册了一个事物并将其附加到策略中,生成、下载并激活了证书。我尝试使用适用于 Python v2 的 AWS IoT SDK 和原始 sdk 连接并发布到订阅,但都不起作用。我使用的代码直接来自 AWS 的演示示例连接代码,但它们不会连接。

使用适用于 Python v2 的 AWS IoT 开发工具包时,我收到以下错误消息:

RuntimeError: 1038 (AWS_IO_FILE_VALIDATION_FAILURE): A file was read and the input did not match the expected value

在使用原始 SDK 时,我收到以下错误消息:

TimeoutError: [Errno 60] Operation timed out

我正在使用的python代码:

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0

import time as t
import json
import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT

# Define ENDPOINT, CLIENT_ID, PATH_TO_CERT, PATH_TO_KEY, PATH_TO_ROOT, MESSAGE, TOPIC, and RANGE
ENDPOINT = "XXXXX-ats.iot.ap-southeast-2.amazonaws.com"
CLIENT_ID = "testDevice"
PATH_TO_CERT = "certs/XXXX-certificate.pem.crt"
PATH_TO_KEY = "certs/XXXX-private.pem.key"
PATH_TO_ROOT = "certs/root.pem"
MESSAGE = "Hello World"
TOPIC = "test/testing"
RANGE = 20

myAWSIoTMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient(CLIENT_ID)
myAWSIoTMQTTClient.configureEndpoint(ENDPOINT, 8883)
myAWSIoTMQTTClient.configureCredentials(PATH_TO_ROOT, PATH_TO_KEY, PATH_TO_CERT)

myAWSIoTMQTTClient.connect()
print('Begin Publish')
for i in range (RANGE):
    data = "{} [{}]".format(MESSAGE, i+1)
    message = {"message" : data}
    myAWSIoTMQTTClient.publish(TOPIC, json.dumps(message), 1) 
    print("Published: '" + json.dumps(message) + "' to the topic: " + "'test/testing'")
    t.sleep(0.1)
print('Publish End')
myAWSIoTMQTTClient.disconnect()

(我审查了端点和证书 ID)

(我使用的是 macbook air 并在公立学校网络上)

【问题讨论】:

    标签: amazon-web-services aws-sdk mqtt aws-iot aws-iot-core


    【解决方案1】:

    我回家测试了它,它运行良好。如果您有同样的问题,请尝试排除网络故障。我认为我的学校阻止了 MQTT 什么的。

    【讨论】:

    • 如果您认为您的学校阻止了端口 8883(这似乎不太可能),您可以通过连接到公共 MQTT 代理之一(谷歌搜索)来验证该理论。如果它也失败了,那么你有 90% 的确认(除非有其他问题)。
    【解决方案2】:

    MQTT 使用您将在 myAWSIoTMQTTClient.configureEndpoint(ENDPOINT, 8883) 中配置的特定端口号 8883。

    在我的 AWS IOT 课程中,我了解到一些网络管理员会阻止所有不常用的端口,以避免不必要的流量,而 MQTT 是物联网行业特有的。这可能是您在学校网络中尝试时不起作用而在家中尝试时起作用的原因。

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 2022-12-07
      • 2020-12-01
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2017-08-30
      相关资源
      最近更新 更多