fix(lane-status): TTL 5s -> 30s after measuring the real re-fire pattern
Controlled in/out test on the camera: the `active` re-fire rate is MOVEMENT-driven, not steady — ~1-3s apart while the car moves, but up to ~15-25s when it sits MOTIONLESS in the zone. A 5s TTL would flicker a parked car free; the TTL must exceed the still-car gap. The camera has ~no dwell lag (goes silent within ~1s of the car leaving — measured: last event 16:15:17 vs car-left ~16:15:30), so 30s keeps a motionless car busy while clearing promptly after departure. This also confirms vision-based tracking isn't warranted: the camera's leave signal is already tight. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user