diff --git a/frigate/api/app.py b/frigate/api/app.py index a6ee01487..4e7e1b892 100644 --- a/frigate/api/app.py +++ b/frigate/api/app.py @@ -28,6 +28,10 @@ from frigate.api.defs.query.app_query_parameters import AppTimelineHourlyQueryPa from frigate.api.defs.request.app_body import AppConfigSetBody from frigate.api.defs.tags import Tags from frigate.config import FrigateConfig +from frigate.config.camera.updater import ( + CameraConfigUpdateEnum, + CameraConfigUpdateTopic, +) from frigate.models import Event, Timeline from frigate.stats.prometheus import get_metrics, update_metrics from frigate.util.builtin import ( @@ -390,8 +394,13 @@ def config_set(request: Request, body: AppConfigSetBody): if body.update_topic and body.update_topic.startswith("config/cameras/"): _, _, camera, field = body.update_topic.split("/") - settings = config.model_dump(mode="json", warnings="none", exclude_none=True)["cameras"][camera][field] - + settings = config.model_dump( + mode="json", warnings="none", exclude_none=True + )["cameras"][camera][field] + request.config_updater.publish_update( + CameraConfigUpdateTopic(CameraConfigUpdateEnum[field], camera), + settings, + ) return JSONResponse( content=( diff --git a/frigate/api/defs/request/app_body.py b/frigate/api/defs/request/app_body.py index 1fc05db2f..7456a6c77 100644 --- a/frigate/api/defs/request/app_body.py +++ b/frigate/api/defs/request/app_body.py @@ -5,6 +5,7 @@ from pydantic import BaseModel class AppConfigSetBody(BaseModel): requires_restart: int = 1 + update_topic: str | None = None class AppPutPasswordBody(BaseModel): diff --git a/frigate/app.py b/frigate/app.py index 1b78181ff..ebbc003e8 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -673,6 +673,7 @@ class FrigateApp: self.onvif_controller, self.stats_emitter, self.event_metadata_updater, + self.inter_config_updater, ), host="127.0.0.1", port=5001,