1
0

factory.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. """Factory for creating MQTT handlers."""
  2. import os
  3. from typing import Dict, Callable
  4. from dotenv import load_dotenv
  5. from pathlib import Path
  6. from .base import BaseMQTTHandler
  7. from .handler import MQTTHandler
  8. from .mock import MockMQTTHandler
  9. from .utils import create_mqtt_callbacks
  10. from modules.core.state import state
  11. import logging
  12. logger = logging.getLogger(__name__)
  13. # Load environment variables (fallback for legacy .env configuration)
  14. BASE_DIR = Path(__file__).resolve().parent.parent.parent # Go up to project root
  15. env_path = os.path.join(BASE_DIR, '.env')
  16. load_dotenv(env_path)
  17. def create_mqtt_handler() -> BaseMQTTHandler:
  18. """Create and return an appropriate MQTT handler based on configuration.
  19. Configuration is read from state (UI settings) first, with fallback to
  20. environment variables for legacy .env file support.
  21. Returns:
  22. BaseMQTTHandler: Either a real MQTTHandler if MQTT is enabled and configured,
  23. or a MockMQTTHandler if not.
  24. """
  25. # Check state-based configuration first (from UI settings)
  26. if state.mqtt_enabled and state.mqtt_broker:
  27. logger.info(f"Got MQTT configuration from state for broker: {state.mqtt_broker}, instantiating MQTTHandler")
  28. return MQTTHandler(create_mqtt_callbacks())
  29. # Fallback to environment variable for legacy support
  30. mqtt_broker = os.getenv('MQTT_BROKER')
  31. if mqtt_broker:
  32. logger.info(f"Got MQTT configuration from env for broker: {mqtt_broker}, instantiating MQTTHandler")
  33. return MQTTHandler(create_mqtt_callbacks())
  34. logger.info("MQTT not enabled or not configured, instantiating MockMQTTHandler")
  35. return MockMQTTHandler()