diff --git a/src/meshcore_hub/api/dependencies.py b/src/meshcore_hub/api/dependencies.py index 5b68652..bd16067 100644 --- a/src/meshcore_hub/api/dependencies.py +++ b/src/meshcore_hub/api/dependencies.py @@ -1,6 +1,7 @@ """FastAPI dependencies for the API.""" import logging +import uuid from typing import Annotated, Generator from fastapi import Depends, Request @@ -57,11 +58,13 @@ def get_mqtt_client(request: Request) -> MQTTClient: mqtt_port = getattr(request.app.state, "mqtt_port", 1883) mqtt_prefix = getattr(request.app.state, "mqtt_prefix", "meshcore") + # Use unique client ID to allow multiple API instances + unique_id = uuid.uuid4().hex[:8] config = MQTTConfig( host=mqtt_host, port=mqtt_port, prefix=mqtt_prefix, - client_id="meshcore-api", + client_id=f"meshcore-api-{unique_id}", ) client = MQTTClient(config) diff --git a/src/meshcore_hub/collector/subscriber.py b/src/meshcore_hub/collector/subscriber.py index 5fa3126..57d7ccf 100644 --- a/src/meshcore_hub/collector/subscriber.py +++ b/src/meshcore_hub/collector/subscriber.py @@ -13,6 +13,7 @@ import logging import signal import threading import time +import uuid from typing import Any, Callable, Optional, TYPE_CHECKING from meshcore_hub.common.database import DatabaseManager @@ -307,14 +308,15 @@ def create_subscriber( Returns: Configured Subscriber instance """ - # Create MQTT client + # Create MQTT client with unique client ID to allow multiple collectors + unique_id = uuid.uuid4().hex[:8] mqtt_config = MQTTConfig( host=mqtt_host, port=mqtt_port, username=mqtt_username, password=mqtt_password, prefix=mqtt_prefix, - client_id="meshcore-collector", + client_id=f"meshcore-collector-{unique_id}", ) mqtt_client = MQTTClient(mqtt_config)