diff --git a/haco/constants.py b/haco/constants.py index 0c4b0ed..4075364 100644 --- a/haco/constants.py +++ b/haco/constants.py @@ -7,6 +7,9 @@ SEPS = '_- /' BRANCH = 'release' CAPABILITY_DEFAULT = 'default' +RECONNECT_DELAY_SEC = 5 +ON = 'ON' +OFF = 'OFF' CONFIGS_PATH = Path(os.environ['HACO_CONFIGS_PATH']) OPTIONS_PATH = Path(os.environ['HACO_OPTIONS_PATH']) diff --git a/haco/control.py b/haco/control.py index 1a1c49d..052d737 100644 --- a/haco/control.py +++ b/haco/control.py @@ -1,7 +1,8 @@ import logging from functools import partial -from haco import schema, tools, constants +import haco.constants +from haco import tools, constants from haco.callback import Callback from haco.schema import Schema, Platform, Tasmota, HomeAssistant, AnnounceTopic, Capability from haco.tools import log_publish @@ -72,9 +73,9 @@ class Control: "unique_id": f"{self.device.name_sanitized}-{self.device.mac_short}-{self.name_sanitized}", "name": self.name, "availability_topic": f"tele/{self.device.topic}/LWT", - "payload_off": schema.OFF, + "payload_off": haco.constants.OFF, "payload_available": "Online", - "payload_on": schema.ON, + "payload_on": haco.constants.ON, "payload_not_available": "Offline", "force_update": True, "icon": self.icon, diff --git a/haco/mqtt.py b/haco/mqtt.py index 479d067..f1e8942 100644 --- a/haco/mqtt.py +++ b/haco/mqtt.py @@ -7,7 +7,7 @@ from haco import constants, tools from haco.constants import MQTT_PASSWORD, MQTT_HOST, MQTT_PORT, MQTT_USERNAME from haco.device import Device from haco.load_configs import load_devices -from haco.tools import log_received +from haco.tools import log_received, logger async def listen(client, devices): @@ -59,6 +59,13 @@ async def start_mqtt(): devices = load_devices() devices = {device.identifier: device for device in devices} - async with aiomqtt.Client(hostname=MQTT_HOST, port=MQTT_PORT, username=MQTT_USERNAME, - password=MQTT_PASSWORD) as client: - await asyncio.gather(listen(client, devices)) + while True: + client = aiomqtt.Client(hostname=MQTT_HOST, port=MQTT_PORT, username=MQTT_USERNAME, + password=MQTT_PASSWORD) + try: + async with client: + await asyncio.gather(listen(client, devices)) + except aiomqtt.MqttError: + msg = f"MQTT: Connection lost; Reconnecting in {constants.RECONNECT_DELAY_SEC} seconds ..." + logger.info(msg) + await asyncio.sleep(constants.RECONNECT_DELAY_SEC) diff --git a/haco/schema.py b/haco/schema.py index 9f8744e..b41e3c9 100644 --- a/haco/schema.py +++ b/haco/schema.py @@ -9,9 +9,6 @@ from haco import tools, constants, callback DEVICE = 'development-eth' CONTROL = 'DEVELOPMENT-DEHUMIDIFIER' -ON = 'ON' -OFF = 'OFF' - class ControlType: ...