Невозможно подключиться к AWS IoT Core через MQTT с помощью AWSIoTPythonSDK

Я шаг за шагом следил за руководством по AWS. https://aws.amazon.com/premiumsupport/knowledge-center/iot-core-publish-mqtt-messages-python/

Я создал открытую политику со знаком *, зарегистрировал вещь и прикрепил ее к политике, сгенерировал, загрузил и активировал сертификаты. Я попытался подключиться к подписке и опубликовать ее, используя как AWS IoT SDK для Python v2, так и исходный SDK, но ни один из них не работает. Код, который я использую, взят прямо из демонстрационного примера кода подключения AWS, но они просто не подключаются.

При использовании AWS IoT SDK для Python v2 я получаю следующее сообщение об ошибке:

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

(Я подверг цензуре конечную точку и идентификатор сертификата)

(Я использую macbook air и в сети государственной школы)


person ANassar    schedule 11.11.2020    source источник


Ответы (2)


Я пошел домой и протестировал его, и он отлично работает. Если у вас такая же проблема, попробуйте устранить неполадки в сети. Я думаю, моя школа блокирует MQTT или что-то в этом роде.

person ANassar    schedule 11.11.2020
comment
Если у вас есть теория, что ваша школа блокирует порт 8883 (что кажется маловероятным), вы можете проверить эту теорию, подключившись к одному из публичных брокеров MQTT (погуглите). Если это тоже не удается, то у вас есть 90% -ное подтверждение (если нет других проблем). - person Gambit Support; 13.11.2020

MQTT работает с конкретным номером порта 8883, который вы настроите в myAWSIoTMQTTClient.configureEndpoint (ENDPOINT, 8883).

В одном из моих курсов AWS IOT я узнал, что некоторые сетевые администраторы блокируют все порты, которые обычно не используются, чтобы избежать нежелательного трафика, а MQTT - это то, что характерно для отрасли IOT. Это могло быть причиной того, что это не сработало, когда вы попробовали в школьной сети, и сработало, когда вы попробовали дома.

person Deepak Chandrashekarappa    schedule 12.11.2020