AWS MQTT подключается из Python – получение не работаетPython

Программы на Python
Ответить
Anonymous
 AWS MQTT подключается из Python – получение не работает

Сообщение Anonymous »

Я учусь использовать MQTT в AWS IoT. Цель состоит в том, чтобы просто публиковать и получать сообщения между тестовым клиентом AWS IoT MQTT и сценарием Python.
Я могу успешно публиковать данные из своего кода Python, но не могу получать.
Публикация работает, если я устанавливаю для QOS значение «AT_MOST_ONCE», и в этом случае я успешно получаю «Привет» в AWS. Если я устанавливаю QOS на AT_LEAST_ONCE, он НЕ работает и остается в состоянии «Ожидание завершения публикации...».
Следует также отметить, что когда я пытался зациклить публикацию с паузой в 2,5 секунды между ними, произошел сбой с ошибкой соединения после успешной отправки одного сообщения «Привет».

Код: Выделить всё

from awscrt import io, mqtt, auth, http
from awsiot import mqtt_connection_builder
import time

# Define the same connection parameters as your publish script
ENDPOINT = "123.iot.eu-north-1.amazonaws.com"
CLIENT_ID = "pc-v3"
PATH_TO_CERTIFICATE = "certificates/certs-certificate.pem.crt"
PATH_TO_PRIVATE_KEY = "certificates/certs-private.pem.key"
PATH_TO_AMAZON_ROOT_CA_1 = "certificates/AmazonRootCA1.pem"
TOPIC = "mqtt_test"

def publish_message(message: str):
print(f"Attempting to publish message: {message}")
publish_future, packet_id = mqtt_connection.publish(
topic=TOPIC,
payload=message,
qos=mqtt.QoS.AT_MOST_ONCE
)
print("Waiting for publish to complete...")
publish_future.result()
print("Publish completed")

# Define callback for incoming messages
def on_message_received(topic, payload, **kwargs):
print(f"Received message from topic '{topic}': {payload}")

# Spin up resources
event_loop_group = io.EventLoopGroup(1)
host_resolver = io.DefaultHostResolver(event_loop_group)
client_bootstrap = io.ClientBootstrap(event_loop_group, host_resolver)

mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=ENDPOINT,
cert_filepath=PATH_TO_CERTIFICATE,
pri_key_filepath=PATH_TO_PRIVATE_KEY,
client_bootstrap=client_bootstrap,
ca_filepath=PATH_TO_AMAZON_ROOT_CA_1,
client_id=CLIENT_ID,
clean_session=False,
keep_alive_secs=60
)

print(f"Connecting to {ENDPOINT} with client ID '{CLIENT_ID}'...")
connect_future = mqtt_connection.connect()
connect_future.result()
print("Connected!")

print(f"Subscribing to topic '{TOPIC}'...")
subscribe_future, packet_id = mqtt_connection.subscribe(
topic=TOPIC,
qos=mqtt.QoS.AT_LEAST_ONCE  ,
callback=on_message_received
)

publish_message("Hi")
Когда я пытаюсь получить сообщения в своем коде Python, он не работает даже с AT_MOST_ONCE. Последняя часть фрагмента приведена ниже, и она застревает на первой строке «Подписка и прослушивание сообщений...», когда я публикую сообщения в тестовом клиенте AWS MQTT.

Код: Выделить всё

print(f"Connecting to {ENDPOINT} with client ID '{CLIENT_ID}'...")
connect_future = mqtt_connection.connect()
connect_future.result()
print("Connected!")

print(f"Subscribing to topic '{TOPIC}'...")
subscribe_future, packet_id = mqtt_connection.subscribe(
topic=TOPIC,
qos=mqtt.QoS.AT_MOST_ONCE  ,
callback=on_message_received
)

#publish_message("Hi")
print("Subscribed and listening for messages...")
subscribe_future.result()
print("Subscribed and listening for messages...")
try:
# Keep the script running to listen for messages
while True:
print("looping")
subscribe_future.result()

time.sleep(1)

except KeyboardInterrupt:
print("Disconnecting...")
disconnect_future = mqtt_connection.disconnect()
disconnect_future.result()
print("Disconnected!")
Сертификат, прикрепленный к вещи:

Код: Выделить всё

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Connect",
"iot:Publish",
"iot:Subscribe",
"iot:*",
"iot:Receive"
],
"Resource": [
"arn:aws:iot:eu-north-1:123:client/pc-v3",
"arn:aws:iot:eu-north-1:123:client/${iot:Connection.Thing.ThingName}",
"arn:aws:iot:eu-north-1:123:topic/mqtt_test",
"arn:aws:iot:eu-north-1:123:topicfilter/${iot:Connection.Thing.ThingName}/",
"arn:aws:iot:eu-north-1:123:topic/${iot:Connection.Thing.ThingName}/"
]
}
]
}
libs: awscrt 0.28.1
awsiot 0.1.3
awsiotsdk 1.26.0
boto3 1.40.70
Я застрял и буду признателен за любую помощь или идеи, где можно попробовать отладить мой код.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ot-working
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»