add updater topic for autotracking

This commit is contained in:
Josh Hawkins
2026-07-15 18:35:19 -05:00
parent ce9a9b5c75
commit 8214e35f12
3 changed files with 24 additions and 1 deletions
+4
View File
@@ -588,6 +588,10 @@ class Dispatcher:
self.ptz_metrics[camera_name].start_time.value = 0 self.ptz_metrics[camera_name].start_time.value = 0
ptz_autotracker_settings.enabled = False ptz_autotracker_settings.enabled = False
self.config_updater.publish_update(
CameraConfigUpdateTopic(CameraConfigUpdateEnum.autotracking, camera_name),
ptz_autotracker_settings,
)
self.publish(f"{camera_name}/ptz_autotracker/state", payload, retain=True) self.publish(f"{camera_name}/ptz_autotracker/state", payload, retain=True)
def _on_motion_contour_area_command(self, camera_name: str, payload: int) -> None: def _on_motion_contour_area_command(self, camera_name: str, payload: int) -> None:
+3
View File
@@ -14,6 +14,7 @@ class CameraConfigUpdateEnum(str, Enum):
add = "add" # for adding a camera add = "add" # for adding a camera
audio = "audio" audio = "audio"
audio_transcription = "audio_transcription" audio_transcription = "audio_transcription"
autotracking = "autotracking" # ptz autotracking only, without an onvif reinit
birdseye = "birdseye" birdseye = "birdseye"
detect = "detect" detect = "detect"
enabled = "enabled" enabled = "enabled"
@@ -145,6 +146,8 @@ class CameraConfigUpdateSubscriber:
config.snapshots = updated_config config.snapshots = updated_config
elif update_type == CameraConfigUpdateEnum.onvif: elif update_type == CameraConfigUpdateEnum.onvif:
config.onvif = updated_config config.onvif = updated_config
elif update_type == CameraConfigUpdateEnum.autotracking:
config.onvif.autotracking = updated_config
elif update_type == CameraConfigUpdateEnum.timestamp_style: elif update_type == CameraConfigUpdateEnum.timestamp_style:
config.timestamp_style = updated_config config.timestamp_style = updated_config
elif update_type == CameraConfigUpdateEnum.zones: elif update_type == CameraConfigUpdateEnum.zones:
+17 -1
View File
@@ -20,6 +20,10 @@ from norfair.camera_motion import (
from frigate.camera import PTZMetrics from frigate.camera import PTZMetrics
from frigate.comms.dispatcher import Dispatcher from frigate.comms.dispatcher import Dispatcher
from frigate.config import CameraConfig, FrigateConfig, ZoomingModeEnum from frigate.config import CameraConfig, FrigateConfig, ZoomingModeEnum
from frigate.config.camera.updater import (
CameraConfigUpdateEnum,
CameraConfigUpdateSubscriber,
)
from frigate.const import ( from frigate.const import (
AUTOTRACKING_MAX_AREA_RATIO, AUTOTRACKING_MAX_AREA_RATIO,
AUTOTRACKING_MAX_MOVE_METRICS, AUTOTRACKING_MAX_MOVE_METRICS,
@@ -194,7 +198,9 @@ class PtzAutoTrackerThread(threading.Thread):
def run(self): def run(self):
while not self.stop_event.wait(1): while not self.stop_event.wait(1):
for camera, camera_config in self.config.cameras.items(): self.ptz_autotracker.config_subscriber.check_for_updates()
for camera, camera_config in list(self.config.cameras.items()):
if not camera_config.enabled: if not camera_config.enabled:
continue continue
@@ -211,6 +217,7 @@ class PtzAutoTrackerThread(threading.Thread):
self.ptz_autotracker.tracked_object[camera] = None self.ptz_autotracker.tracked_object[camera] = None
self.ptz_autotracker.tracked_object_history[camera].clear() self.ptz_autotracker.tracked_object_history[camera].clear()
self.ptz_autotracker.config_subscriber.stop()
logger.info("Exiting autotracker...") logger.info("Exiting autotracker...")
@@ -244,6 +251,15 @@ class PtzAutoTracker:
self.zoom_time: dict[str, float] = {} self.zoom_time: dict[str, float] = {}
self.zoom_factor: dict[str, object] = {} self.zoom_factor: dict[str, object] = {}
self.config_subscriber = CameraConfigUpdateSubscriber(
self.config,
self.config.cameras,
[
CameraConfigUpdateEnum.add,
CameraConfigUpdateEnum.autotracking,
],
)
# if cam is set to autotrack, onvif should be set up # if cam is set to autotrack, onvif should be set up
for camera, camera_config in self.config.cameras.items(): for camera, camera_config in self.config.cameras.items():
if not camera_config.enabled: if not camera_config.enabled: