diff --git a/src/frigate_mqtt.c b/src/frigate_mqtt.c index db6e92b..dca6d46 100644 --- a/src/frigate_mqtt.c +++ b/src/frigate_mqtt.c @@ -228,8 +228,15 @@ int cfc_frigate_mqtt_create(const cfc_frigate_mqtt_config_t *cfg, atomic_init(&f->events_received, 0); atomic_init(&f->parse_errors, 0); + /* client_id уникальный per instance. now_ms() недостаточно — несколько + * subscriber'ов создаются в один тик (frigate + yoloworld), получают + * одинаковый client_id и mosquitto kick'aет old при connect нового + * → reconnect loop. Добавляем статический counter для tie-break. */ + static _Atomic int instance_seq = 0; + int seq = atomic_fetch_add(&instance_seq, 1); char client_id[64]; - snprintf(client_id, sizeof(client_id), "composer-frigate-%d", (int)now_ms()); + snprintf(client_id, sizeof(client_id), "composer-frigate-%d-%d", + (int)now_ms(), seq); f->mosq = mosquitto_new(client_id, true, f); if (!f->mosq) goto fail;