在AWS IOT连接中,可能出现断开连接的情况,导致需要重新连接。可以使用以下代码解决此问题:
import time
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
# AWS IOT连接信息
host = "XXXXXXX.iot.XXXXXX.amazonaws.com"
rootCAPath = "root-CA.crt"
certificatePath = "your-certificate.pem.crt"
privateKeyPath = "your-private.pem.key"
clientId = "your-client-id"
topic = "your/topic"
# 初始化AWS IOT连接
def init_aws_iot():
myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
myAWSIoTMQTTClient.configureEndpoint(host, 8883)
myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath)
myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10)
myAWSIoTMQTTClient.configureMQTTOperationTimeout(5)
myAWSIoTMQTTClient.connect()
# 定义订阅及回调函数
myAWSIoTMQTTClient.subscribe(topic, 1, callback_function)
while True:
time.sleep(5)
try:
# 判断连接是否有效,若无效则重新连接
myAWSIoTMQTTClient.ping()
except:
# 连接已失效,重新连接
myAWSIoTMQTTClient.disconnect()
myAWSIoTMQTTClient.connect()
# 订阅的回调函数
def callback_function(client, userdata, message):
print("Received message from AWS IoT Topic:")
print(message.payload)
print("--------------\n\n")
# 调用初始化函数
init_aws_iot()
在以上的代码中,我们使用myAWSIoTMQTTClient.ping()
判断当前连接是否有效,若无效则执行myAWSIoTMQTTClient.disconnect()
用于断开原有连接,再重新执行myAWSIoTMQTTClient.connect()
去连接AWS IOT。在while True
的try
子句中,我们同时使用了`