Skip to content

Commit

Permalink
Keep retrying when connection to doorbell fails
Browse files Browse the repository at this point in the history
  • Loading branch information
felipecrs committed Sep 30, 2024
1 parent 9a645a9 commit be11d40
Showing 1 changed file with 21 additions and 14 deletions.
35 changes: 21 additions & 14 deletions hikvision-doorbell/src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@
import signal
import socket
import sys
import logging
from config import AppConfig
from doorbell import Doorbell, Registry
from event import ConsoleHandler, EventManager
from home_assistant import HomeAssistantAPI
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"""
Expand Down Expand Up @@ -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_message> <sdk_code>
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)
asyncio.run(main_loop())

0 comments on commit be11d40

Please sign in to comment.