From 8edf4ce29860fab0f5e5437c68fc6d63ee4e7081 Mon Sep 17 00:00:00 2001 From: ryzendigo <48058157+ryzendigo@users.noreply.github.com> Date: Mon, 16 Mar 2026 14:29:16 +0800 Subject: [PATCH] fix: mismatched time sources break birdseye idle heartbeat 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 cdadafe71..25b88b782 100644 --- a/frigate/output/birdseye.py +++ b/frigate/output/birdseye.py @@ -854,7 +854,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