Skip to content

Security & Alarm

System Architecture: Full Ring ecosystem + ring-mqtt for HA automations

Ring is the alarm brain; Home Assistant is the automation layer. The Ring Alarm system is a self-contained, professionally-monitored alarm — the existing wired zones join it natively via the Ring Retrofit Alarm Kit — that keeps working and dispatches with correct per-zone info even if the HA server is down. HA taps the whole system with ring-mqtt to use every sensor for automations and dashboards.

Wired zones ─► Retrofit Kit ─┐
Ring keypad ─────────────────┤
Ring contact + motion ───────┼─► Ring Alarm base ─► Ring Protect Pro ─► dispatch (native, per-zone)
ZCOMBO-G smoke (Z-Wave) ──────┤        │
Schlage lock (Z-Wave) ───────┘   ring-mqtt ─► Home Assistant (automations only)

Full build steps

The complete step-by-step is the Alarm — Implementation Manual.

Arm modes, delays, monitoring, and per-zone names are configured in the Ring app. HA observes alarm_control_panel.blairmont_alarm and reacts (lights, notifications, TTS), and — as a convenience — arms it to Home at Good Night and disarms it at Good Morning. Ring still owns dispatch, the keypad, and the app. Alarmo and Konnected are not used in this design.

For manual arm/disarm from a wall tablet or phone, the Command dashboard → Security tab has a Ring Alarm card (top of the tab) with Arm Home / Arm Away / Disarm — no code required. It shows the live state (disarmed / armed home / armed away / triggered). The Ring keypad and app still work exactly as before; this is just an extra control surface.


Whole-house alarm audio

On top of Ring's native siren and keypad chirps, HA gives the alarm spoken feedback on all 7 house Echoes (kitchen, family room, front room, garage, master bathroom, master bedroom, office) for its full lifecycle — not just when it goes off. See Notifications → Whole-House Alarm Audio for the exact wording and timing of each announcement.

Lifecycle announcements

Event Speakers Default volume Behavior
Triggered All 7 Echoes 0.80 Repeats every ~12s (tunable) while triggered
Exit delay Front room Echo 0.60 Announces once when arming starts, plus a "Ten seconds" warning near the end
Entry delay All 7 Echoes 0.80 Announces once when a door opens while armed
Armed Master bedroom + office Echo 0.30 Confirms home/away once arming finishes
Disarmed Master bedroom + office Echo 0.30 Confirms disarm; also resets all 7 Echoes to the reset volume (default 0.40)
Failed to arm Master bedroom + office Echo 0.60 Best-effort — fires when the exit-delay countdown aborts back to disarmed instead of reaching armed

The repeating trigger announcement is the house-wide version of the old single kitchen-Echo announce — it now speaks on all 7 Echoes and keeps repeating (default every 12 seconds) for as long as the alarm stays triggered, so it's audible no matter where in the house you are.

Alarm Audio dashboard

A dedicated Alarm Audio sidebar dashboard (alarm-audio) is the tuning surface for this whole system — separate from the Command dashboard. It has one card per event with:

  • An enable toggle for that event (plus a master on/off for the whole system)
  • A volume slider (0–1) for that event
  • A test button that previews the announcement on that event's speakers at its current volume — bypassing the enable toggles, so you can dial in a volume without setting off the real alarm

There's also a reset volume slider (what all 7 Echoes are set to on disarm) and a trigger repeat interval slider (seconds between repeats of the triggered announcement, default 12s). None of these settings reset on a config deploy — they persist across restarts, so tune them once and leave them.

Speaker assignment isn't dashboard-tunable

Which room(s) speak for a given event is fixed in the automations, not the dashboard — the dashboard only tunes enable/volume/interval. Changing which Echo announces an event is a config change.


Alarm System — components

Status: in progress

Component Status Notes
Ring Alarm base station Added The brain + Z-Wave hub + monitored dispatcher
Ring Keypad Added Native arm/disarm
Ring contact + motion sensors Added Personnel-door contact + motion (native)
Ring Retrofit Alarm Kit Sourced (Amazon) Brings the existing wired zones into Ring (up to 8 zones)
ZCOMBO-G smoke/CO Not yet ordered Pairs natively to the Ring base (the one triggering third-party Z-Wave sensor)
Schlage BE469ZP lock Not yet ordered Pairs natively to the Ring base (Z-Wave)
ring-mqtt (add-on) Not yet installed Taps the Ring system into HA for automations
Konnected Alarm Panel Pro Freed up No longer used for the alarm — return/repurpose
GE Concord Express 60-806 Retired Retrofit Kit reads the zone wiring directly

