mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-08-01 16:42:18 +03:00
Toggle review alerts and detections (#16482)
* backend * frontend * docs * fix topic name and initial websocket state * update reference config * fix mqtt docs * fix initial topics * don't apply max severity when alerts/detections are disabled * fix ws merge * tweaks
This commit is contained in:
@@ -65,6 +65,8 @@ class Dispatcher:
|
||||
"snapshots": self._on_snapshots_command,
|
||||
"birdseye": self._on_birdseye_command,
|
||||
"birdseye_mode": self._on_birdseye_mode_command,
|
||||
"review_alerts": self._on_alerts_command,
|
||||
"review_detections": self._on_detections_command,
|
||||
}
|
||||
self._global_settings_handlers: dict[str, Callable] = {
|
||||
"notifications": self._on_global_notification_command,
|
||||
@@ -178,6 +180,8 @@ class Dispatcher:
|
||||
"autotracking": self.config.cameras[
|
||||
camera
|
||||
].onvif.autotracking.enabled,
|
||||
"alerts": self.config.cameras[camera].review.alerts.enabled,
|
||||
"detections": self.config.cameras[camera].review.detections.enabled,
|
||||
}
|
||||
|
||||
self.publish("camera_activity", json.dumps(camera_status))
|
||||
@@ -565,3 +569,47 @@ class Dispatcher:
|
||||
),
|
||||
retain=True,
|
||||
)
|
||||
|
||||
def _on_alerts_command(self, camera_name: str, payload: str) -> None:
|
||||
"""Callback for alerts topic."""
|
||||
review_settings = self.config.cameras[camera_name].review
|
||||
|
||||
if payload == "ON":
|
||||
if not self.config.cameras[camera_name].review.alerts.enabled_in_config:
|
||||
logger.error(
|
||||
"Alerts must be enabled in the config to be turned on via MQTT."
|
||||
)
|
||||
return
|
||||
|
||||
if not review_settings.alerts.enabled:
|
||||
logger.info(f"Turning on alerts for {camera_name}")
|
||||
review_settings.alerts.enabled = True
|
||||
elif payload == "OFF":
|
||||
if review_settings.alerts.enabled:
|
||||
logger.info(f"Turning off alerts for {camera_name}")
|
||||
review_settings.alerts.enabled = False
|
||||
|
||||
self.config_updater.publish(f"config/review/{camera_name}", review_settings)
|
||||
self.publish(f"{camera_name}/review_alerts/state", payload, retain=True)
|
||||
|
||||
def _on_detections_command(self, camera_name: str, payload: str) -> None:
|
||||
"""Callback for detections topic."""
|
||||
review_settings = self.config.cameras[camera_name].review
|
||||
|
||||
if payload == "ON":
|
||||
if not self.config.cameras[camera_name].review.detections.enabled_in_config:
|
||||
logger.error(
|
||||
"Detections must be enabled in the config to be turned on via MQTT."
|
||||
)
|
||||
return
|
||||
|
||||
if not review_settings.detections.enabled:
|
||||
logger.info(f"Turning on detections for {camera_name}")
|
||||
review_settings.detections.enabled = True
|
||||
elif payload == "OFF":
|
||||
if review_settings.detections.enabled:
|
||||
logger.info(f"Turning off detections for {camera_name}")
|
||||
review_settings.detections.enabled = False
|
||||
|
||||
self.config_updater.publish(f"config/review/{camera_name}", review_settings)
|
||||
self.publish(f"{camera_name}/review_detections/state", payload, retain=True)
|
||||
|
||||
@@ -107,6 +107,16 @@ class MqttClient(Communicator): # type: ignore[misc]
|
||||
),
|
||||
retain=True,
|
||||
)
|
||||
self.publish(
|
||||
f"{camera_name}/review_alerts/state",
|
||||
"ON" if camera.review.alerts.enabled_in_config else "OFF",
|
||||
retain=True,
|
||||
)
|
||||
self.publish(
|
||||
f"{camera_name}/review_detections/state",
|
||||
"ON" if camera.review.detections.enabled_in_config else "OFF",
|
||||
retain=True,
|
||||
)
|
||||
|
||||
if self.config.notifications.enabled_in_config:
|
||||
self.publish(
|
||||
|
||||
Reference in New Issue
Block a user