From be11d4088b2b2403e3760649ed5adb5640c9ef5d 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 | 35 ++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/hikvision-doorbell/src/main.py b/hikvision-doorbell/src/main.py index 9c175d9..f93c163 100644 --- a/hikvision-doorbell/src/main.py +++ b/hikvision-doorbell/src/main.py @@ -2,6 +2,7 @@ import signal import socket import sys +import logging from config import AppConfig from doorbell import Doorbell, Registry from event import ConsoleHandler, EventManager @@ -9,10 +10,11 @@ from mqtt import MQTTHandler from mqtt_input import MQTTInput from sdk.utils import SDKConfig, SDKError, loadSDK, setupSDK, shutdownSDK -from loguru import logger from input import InputReader +logger = logging.getLogger(__name__) + async def main(): """Main entrypoint of the application""" @@ -85,22 +87,27 @@ async def main(): logger.info("Shutting down") shutdownSDK(sdk) +async def main_loop(): + while True: + try: + await main() + break + except SDKError as e: + user_message, sdk_code, sdk_message = e.args + logger.error("{}: {} Error code: {}", user_message, sdk_message, sdk_code) + if sdk_code == 7: + logger.error("Retrying in 15 seconds...") + await asyncio.sleep(15) + else: + break + except (OSError, ConnectionRefusedError) as e: + logger.error("Error while connecting to MQTT broker: {}", e.strerror) + break + sys.exit(1) def signal_handler(task: asyncio.Task): logger.debug("Received SIGINT, terminating task") task.cancel() - 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 + asyncio.run(main_loop())