Amazon web services 无法使用AWSIoTPythonSDK通过MQTT连接到AWS IoT核心

Amazon web services 无法使用AWSIoTPythonSDK通过MQTT连接到AWS IoT核心,amazon-web-services,aws-sdk,mqtt,aws-iot,aws-iot-core,Amazon Web Services,Aws Sdk,Mqtt,Aws Iot,Aws Iot Core,我一步一步地学习了AWS教程 我已经用*创建了开放式策略,注册了一个东西并将其附加到策略,生成、下载并激活了证书。我尝试使用AWS IoT SDK for Python v2和原始SDK连接并发布到订阅,但两者都不起作用。我使用的代码直接来自AWS的示例连接代码,但它们只是不连接 在使用AWS IoT SDK for Python v2时,我收到以下错误消息: RuntimeError: 1038 (AWS_IO_FILE_VALIDATION_FAILURE): A file was read

我一步一步地学习了AWS教程

我已经用*创建了开放式策略,注册了一个东西并将其附加到策略,生成、下载并激活了证书。我尝试使用AWS IoT SDK for Python v2和原始SDK连接并发布到订阅,但两者都不起作用。我使用的代码直接来自AWS的示例连接代码,但它们只是不连接

在使用AWS IoT SDK for Python v2时,我收到以下错误消息:

RuntimeError: 1038 (AWS_IO_FILE_VALIDATION_FAILURE): A file was read and the input did not match the expected value
TimeoutError: [Errno 60] Operation timed out
使用原始SDK时,我收到以下错误消息:

RuntimeError: 1038 (AWS_IO_FILE_VALIDATION_FAILURE): A file was read and the input did not match the expected value
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和一个公立学校网络)

我回家测试了它,它工作得非常好。如果您有同样的问题,请尝试对网络进行故障排除。我想我的学校会阻止MQTT或其他东西。

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


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

如果您有一个理论认为您的学校阻止了8883端口(这似乎不太可能),您可以通过连接一个公共MQTT代理(google it)来验证该理论。如果它也失败了,那么您有90%的确认率(除非有其他问题)。