diff --git a/apps/server/src/lane-status.ts b/apps/server/src/lane-status.ts index 746ad3e..1d26585 100644 --- a/apps/server/src/lane-status.ts +++ b/apps/server/src/lane-status.ts @@ -15,12 +15,15 @@ import { directionOf } from "./device-resolve.js"; /** How long after the last vehicle detection a lane stays "busy" before clearing. * Must exceed the camera's `active` re-fire interval so a still-present car keeps the - * lane busy. Measured on the test unit: while a vehicle is in the zone the camera - * re-fires `active` about every ~1s — so a few seconds of silence reliably means the - * car has left. 5s gives fast clearing without flicker. Override with LANE_BUSY_TTL_MS. */ + * lane busy. MEASURED on the test unit (controlled in/out test): the re-fire rate is + * MOVEMENT-driven, not a fixed rate — ~1-3s apart while the car moves, but stretching + * to ~15-25s when it sits MOTIONLESS in the zone. So the TTL must clear the still-car + * gap (~25s) or a parked car flickers free. The camera has ~no dwell lag (it goes + * silent within a second of the car leaving), so 30s clears promptly after departure + * while keeping a motionless car solidly busy. Override with LANE_BUSY_TTL_MS. */ export function busyTtlMs(): number { - const raw = Number(process.env.LANE_BUSY_TTL_MS ?? 5_000); - return Number.isFinite(raw) && raw > 0 ? raw : 5_000; + const raw = Number(process.env.LANE_BUSY_TTL_MS ?? 30_000); + return Number.isFinite(raw) && raw > 0 ? raw : 30_000; } export class LaneStatus {