From 3df8b5829c6393f9c69e567cd73ccccfac5e8b40 Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Fri, 2 Feb 2024 06:23:14 -0600 Subject: [PATCH] Small autotracking changes (#9571) * ignore web-new * remove web-new * catch exceptions for unsupported cameras * don't split up large ptz movements * fix ruff --- .gitignore | 3 --- frigate/ptz/autotrack.py | 16 +++++++++------- frigate/ptz/onvif.py | 33 +++++++++++++++++---------------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index d12b3834f..a0f62b7eb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,9 +14,6 @@ frigate/version.py web/build web/node_modules web/coverage -web-new/build -web-new/node_modules -web-new/coverage core !/web/**/*.ts .idea/* \ No newline at end of file diff --git a/frigate/ptz/autotrack.py b/frigate/ptz/autotrack.py index 44312c3e9..8266e4b87 100644 --- a/frigate/ptz/autotrack.py +++ b/frigate/ptz/autotrack.py @@ -734,11 +734,12 @@ class PtzAutoTracker: and frame_time > self.ptz_metrics[camera]["ptz_stop_time"].value and not self.move_queue_locks[camera].locked() ): - # split up any large moves caused by velocity estimated movements + # we can split up any large moves caused by velocity estimated movements if necessary + # get an excess amount and assign it instead of 0 below while pan != 0 or tilt != 0 or zoom != 0: - pan, pan_excess = split_value(pan) - tilt, tilt_excess = split_value(tilt) - zoom, zoom_excess = split_value(zoom, False) + pan, _ = split_value(pan) + tilt, _ = split_value(tilt) + zoom, _ = split_value(zoom, False) logger.debug( f"{camera}: Enqueue movement for frame time: {frame_time} pan: {pan}, tilt: {tilt}, zoom: {zoom}" @@ -746,9 +747,10 @@ class PtzAutoTracker: move_data = (frame_time, pan, tilt, zoom) self.move_queues[camera].put(move_data) - pan = pan_excess - tilt = tilt_excess - zoom = zoom_excess + # reset values to not split up large movements + pan = 0 + tilt = 0 + zoom = 0 def _touching_frame_edges(self, camera, box): camera_config = self.config.cameras[camera] diff --git a/frigate/ptz/onvif.py b/frigate/ptz/onvif.py index a6495b6c7..06570a7d3 100644 --- a/frigate/ptz/onvif.py +++ b/frigate/ptz/onvif.py @@ -528,24 +528,25 @@ class OnvifController: except Exception: pass # We're unsupported, that'll be reported in the next check. - # there doesn't seem to be an onvif standard with this optional parameter - # some cameras can report MoveStatus with or without PanTilt or Zoom attributes - pan_tilt_status = getattr(status.MoveStatus, "PanTilt", None) - zoom_status = getattr(status.MoveStatus, "Zoom", None) + try: + pan_tilt_status = getattr(status.MoveStatus, "PanTilt", None) + zoom_status = getattr(status.MoveStatus, "Zoom", None) - # if it's not an attribute, see if MoveStatus even exists in the status result - if pan_tilt_status is None: - pan_tilt_status = getattr(status, "MoveStatus", None) + # if it's not an attribute, see if MoveStatus even exists in the status result + if pan_tilt_status is None: + pan_tilt_status = getattr(status, "MoveStatus", None) - # we're unsupported - if pan_tilt_status is None or pan_tilt_status not in [ - "IDLE", - "MOVING", - ]: - logger.error( - f"Camera {camera_name} does not support the ONVIF GetStatus method. Autotracking will not function correctly and must be disabled in your config." - ) - return + # we're unsupported + if pan_tilt_status is None or pan_tilt_status not in [ + "IDLE", + "MOVING", + ]: + raise Exception + except Exception: + logger.warning( + f"Camera {camera_name} does not support the ONVIF GetStatus method. Autotracking will not function correctly and must be disabled in your config." + ) + return if pan_tilt_status == "IDLE" and (zoom_status is None or zoom_status == "IDLE"): self.cams[camera_name]["active"] = False