Alarm — Implementation Manual¶
A step-by-step build guide for the household alarm: Ring is the brain, Home Assistant is the automation layer. The Ring Alarm system runs as a self-contained, professionally-monitored alarm — the existing wired zones join it natively via the Ring Retrofit Alarm Kit — and HA taps the whole system with ring-mqtt so every sensor is available for automations and dashboards.
Status: Ready to build
Architecture decided 2026-06-28. Design source: projects/alarm_system.md. Reference page: Security & Alarm.
Why it's built this way¶
A Ring-native alarm keeps working and dispatches with the correct per-zone information even if the HA/Beelink server is down — the right property for life-safety. HA does not arm the system or trigger dispatch; it observes the Ring sensors and alarm state (via ring-mqtt) and runs automations on top: lights, presence, notifications, TTS, 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)
The brain is in the Ring app
Arm modes, entry/exit delays, monitoring, and per-zone names are configured in the Ring app. HA reads alarm_control_panel.blairmont_alarm and reacts, but does not own that logic.
Trade-off accepted: HA's sensor copies are cloud-fed (Ring cloud → ring-mqtt), so HA automations on them carry slight latency and pause if internet/Ring is down. The alarm itself is local to the Ring base and unaffected. Don't build life-safety logic on the HA copies.
Prerequisites¶
| Requirement | This instance | Notes |
|---|---|---|
| MQTT broker (Mosquitto) | ✅ already running | Shared with zigbee2mqtt / govee2mqtt / rtlamr2mqtt |
| Ring Protect Pro subscription | ✅ paid | Enables professional monitoring/dispatch |
| Ring Alarm base + keypad + sensors | ✅ added | Personnel-door contact + motion already in the Ring account |
| Ring Retrofit Alarm Kit | ✅ sourced (Amazon) | Brings wired zones into Ring (up to 8) |
| Ring account for ring-mqtt | use the PRIMARY/owner account | A secondary/shared account does not work — see Phase 4 |
Authenticate ring-mqtt with the PRIMARY (owner) Ring account
A secondary/shared account was tried first and does not work: a shared user gets location membership (shows up in the Ring app) but zero devices at Ring's device API (api.ring.com/devices/v1/locations returns {}), so ring-mqtt reports "the account does not have any associated locations." Use the primary account that owns the alarm. Running ring-mqtt and the official Ring camera integration on the same account coexists fine in practice (each uses its own device session); if cameras briefly drop afterward, just reconfigure the Ring integration.
Phase 1 — Ring core (mostly done)¶
In the Ring app:
- Confirm the base station, keypad, and native sensors (personnel-door contact, motion) are added.
- Set up professional monitoring (Ring Protect Pro) and verify the monitored address.
- Configure modes (Home / Away), per-sensor mode participation, and entry/exit delays.
Phase 2 — Existing wired zones via the Retrofit Kit¶
At the panel
Kill AC at the breaker AND disconnect the GE backup battery before touching terminals — the GE siren is live. Photograph every wire→terminal first. The GE Concord board is being retired; the Retrofit Kit reads the zone wiring directly.
- Mount the Retrofit Kit; land each existing zone loop (the two zone wires) on a separate Retrofit zone input — one input per door/zone so each shows individually.
- Power the Retrofit Kit per its manual; pair it to the Ring base station ("Add Device → Retrofit Kit") in the Ring app.
- In the Ring app, name each zone (Front Door, Rear Door, Garage Door, Motion…) and assign mode participation + delays.
- Test each zone (open the door / walk the PIR) and confirm it reports in the Ring app.
One sensor per zone
If a zone loop daisy-chains several physical sensors, Ring (like any panel) sees the zone, not which sensor tripped. The GE zones look 1-sensor-each — verify with a meter on install day so per-zone naming is meaningful.
Phase 3 — Native Z-Wave devices to the Ring base¶
The Ring base station is a Z-Wave hub. Pair these to Ring (not to a separate HA stick):
- ZCOMBO-G smoke/CO — the one third-party Z-Wave sensor Ring accepts as a triggering alarm sensor. Pair via Ring app → Add Device → Z-Wave; configure as a fire/CO sensor (24-hr).
- Schlage BE469ZP deadbolt — pair via Ring app; set a Ring Bond (e.g. lock when armed away). Manage user codes in the Ring app.
Both still surface to HA via ring-mqtt for automations.
Phase 4 — ring-mqtt (tap Ring into HA)¶
- Settings → Add-ons → Add-on Store → ⋮ → Repositories, add:
- Install ring-mqtt. In its Configuration, MQTT auto-discovers the Mosquitto broker. Set
enable_cameras: false(alarm-only) so ring-mqtt doesn't duplicate the cameras/chimes the official Ring integration already provides.enable_panicstays off — Ring dispatches natively, so HA doesn't need panic switches. - Start → Open Web UI → log in with the primary/owner Ring account + 2FA (stores the refresh token). ⚠️ Watch for browser autofill silently re-filling a different saved Ring login — if a re-auth doesn't actually switch accounts, uninstall/reinstall the add-on to clear the token and log in via a private window.
- ring-mqtt publishes via MQTT discovery; HA gains, on its own:
alarm_control_panel.blairmont_alarm(named after the Ring location — observe arm state; notring_alarm)binary_sensor.*for each native/Retrofit zone + the contact (binary_sensor.personnel_door) and motion (binary_sensor.foyer_motion_sensor) sensors (+ smoke/CO once paired)lock.*for the Schlage (once paired)- base-station / keypad / range-extender siren + tamper + battery + info entities; siren switch
switch.blairmont_alarm_siren
Note: the Ring Alarm enumerates over a separate per-location websocket that connects ~2–5 min after the cameras (which come over REST) — don't assume "no alarm" from an early add-on log.
Phase 5 — Register entities (test gate)¶
make snapshot # needs HA_URL + HA_TOKEN — pulls the live entity registry
git add tests/fixtures/entities.txt
git commit -m "auto: snapshot — add Ring alarm zones/sensors via ring-mqtt"
For not-yet-paired devices referenced ahead of time, add an entry to tests/fixtures/entities_allow.txt with a justifying comment.
Phase 6 — HA automations (the point of ring-mqtt)¶
HA does not dispatch, and doesn't own the security logic — but it does arm/disarm as a routine convenience: Good Night arms Home, Good Morning disarms (script.good_night / script.good_morning; codeless — disarm_code is empty). Ring still owns dispatch, the keypad, and the app. It also reacts to Ring state for everything else. Build these in automations.yaml (single source of truth → CI hot-reloads on push):
- Lighting & presence — Ring motion / contact
binary_sensors drive lights, occupancy, and scenes. -
Notifications & TTS — on
alarm_control_panel.blairmont_alarm→triggered, announce the zone on Sonos/Echo and send a critical push with a Ring camera snapshot. Example trigger:- alias: "Alarm — Ring triggered → announce + push" id: alarm_ring_triggered_notify triggers: - trigger: state entity_id: alarm_control_panel.blairmont_alarm to: triggered actions: - action: notify.mobile_app_louis_iphone data: title: "🚨 Alarm triggered" message: "Ring alarm triggered — check the app." data: push: { sound: { critical: 1, volume: 1.0 } } # + Sonos/Echo TTS, Inovelli light flash, Ring snapshot mode: single -
Lock logic / dashboards — surface
lock.*and the alarm panel on the Command Dashboard; mirror arm state to tiles. - Retire the mocks —
automations.yaml§12 has threeinput_button.*_testplaceholders. Once the real Ringbinary_sensors exist, repoint or remove them and delete the helpers fromconfiguration.yaml. See Automations Reference.
Testing & validation¶
| Test | How | Expected |
|---|---|---|
| Zone wiring | Open each door / walk each PIR | Ring app + HA binary_sensor both show open |
| Arm/disarm | Arm Away on the keypad, exit, re-enter, disarm | Entry delay, then disarm; HA alarm_control_panel.blairmont_alarm tracks state |
| Monitored trigger | Coordinate with Ring + Ring practice/test mode | Ring center receives the alarm with the correct zone |
| Smoke | Detector test (ZCOMBO-G) | Ring fire event; HA binary_sensor flips |
| HA automation | Trip a sensor | Lights/notifications/TTS fire from the ring-mqtt entity |
Test monitored dispatch in Ring's practice/test mode
Live triggers can dispatch real responders. Put the Ring system in test mode (Ring app) before any end-to-end test and confirm with the monitoring center.
Entity reference (fill in real IDs)¶
| Purpose | Entity |
|---|---|
| Ring alarm state (observe) | alarm_control_panel.blairmont_alarm |
| Retrofit zones | binary_sensor.<zone_name> |
| Ring personnel-door contact | binary_sensor.<ring_personnel_door_contact> |
| Ring motion | binary_sensor.<ring_motion> |
| ZCOMBO-G smoke/CO | binary_sensor.<smoke> / binary_sensor.<co> |
| Schlage deadbolt | lock.<front_door> |
See Entity IDs once make snapshot has run.
Operations & gotchas¶
- Cloud dependency (HA side only): ring-mqtt entities depend on Ring's cloud — fine for automations, not for life-safety logic. The Ring alarm itself is local to the base and keeps working/dispatching if HA or the internet is down.
- One Ring account: ring-mqtt runs on the primary/owner account (a secondary/shared account has no device-API access). The official Ring camera integration runs on the same account and coexists fine. ring-mqtt is alarm-only (
enable_cameras: false) so the cameras/chimes aren't duplicated. - ZCOMBO-G is special: it's the only third-party Z-Wave sensor Ring accepts as a triggering alarm sensor; generic third-party Z-Wave sensors enroll monitoring-only and won't trigger dispatch.
- Konnected is not used here — the Retrofit Kit reads the wired zones. The board is freed up.
- Alexa/Echo TTS can go stale — the "Alexa — Heal When Unavailable" automation reloads the integration; don't assume an announcement was heard if the Echoes were
unavailable.
Related¶
- Security & Alarm — subsystem reference & status
- Notifications & Alerts — alarm push/TTS copy
- Automations Reference — per-section automation reference
- Entity IDs — entity registry reference