@@ -31,9 +31,9 @@ class Config:
3131 image_url : str
3232 model_path : str
3333 label_path : str
34- broker : str
34+ broker : Optional [ str ]
3535 port : int
36- topic : str
36+ topic : Optional [ str ]
3737 detect_interval : int
3838 mqtt_username : Optional [str ]
3939 mqtt_password : Optional [str ]
@@ -50,15 +50,19 @@ def from_env(cls) -> 'Config':
5050 discovery_mode = os .getenv ('MQTT_DISCOVERY_MODE' , 'legacy' ).lower ()
5151
5252 # Base required vars for all modes
53- required_vars = ['IMAGE_URL' , 'MQTT_BROKER' , ' DETECT_INTERVAL' ]
53+ required_vars = ['IMAGE_URL' , 'DETECT_INTERVAL' ]
5454
55- # Legacy mode requires MQTT_TOPIC
56- if discovery_mode == 'legacy' :
57- required_vars .append ('MQTT_TOPIC' )
58- # HA discovery mode requires DEVICE_ID
59- elif discovery_mode == 'homeassistant' :
60- if not os .getenv ('DEVICE_ID' ):
61- raise ValueError ("DEVICE_ID is required when MQTT_DISCOVERY_MODE is 'homeassistant'" )
55+ broker = os .getenv ('MQTT_BROKER' )
56+
57+ # Validate MQTT settings only if broker is configured
58+ if broker :
59+ # Legacy mode requires MQTT_TOPIC
60+ if discovery_mode == 'legacy' and not os .getenv ('MQTT_TOPIC' ):
61+ required_vars .append ('MQTT_TOPIC' )
62+ # HA discovery mode requires DEVICE_ID
63+ elif discovery_mode == 'homeassistant' :
64+ if not os .getenv ('DEVICE_ID' ):
65+ raise ValueError ("DEVICE_ID is required when MQTT_DISCOVERY_MODE is 'homeassistant'" )
6266
6367 missing = [var for var in required_vars if not os .getenv (var )]
6468 if missing :
@@ -68,17 +72,17 @@ def from_env(cls) -> 'Config':
6872 image_url = os .environ ['IMAGE_URL' ],
6973 model_path = os .getenv ('MODEL_PATH' , 'keras_model.h5' ),
7074 label_path = os .getenv ('LABEL_PATH' , 'labels.txt' ),
71- broker = os . environ [ 'MQTT_BROKER' ] ,
72- port = int (os .getenv ('MQTT_PORT' , '1883' ) ),
73- topic = os .getenv ('MQTT_TOPIC' , '' ) ,
75+ broker = broker or None ,
76+ port = int (os .getenv ('MQTT_PORT' ) or '1883' ),
77+ topic = os .getenv ('MQTT_TOPIC' ) or None ,
7478 detect_interval = int (os .environ ['DETECT_INTERVAL' ]),
75- mqtt_username = os .getenv ('MQTT_USERNAME' ),
76- mqtt_password = os .getenv ('MQTT_PASSWORD' ),
79+ mqtt_username = os .getenv ('MQTT_USERNAME' ) or None ,
80+ mqtt_password = os .getenv ('MQTT_PASSWORD' ) or None ,
7781 verify_ssl = os .getenv ('VERIFY_SSL' , 'false' ).lower () == 'true' ,
7882 mqtt_discovery_mode = discovery_mode ,
7983 mqtt_discovery_prefix = os .getenv ('MQTT_DISCOVERY_PREFIX' , 'homeassistant' ),
8084 device_name = os .getenv ('DEVICE_NAME' , 'Cloud Detector' ),
81- device_id = os .getenv ('DEVICE_ID' )
85+ device_id = os .getenv ('DEVICE_ID' ) or None
8286 )
8387
8488class HADiscoveryManager :
@@ -190,7 +194,7 @@ def __init__(self, config: Config, mqtt_client=None):
190194 self .ha_discovery = None
191195
192196 # Initialize HA discovery if enabled
193- if self .config .mqtt_discovery_mode == 'homeassistant' :
197+ if self .mqtt_client and self . config .mqtt_discovery_mode == 'homeassistant' :
194198 self .ha_discovery = HADiscoveryManager (self .config , self .mqtt_client )
195199 self .ha_discovery .publish_discovery_configs ()
196200
@@ -332,6 +336,9 @@ def detect(self, return_image: bool = False) -> dict:
332336
333337 def publish_result (self , result : dict ):
334338 """Publish detection result to MQTT"""
339+ if not self .mqtt_client :
340+ return
341+
335342 try :
336343 if self .config .mqtt_discovery_mode == 'homeassistant' :
337344 # Use HA discovery publishing
0 commit comments