无法使用AWSIoTPythonSDK通过MQTT连接到AWS IoT Core

时间:2020-11-11 22:46:37

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

我已逐步遵循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 SDK时,出现以下错误消息:

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)

2 个答案:

答案 0 :(得分:0)

我回家测试了一下,效果很好。如果您遇到同样的问题,请尝试对网络进行故障排除。我认为我的学校阻止了MQTT之类的事情。

答案 1 :(得分:0)

MQTT与特定的端口号8883一起使用,您将在myAWSIoTMQTTClient.configureEndpoint(ENDPOINT,8883)中对其进行配置。

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

相关问题