From 27b7ef0a7aad6b224f37fdfe2e293d2922e41bbf Mon Sep 17 00:00:00 2001 From: ryzendigo <48058157+ryzendigo@users.noreply.github.com> Date: Fri, 1 May 2026 02:16:49 +0800 Subject: [PATCH] fix: mismatched time sources break birdseye idle heartbeat (#22466) The idle heartbeat check in BirdsEyeOutputProcess.update() compares time.monotonic() (seconds since an arbitrary point, typically boot) against last_output_time which is set from datetime.datetime.now().timestamp() (Unix epoch seconds). These are completely different time bases. The subtraction produces a large negative number, so the idle heartbeat condition can never be satisfied. This means birdseye stops sending frames when all cameras go idle, instead of continuing at the configured idle_heartbeat_fps. Use datetime.datetime.now().timestamp() consistently for both the heartbeat check and the output time tracking. --- frigate/output/birdseye.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frigate/output/birdseye.py b/frigate/output/birdseye.py index ff846008c..98b4dec75 100644 --- a/frigate/output/birdseye.py +++ b/frigate/output/birdseye.py @@ -882,7 +882,7 @@ class Birdseye: coordinates = self.birdseye_manager.get_camera_coordinates() self.requestor.send_data(UPDATE_BIRDSEYE_LAYOUT, coordinates) if self._idle_interval: - now = time.monotonic() + now = datetime.datetime.now().timestamp() is_idle = len(self.birdseye_manager.camera_layout) == 0 if ( is_idle