Existing Wired Zones (GE Concord 60-806)

4 zones are wired and will be reused by Konnected:

Zone Location Sensor type
Zone 1 TBD Door/window contact
Zone 2 TBD Door/window contact
Zone 3 TBD Motion
Zone 4 TBD TBD

Install Sequence

Full detail: Alarm — Implementation Manual.

  1. Ring app: confirm base/keypad/sensors; set up monitoring + modes + entry/exit delays
  2. Retrofit Kit: wire the existing zones to its inputs, pair to the Ring base, name each zone
  3. Native Z-Wave: pair ZCOMBO-G smoke and the Schlage lock to the Ring base
  4. Install the ring-mqtt add-on; auth with a secondary Ring account → HA gets the alarm panel + all sensors
  5. make snapshot to register the new entities (Tier-3 test gate)
  6. HA automations: lights/presence/notifications/TTS from the Ring sensors + alarm state; retire the §12 mocks

Leak Detection

13 active leak sensors (ZHA — Third Reality). They're all the same model, and each has a built-in siren (enabled) that sounds locally the moment it touches water:

Location Entity
Kitchen sink binary_sensor.kitchen_sink_leak_detector
Butler's kitchen binary_sensor.butlers_kitchen_sink
Laundry room binary_sensor.laundry_room_leak_sensor
Master bathroom left sink binary_sensor.master_bathroom_left_sink_leak_detector
Master bathroom right sink binary_sensor.master_bathroom_right_sink_leak_detector
Powder room binary_sensor.powder_room_leak_sensor
2nd floor hall bathroom left sink binary_sensor.second_floor_hall_bathroom_left_sink
2nd floor hall bathroom right sink binary_sensor.second_floor_hall_bathroom_right_sink_leak_detector
Office sink binary_sensor.office_sink_leak_detector
Bedroom 3 sink binary_sensor.bedroom_3_sink_leak_detector
3rd floor furnace binary_sensor.3rd_floor_furnace_leak_detector
Attic air handler binary_sensor.attic_air_handler_leak_detector
Crawl space furnace binary_sensor.crawl_space_furnace_leak_detector

Critical alerts

Leak notifications bypass DND on both iPhones. No cooldown — every detection alerts.


Smoke Detectors

Status: Not yet ordered

  • 9 locations confirmed (all 3-wire interconnect)
  • Recommended: First Alert Z-Wave ZCOMBO-G (~$45–55 each, ~$405–495 total)
  • Policy: Order when ready to install same week — don't leave them sitting uninstalled
  • Pairs natively to the Ring base — ZCOMBO-G is the one third-party Z-Wave sensor Ring accepts as a triggering alarm sensor; it dispatches fire natively and also surfaces to HA via ring-mqtt

Smart Locks

Status: Not yet ordered — waiting for hardware backlog to clear

  • Front door first: Schlage BE469ZP (Z-Wave, ~$160)
  • Pairs natively to the Ring base (Ring supports Z-Wave deadbolts); manage codes in the Ring app; surfaces to HA as lock.* via ring-mqtt
  • Ring Bond: auto-lock when armed away; HA can notify if armed while unlocked
  • Expansion: Decide additional doors after front door workflow is validated

Garage Doors

Controlled via ESPHome (custom firmware on door openers):

Door Entity
Left cover.left_garage_door_opener_garage_door
Right cover.right_garage_door_opener_garage_door

Garage automations (Section 2 + 8): - Notifications on open/close - Alert if either door is open when both people are away - Alert + actionable button if open for 30+ minutes


Presence Detection

Uses zone.home person count — not individual person entities.

Entity Description
zone.home Number of people in the Home zone
person.louis Louis's location
person.lindsay Lindsay's location

"Away" = zone.home == 0 (everyone left). "Home" = zone.home >= 1 (anyone arrived).