From 180ea9e1e167158c81c0f58e634c0e8fbe8b228e Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Mon, 30 Sep 2024 10:25:51 -0300 Subject: [PATCH] Keep retrying when connection to doorbell fails --- hikvision-doorbell/src/main.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/hikvision-doorbell/src/main.py b/hikvision-doorbell/src/main.py index 9c175d9..95d48e5 100644 --- a/hikvision-doorbell/src/main.py +++ b/hikvision-doorbell/src/main.py @@ -92,15 +92,23 @@ def signal_handler(task: asyncio.Task): if __name__ == "__main__": - try: - asyncio.run(main()) - except SDKError as e: - # Define a global error handler for SDKErrors, to print them out in a user-friendly manner: - # - user_message, sdk_code, sdk_message = e.args - logger.error("{}: {} Error code:{}", user_message, sdk_message, sdk_code) - sys.exit(1) - except (OSError, ConnectionRefusedError) as e: - # Connection to MQTT broker failed - logger.error("Error while connecting to MQTT broker: {}", e.strerror) - sys.exit(1) \ No newline at end of file + while True: + try: + asyncio.run(main()) + break + except SDKError as e: + # Define a global error handler for SDKErrors, to print them out in a user-friendly manner: + # + user_message, sdk_code, sdk_message = e.args + logger.error("{}: {} Error code: {}", user_message, sdk_message, sdk_code) + if sdk_code == 7: + # Failed to connect to the device + logger.error("Retrying in 15 seconds...") + await asyncio.sleep(15) + else: + break + except (OSError, ConnectionRefusedError) as e: + # Connection to MQTT broker failed + logger.error("Error while connecting to MQTT broker: {}", e.strerror) + break + sys.exit(1)