diff --git a/hikvision-doorbell/src/main.py b/hikvision-doorbell/src/main.py index 9c175d9..d3b0d43 100644 --- a/hikvision-doorbell/src/main.py +++ b/hikvision-doorbell/src/main.py @@ -90,17 +90,22 @@ def signal_handler(task: asyncio.Task): logger.debug("Received SIGINT, terminating task") task.cancel() +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.info("Failed to connect to the device, retrying again in 15 seconds...") + await asyncio.sleep(5) + else: + sys.exit(1) + except (OSError, ConnectionRefusedError) as e: + logger.error("Error while connecting to MQTT broker: {}", e.strerror) + sys.exit(1) 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()) \ No newline at end of file