我正在尝试将亚马逊网络服务的IoT与Python结合使用。我正在实现一个MQTT客户端:
#Exte codigo SOLO SIRVE para escritorio
#NO USARLO en una PYCOM
#
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
from pathlib import Path
import time
#
cert_folder=Path("certificados")
# user specified callback function
def customCallback(client, userdata, message):
print("Received a new message: ")
print(message.payload)
print("from topic: ")
print(message.topic)
print("--------------\n\n")
# AWS general configuration
AWS_PORT = 8883
AWS_HOST = '*****.amazonaws.com'
AWS_ROOT_CA = cert_folder / "*****.pem"
AWS_CLIENT_CERT = cert_folder / "*****.cert.pem"
AWS_PRIVATE_KEY = cert_folder / "*****.private.key"
# For certificate based connection
myMQTTClient = AWSIoTMQTTClient("Pycom-client")
# For Websocket connection
# myMQTTClient = AWSIoTMQTTClient("Pycom-client", useWebsocket=True)
# Configurations
# For TLS mutual authentication
myMQTTClient.configureEndpoint(AWS_HOST, 8883)
# For Websocket
# myShadowClient.configureEndpoint(AWS_HOST, 443)
myMQTTClient.configureCredentials(AWS_ROOT_CA, AWS_PRIVATE_KEY, AWS_CLIENT_CERT)
# For Websocket, we only need to configure the root CA
# myMQTTClient.configureCredentials(AWS_ROOT_CA)
myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myMQTTClient.configureMQTTOperationTimeout(50) # 5 sec
#
if myMQTTClient.connect():
print('AWS connection succeeded')
myMQTTClient.publish("topic_1", "Hola AWS!!!", 0)
# Subscribe to topic
myMQTTClient.subscribe("topic_2", 1, customCallback)
myMQTTClient.disconnect()
#Ciclo principal
while True:
myMQTTClient.connect()
myMQTTClient.publish("topic_1", "Hola AWS!!!", 0)
# Subscribe to topic
myMQTTClient.subscribe("topic_2", 1, customCallback)
myMQTTClient.disconnect()然而,连接仍然非常不稳定。我经常收到超时或服务器拒绝消息。我可以发送几条消息并接收其他消息。但是通过订阅接收消息很困难,我不知道是否应该使用额外的代码来改进它。
发布于 2020-07-25 21:46:13
据我所知,您希望使用IoT将MQTT消息从您的设备发布到。此外,您还希望看到通过订阅相关主题发布的消息。您代码中的主要问题是您没有与AWS IoT消息代理建立持久会话。在while语句中,您不断地连接、发布、订阅和断开连接。
我建议您更新代码,如下所示:
# Connect and subscribe to AWS IoT
myMQTTClient.connect()
myMQTTClient.subscribe(your_topic_name, 1, customCallback)
time.sleep(1)
# Publish to the same topic in a loop forever
while True:
myMQTTClient.publish(your_topic_name, "Hola AWS!!!", 0)
time.sleep(1)在本例中,您不需要myMQTTClient.disconnect(),因为您有一个无限的while循环。
https://stackoverflow.com/questions/62493005
复制相似问题