| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- """Factory for creating MQTT handlers."""
- import os
- from typing import Dict, Callable
- from dotenv import load_dotenv
- from pathlib import Path
- from .base import BaseMQTTHandler
- from .handler import MQTTHandler
- from .mock import MockMQTTHandler
- from .utils import create_mqtt_callbacks
- from modules.core.state import state
- import logging
- logger = logging.getLogger(__name__)
- # Load environment variables (fallback for legacy .env configuration)
- BASE_DIR = Path(__file__).resolve().parent.parent.parent # Go up to project root
- env_path = os.path.join(BASE_DIR, '.env')
- load_dotenv(env_path)
- def create_mqtt_handler() -> BaseMQTTHandler:
- """Create and return an appropriate MQTT handler based on configuration.
- Configuration is read from state (UI settings) first, with fallback to
- environment variables for legacy .env file support.
- Returns:
- BaseMQTTHandler: Either a real MQTTHandler if MQTT is enabled and configured,
- or a MockMQTTHandler if not.
- """
- # Check state-based configuration first (from UI settings)
- if state.mqtt_enabled and state.mqtt_broker:
- logger.info(f"Got MQTT configuration from state for broker: {state.mqtt_broker}, instantiating MQTTHandler")
- return MQTTHandler(create_mqtt_callbacks())
- # Fallback to environment variable for legacy support
- mqtt_broker = os.getenv('MQTT_BROKER')
- if mqtt_broker:
- logger.info(f"Got MQTT configuration from env for broker: {mqtt_broker}, instantiating MQTTHandler")
- return MQTTHandler(create_mqtt_callbacks())
- logger.info("MQTT not enabled or not configured, instantiating MockMQTTHandler")
- return MockMQTTHandler()
|