Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion frigate/ptz/onvif.py
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,12 @@ async def _move_relative(self, camera_name: str, pan, tilt, zoom, speed) -> None

move_request.Speed = move_speed

await cam["ptz"].RelativeMove(move_request)
try:
await cam["ptz"].RelativeMove(move_request)
except Exception as e:
logger.warning(
f"Onvif sending relative move request to {camera_name} failed: {e}"
)
Comment thread
hawkeye217 marked this conversation as resolved.
Resolved

# reset after the move request
move_request.Translation.PanTilt.x = 0
Expand Down
9 changes: 9 additions & 0 deletions frigate/test/test_ptz_onvif.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,15 @@ async def test_detection_regions_not_suppressed_after_manual_move(self) -> None:
)
)

async def test_failed_move_does_not_raise(self) -> None:
# an exception here ends the autotracker's move queue consumer for good
controller = _make_move_controller(autotracking_enabled=True)
controller.cams[CAMERA]["ptz"].RelativeMove.side_effect = TimeoutError

await controller._move_relative(CAMERA, 0.25, -0.25, 0, 1)

self.assertFalse(controller.cams[CAMERA]["active"])

async def test_metrics_written_when_autotracking_enabled(self) -> None:
# get_camera_status resets stop_time once the camera reports IDLE, so the
# autotracking path keeps its motion estimation timestamps
Expand Down
Loading