M8-R01: add configurable MQTT client identity

This commit is contained in:
2026-08-24 00:44:28 +02:00
parent 2a47dab272
commit e59c192097
12 changed files with 184 additions and 15 deletions
+14 -2
View File
@@ -48,6 +48,7 @@ MQTT_SETTINGS_KEYS = {
"mqtt_username",
"mqtt_password",
"mqtt_tls_enabled",
"mqtt_client_id",
}
@@ -65,6 +66,16 @@ def _is_configured(settings: Settings) -> bool:
return bool(settings.mqtt_enabled and settings.mqtt_broker_host)
def mqtt_source_client_id(base_client_id: str, source_id: int) -> str:
"""Return a stable, deployment-scoped identity for one DSMR source."""
return f"{base_client_id}-dsmr-source-{source_id}"
def mqtt_test_client_id(base_client_id: str) -> str:
"""Return a transient test identity that cannot evict a long-lived client."""
return f"{base_client_id}-test"
class MqttManager:
"""Long-lived MQTT client wrapper.
@@ -236,6 +247,7 @@ class MqttManager:
password: str,
tls_enabled: bool,
subscriptions: dict[str, Callable[[bytes], None]],
base_client_id: str = "home-automation",
) -> bool:
"""Replace one source-owned client and its handlers.
@@ -253,7 +265,7 @@ class MqttManager:
captured_subscriptions = dict(subscriptions)
client = mqtt.Client(
callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
client_id=f"home-automation-dsmr-{source_id}",
client_id=mqtt_source_client_id(base_client_id, source_id),
)
def _on_connect(
@@ -360,7 +372,7 @@ class MqttManager:
"""Build a fresh paho Client, configure it, and call loop_start + connect."""
client = mqtt.Client(
callback_api_version=mqtt.CallbackAPIVersion.VERSION2,
client_id="home-automation",
client_id=settings.mqtt_client_id,
)
# Callbacks — VERSION2 on_connect signature: