Я использую ниже код агента работы AWS для подключения устройства к AWS для работы с агентом работы.
https://github.com/aws/aws-iot-device-sdk-python
, который работает, как и ожидалось, большую часть времени.Но вдруг в методе connect () это произошло несколько раз.Поэтому после этого я не могу вызвать агента по работе из AWS.Мне нужно перезапустить программу Jobagent на устройстве, чтобы снова установить соединение (я использую этот JobAgent в качестве службы в rasperypi)
Единственная причина, по которой я подозреваю, заключается в том, что в большинстве случаев интернет-соединение прерывается при получении соединения (AWSIoTMQTTThingJobsClient) .программа замораживания в jobsClient.connect () line.
Что мне нужно обновить в моем коде, чтобы избежать этой проблемы.Я использую AWSIoTPythonSDK последней версии (1.4.3)
while True:
try:
# to check internet availability before connect
if is_connected():
# Init AWSIoTMQTTClient
myAWSIoTMQTTClient = None
if useWebsocket:
myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId, useWebsocket=True)
myAWSIoTMQTTClient.configureEndpoint(host, port)
myAWSIoTMQTTClient.configureCredentials(rootCAPath)
else:
myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
myAWSIoTMQTTClient.configureEndpoint(host, port)
myAWSIoTMQTTClient.configureCredentials(rootCAPath, privateKeyPath, certificatePath)
# AWSIoTMQTTClient connection configuration
myAWSIoTMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20)
myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myAWSIoTMQTTClient.configureMQTTOperationTimeout(10) # 5 sec
jobsClient = AWSIoTMQTTThingJobsClient(clientId, thingName, QoS=1, awsIoTMQTTClient=myAWSIoTMQTTClient)
jobsClient.connect()
jobsMsgProc = JobsMessageProcessor(jobsClient, clientId)
jobsMsgProc.processJobs()
while not jobsMsgProc.isDone():
time.sleep(2)
else:
print("Internet connection NA")
time.sleep(60)
except (connectTimeoutException,publishTimeoutException,subscribeTimeoutException):
time.sleep(60)
try:
jobsClient.disconnect()
except:
pass
except Exception as e:
time.sleep(60)
try:
jobsClient.disconnect()
except:
pass