What it is
Alarmo is a community alarm-system integration for Home Assistant. Its configuration panel defines how selected sensor states, arm modes, delays and users contribute to an alarm state. Automations and configured actions can respond to that state. It uses devices already integrated with Home Assistant rather than replacing their radio or cloud connections.
My Setup
One Alarm State Across My Home Assistant Build
I use Alarmo to bring selected sensors, a physical keypad and Home Assistant responses into one alarm workflow. The sensors remain with their own integrations. Alarmo evaluates their states against its configuration and gives the rest of Home Assistant an alarm state to work with.
The useful part for my build is the separation of responsibilities. The keypad provides an input, Alarmo handles the alarm logic, and automations coordinate outputs such as notifications and lighting. I can inspect each stage instead of burying the entire behavior in a single automation.
Alarm logic runs inside Home Assistant
Alarmo is a custom integration running on my Home Assistant host. It maintains an alarm control panel entity and provides its own configuration panel for sensors, modes, users and actions. It is not a separate radio controller: Home Assistant must first receive the underlying sensor states through the integrations that own them.
Sensor integration → Home Assistant state → Alarmo rules → alarm state → configured responses
My Alarmo configuration includes inputs classified as door and motion sensors. Those inputs come from more than one integration. Their classifications describe how Alarmo interprets them; they do not turn every source into the same kind of physical sensor or give every source the same availability.
Alarmo's optional MQTT interface is disabled in my configuration. The keypad and response paths described here use Home Assistant entities, events and actions directly. My wider build uses MQTT elsewhere, but this alarm workflow does not need an extra MQTT translation between the keypad automation and Alarmo.
The connections behind the alarm workflow
Scroll the table horizontally to compare all four columns.
| Connection | Information | How I use it | Limit or dependency |
|---|---|---|---|
| Selected sensor integrations | Door and motion inputs configured in Alarmo. | Supply the states evaluated by the alarm rules. | Each input retains its source integration and update behavior. |
| ZHA keypad events | Physical arming and disarming requests. | An automation translates keypad events into Alarmo actions. | ZHA, the keypad handler and the automation must all work. |
| Alarmo state feedback | The alarm state reported in Home Assistant. | A separate automation updates the keypad alarm panel. | Feedback is distinct from the original key press. |
| Notifications and response scripts | Alarm actions and state-driven routines. | Coordinate messages, lighting and media behavior. | Each output has its own integration and delivery limits. |
| Other Home Assistant routines | Alarm state as a condition. | Make selected lighting decisions depend on alarm context. | A condition is not a new alarm sensor or an arming command. |
A physical keypad with a separate feedback path
My CentraLite keypad is joined to ZHA. An automation listens for its events and calls Alarmo's arming or disarming actions. That translation is the connection between the physical control and the software alarm. Joining a keypad to Zigbee alone would not define that behavior.
The return path is separate. Another automation watches Alarmo and sends the corresponding state to the keypad's alarm panel entity. This lets a change made elsewhere in Home Assistant feed back to the physical control instead of assuming the last button press still represents the current alarm state.
The keypad handler has a specific role
This keypad uses a local ZHA quirk in my build. Its interaction indications, estimated battery reporting and timed tamper indication have limitations documented in the ZHA keypad section. Those indications should not be mistaken for independent confirmation that Alarmo accepted a command.
For that confirmation, I check the resulting Alarmo state. An incoming event, an accepted alarm action and a successful feedback update are three different observations. This distinction matters when the keypad appears responsive but the requested mode does not take effect.
Using the alarm state beyond the alarm panel
Notifications and coordinated responses
My configuration includes Alarmo notification actions and Home Assistant routines that react to its state. A shared response script combines lighting changes with media and notification actions. It also contains temporary lighting snapshots and restoration steps.
That script coordinates separate systems. Hue lighting goes through the Hue bridge, other lights keep their own integration paths, and Alexa Media Player provides a cloud-dependent announcement output. A successful lighting action does not establish that a spoken notification was heard.
The Hue guide explains the difference between a bridge scene and a Home Assistant snapshot. A snapshot in a response script records selected states; it is not a guarantee that cleanup completes after an interruption.
Alarm context in ordinary routines
Other lighting routines check the alarm state as a condition. This lets Home Assistant decide whether a routine should proceed in its current context. Reading the state does not arm the alarm, and using a sensor in an unrelated lighting routine does not automatically enroll it in Alarmo.
Local alarm logic, mixed dependencies
Alarmo's logic runs locally, but the workflow inherits the dependencies of its inputs and outputs, so I don't describe the whole chain as offline-capable. This article describes how the parts connect. It is not guidance on building a certified or monitored alarm system.
Modes, entry and exit delays, sensor eligibility and code requirements belong to Alarmo's configuration. The upstream project documents those controls. My public article explains the architecture without publishing the household's sensor placement, codes, timing or security rules.
Check the request, state and response separately
When something disagrees, I start with the stage that should have produced the next observation. For a sensor issue, that means checking its Home Assistant state before changing Alarmo. For a keypad issue, it means checking the received ZHA event and automation trace before treating the keypad display as the alarm's source of truth.
Next I inspect Alarmo's result: whether the requested transition was accepted, whether a sensor blocks arming, and whether the configured delay or mode explains the current state. Only then do I follow the feedback automation and response actions.
A notification failure belongs to its output path, while a rejected arming request belongs earlier in the chain. Keeping those checks separate makes troubleshooting more precise and avoids changing working sensor rules to compensate for a delivery problem.
The Alarmo documentation is the reference for its modes, sensor settings and action behavior. The Alexa Media Player guide covers the announcement side of my build.
What it can do
Sensor rules
Choose participating inputs and how they behave in the enabled arm modes.
Modes and delays
Configure mode-specific behavior and entry and exit delays through the Alarmo panel.
Users and codes
Manage alarm users and code requirements separately from ordinary dashboard controls.
State-driven responses
Use the alarm state, events and configured actions to coordinate notifications and other outputs.
Install and connect
Before you start
- Home Assistant with the intended input devices already integrated.
- HACS or a manual installation of the Alarmo component.
- A reviewed plan for sensors, modes, users and response actions.
Install the component
Download Alarmo through HACS or follow the repository's manual installation instructions, then restart Home Assistant.
Add Alarmo
Open Settings > Devices & services > Add integration and choose Alarmo. Use its configuration panel to continue setup.
Configure the alarm rules
Select sensors and review their behavior, modes, delays and code requirements before enabling response actions.
Connect and verify the controls
Configure any keypad translation and feedback automations separately. Verify an accepted state transition before adding wider responses.
Limits and caveats
- Inputs and outputs retain their own connectivity and availability requirements; local Alarmo logic does not make every connected service local.
- A joined keypad still needs a configured control path to Alarmo. A key press is not proof that an arming request was accepted.
- Home Assistant is part of the operating path. These guides are not guidance on building a certified or monitored alarm system.