You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Water leak detection (Layer 1 of a planned multi-layer anomaly system). Watches for volume accumulated within an unbroken run of continuous flow — a real leak, stuck valve, or burst pipe doesn't pause; normal household use does. Checked every ~20s poll cycle, not on a daily/hourly rollup, so detection isn't delayed by data settling later.
Occupancy-aware thresholds. A much lower "away" threshold engages automatically after several consecutive near-zero gas+water days (reusing the existing absence detector), unless a logged Occupancy entry says otherwise. Never inferred from live consumption alone — that would be circular.
Telegram alerts + persistent in-app banner. New Settings → Leak alerts card: chat ID, thresholds, and a "Send test message" button. The banner is authoritative (always shows, no network needed) and persists until acknowledged; Telegram delivery is best-effort with a short timeout and automatic retry on the next poll if a send fails. A leak keeps nagging on an escalating schedule (immediate, then 15/30/60 min) until acknowledged or the flow actually stops. Dismissing an alert as "not a leak" nudges that household's threshold up so the same false positive won't repeat.
New environment variables: OMNIMETER_TELEGRAM_BOT_TOKEN, OMNIMETER_TELEGRAM_CHAT_ID (see .env.example). Off by default, same opt-in pattern as weather and the update check.
📝 Docs
docs/DESIGN_SPEC.md — new §11 covering the detector design, persistence, and delivery model, plus updated outbound-call counts elsewhere in the doc.