Racks & WattsLOCAL HARDWARE / CLEAR PICKS

Home Assistant alarm

DIY home alarm with Home Assistant and Alarmo

Build an Alarmo alarm with door contacts, motion, a siren and an optional keypad. Set up HACS, arm modes, phone alerts and three practical automations.

OUR PICKS / YOUR SETUP

Find your fit.

Start with Aqara contacts, SONOFF SNZB-03P motion and SNZB-09P siren on Zigbee2MQTT. Use Zooz ZSE50 instead if you already have Z-Wave JS. Get Away and Night modes working from your dashboard, then add the optional frient keypad.

  • ContactsAqara three-pack
  • Zigbee sirenSONOFF SNZB-09P
  • Alarm brainAlarmo via HACS

How we evaluate hardware.

YOUR NEXT PROJECT / THE GEAR

Parts list

  • Aqara Door and Window Sensor, 3-pack

    Use the three contacts for open/closed status and door-left-open reminders.

    Check price on Amazon
  • SONOFF SNZB-03P motion sensor

    Add interior motion detection to Away mode while leaving your Home and Night routes comfortable.

    Check price on Amazon
  • SONOFF SNZB-09P indoor siren

    Add adjustable sound and light alerts to your Zigbee2MQTT alarm setup.

    Check price on Amazon
  • Zooz ZSE50 800LR Siren & Chime

    Use a plug-in siren and chime when you already have a compatible Z-Wave radio.

    Check price on Amazon
  • frient Intelligent Keypad

    Arm and disarm without reaching for your phone using a keypad linked to Alarmo by an automation.

    Check price on Amazon

Your door sensors already know when a door opens. Give them a bigger job. Alarmo turns those little updates into an alarm with Away, Home and Night modes, a countdown when you come in, a siren when it triggers, and a message on your phone. Start with Aqara door/window contacts, a SONOFF SNZB-03P motion sensor and a SONOFF SNZB-09P siren on Zigbee2MQTT. Add a keypad once the dashboard controls feel familiar.

Research guide: device details come from the makers; setup comes from Home Assistant, Alarmo and the linked integration projects.

A DIY alarm isn’t a monitored service—if you need professional monitoring for insurance, ask your insurer.

Pick the parts you actually need

Reuse your Home Assistant host and Zigbee radio from the starter kit. The core additions are contacts for the openings you want to monitor and one siren. Motion adds interior coverage; a physical keypad is optional.

Part Job Pick it for
Aqara Door and Window Sensor, three-pack Open/closed contact Starting with several doors or windows, or reusing your starter sensors
SONOFF SNZB-03P Indoor PIR motion Watching an interior route in Away mode
SONOFF SNZB-09P Zigbee sound and light siren A Zigbee2MQTT build without another radio
Zooz ZSE50 800LR Plug-in Z-Wave siren and chime An existing Z-Wave JS setup; an alternative to the SONOFF siren
frient Intelligent Keypad Physical PIN/RFID control Arming and disarming without taking out your phone

The Aqara contacts detect the magnet moving away from the sensor. Count openings, not rooms: each door or independently opening window section you want to watch needs its own contact. Start with the entry points that matter most, then expand.

Put the SNZB-03P motion sensor where someone would pass through its view. Keep it out of the paths you use while Home or Night mode is armed. Pair everything before fixing the mounts permanently, then open each contact and walk past the motion sensor while watching its Home Assistant entity.

Skip the SONOFF SNZB-04PR2 for this alarm build for now. Its Zigbee2MQTT page flags a possible missed first report after hours of inactivity. Choose the Aqara contacts for this kit instead.

Choose your radio route

This guide uses Zigbee2MQTT for the SONOFF siren and optional keypad bridge. Its exact-device pages document Aqara contact reporting, SONOFF motion reporting and SNZB-09P siren controls.

Already on ZHA? Keep your working sensors there. For the SNZB-09P, the maker’s compatibility note currently calls for a manual script for full ZHA functionality. Use the Zigbee coordinator guide to choose the route for new hardware; give each coordinator to one Zigbee integration, and plan any migration before moving your sensors.

If you already have Z-Wave, Zooz ZSE50 is the convenient alternative siren. Zooz lists Home Assistant through Z-Wave JS; the selected model uses US/CA/MX Z-Wave and plugs into 100–120 V power. Connect it through your matching Z-Wave JS radio, such as the ZWA-2 from the water-leak shutoff guide. Your Zigbee stick handles Zigbee; the Z-Wave stick handles Zooz.

Install Alarmo through HACS

Alarmo is a custom integration downloaded through HACS. Here’s the friendly version:

  1. If HACS isn’t installed, follow its download guide. On Home Assistant OS, use the Get HACS app route, then restart Home Assistant.
  2. Follow HACS initial configuration: Settings → Devices & services → Add integration → HACS, then complete the GitHub device authorization.
  3. Open HACS in the sidebar, search Alarmo, open its repository overview and select Download. The current HACS dashboard guide shows that download flow.
  4. Restart Home Assistant, then choose Settings → Devices & services → Add integration → Alarmo.
  5. Open Alarmo in the sidebar. Add its alarm panel to a dashboard using Home Assistant’s Alarm panel card; the optional Alarmo card adds countdown and sensor feedback.

Alarmo’s default entity is alarm_control_panel.alarmo. Select your actual panel in the steps below if you rename it. You pair devices through your Zigbee or Z-Wave integration first, then assign their existing entities to Alarmo.

Give Away, Home and Night different jobs

In Alarmo’s General tab, enable the modes you want and set each mode’s entry and exit delays. Then open Sensors → Add sensors, choose the contact and motion binary sensors, and select Add to alarm. Review each sensor’s type and active modes.

Mode Include Leave out
Away Chosen doors, windows and interior motion Sensors unrelated to intrusion
Home Perimeter contacts Interior motion where you move around
Night Perimeter contacts and any deliberately chosen interior zones Sleeping areas and the routes you’ll use overnight

Set a returning-entry contact to Use entry delay. Give sensors along your exit route the appropriate Use exit delay setting. Set the initial delay duration on the mode, then enable it on the sensors that should use it. Walk the route and choose enough time to reach the controls comfortably.

The panel shows Arming during the exit countdown and Pending during an entry countdown. Disarm during Pending to stop the alarm progressing to Triggered. Leave Bypass automatically off for the windows you expect to be closed: an open window should earn a useful “failed to arm” message, rather than silently disappearing from protection.

In Codes, enable Require code for disarming and create your users. For the automatic-arming recipes below, requiring a code for disarming alone keeps setup simple. If you require a code for arming or switching modes, supply it privately in the relevant automation’s code field. Alarmo’s configuration reference covers those options.

Make the siren and phone work together

First, run the siren’s start and stop controls from its Home Assistant device page. Choose a low volume and a short, finite alarm duration for setup. For the SONOFF model, Zigbee2MQTT exposes siren_on plus sound, light, volume and duration controls.

In Alarmo → Actions, create a New action for Alarm is triggered that starts the siren. Create stop actions for Alarm no longer triggered and Alarm is disarmed, so both a timed alarm ending and a manual disarm stop it. Keep the siren’s own finite duration set too.

Alarmo’s simple action editor handles switches, lights, helpers and scripts. If your siren exposes another action type, create separate start siren and stop siren scripts using its actual Home Assistant controls, then select those scripts in Alarmo. Save each action.

Under Notifications → New notification, send Alarm is triggered and Failed to arm messages to the phone running the Home Assistant Companion app. Use Alarmo’s {{open_sensors}} wildcard to name the open sensors. Save and send a test message. The Companion notification guide explains the phone notification action.

Add the frient keypad when you’re ready

The frient Intelligent Keypad uses four AA batteries and supports PINs and RFID. Home Assistant lists KEPZB-110 as a certified frient device. Linking it to Alarmo is a separate automation step.

For the Zigbee2MQTT route, use the author’s frient keypad blueprint and Home Assistant’s blueprint import instructions. Select the Zigbee2MQTT version. Fill in the keypad’s actual MQTT State Topic, MQTT Set Topic, Keypad Pincode List, your Alarmo Control Panel, and a dedicated valid Control Panel Pincode.

That blueprint validates the keypad’s approved PIN list and uses the separate control-panel code to command Alarmo. Keep those credentials in your own configuration. Test Away, Home, Night and Disarm, then try an incorrect PIN and verify the panel stays armed. The keypad’s integration reference explains the request and state-feedback exchange.

Three automations worth building

Create these under Settings → Automations & scenes → Create automation → Create new automation. Use When, And if and Then do, and press Save after each recipe. Home Assistant’s alarm-control examples document the arm actions.

1. Arm Away when the last person leaves

Add a Zone left trigger for each tracked person, with Home as the zone. Under And if, use Not → Is in zone, selecting all those people and Home. Add an Alarm is disarmed condition for your Alarmo panel.

Also add a Template condition that requires known away states. For a two-person example, replace these placeholder entities with your people and extend the expression for everyone you track:

{{ states('person.example_one') not in ['home', 'unknown', 'unavailable']
   and states('person.example_two') not in ['home', 'unknown', 'unavailable'] }}

Under Then do, choose Arm alarm away and target Alarmo. Leave forced arming off. Unknown phone location now blocks automatic arming rather than counting as “everyone left.” Use manual arming when visitors or untracked residents are staying.

2. Switch to Night mode at bedtime

Use a Time trigger and enter your chosen bedtime. Add a Template condition requiring someone in the Home zone and Alarmo to be Disarmed or Armed home (replace the panel entity if yours differs):

{{ (states('zone.home') | int(0)) > 0
   and states('alarm_control_panel.alarmo') in ['disarmed', 'armed_home'] }}

Then choose Arm alarm night, targeting Alarmo.

Those conditions keep bedtime from changing an Away or Triggered alarm. Set Night’s sensor perimeter first, then walk the routes you’ll still use: the alarm should watch the outside openings while you get a glass of water.

3. Tell your phone when an armed door opens

Use State changed for the chosen contact, From: Closed → To: Open. For raw states, those are off and on. Add an Or condition allowing Alarmo’s Armed away, Armed home, Armed night, Pending or Triggered states.

Including Pending and Triggered handles Alarmo reacting before this automation checks its condition. Leave Arming and Disarmed out. First, send your phone a plain message naming the door. Alarmo keeps control of the entry delay and siren; this recipe adds the heads-up.

Have a camera already? Add a photo follow-up after the text alert. Use a Define variables action with photo_name set to alarm-entry-{{ now().strftime('%Y%m%d-%H%M%S-%f') }}.jpg. Then use Take camera snapshot for your camera, saving to /media/{{ photo_name }}. Create /media and allow it through allowlist_external_dirs as the snapshot documentation describes.

Finally, add a second phone notification with an image attachment:

action: notify.mobile_app_your_phone
data:
  message: "Door opened while the alarm was armed."
  data:
    image: "/media/local/{{ photo_name }}"

Replace the phone action with your own, following the Companion attachment guide. The authenticated media path keeps the photo out of a public folder. Your phone needs authenticated access to Home Assistant when away. Keep snapshot failure set to stop the remaining sequence: the text has already arrived, and a failed capture won’t send an old image.

For a new camera, use our PoE camera guide for Frigate to choose the lens, night lighting and local video streams for your alarm snapshot. Want a camera at the entrance? Our local Home Assistant video doorbell guide covers Reolink PoE versus wired Wi-Fi, button events and phone snapshots. Building the Frigate recorder too? Compare Coral, Hailo and the Intel OpenVINO route before adding a detector.

Test it quietly, then let it make a little noise

  1. Verify the siren’s direct start and stop commands briefly. Disable its Alarmo Triggered start action for the alert-only test and Save.
  2. Close your monitored openings, arm Away and wait for the exit countdown to finish. Open the entry contact: watch Pending, receive the door alert and disarm with your code.
  3. Repeat, letting the entry delay expire. Check Triggered, its phone alert and the sensor named in the message.
  4. Arm Night. Walk past an excluded motion sensor, then open a monitored perimeter contact. Verify the selected mode’s behavior.
  5. Leave a window open and try to arm: check the failed-to-arm notification names it. Close it and retry. Try a wrong keypad PIN too.
  6. Test phone delivery with Wi-Fi off, and check the optional photo. Test the leave and bedtime recipes through their actual triggers; Run actions skips their conditions. Use automation traces to see what ran.
  7. Re-enable the siren’s Triggered action and Save. Run one brief end-to-end test, disarm, and listen for the siren to stop.

Start with contacts, one motion sensor and one siren. Make Away and Night work before adding the keypad. Keep your water-leak protection running independently of intrusion modes, then return to the Home Assistant hub for the next useful project.

Adding Z-Wave contacts or planning the radio for your Zooz siren? Use the Connect ZWA-2 setup guide for the adapter, inclusion and backup steps.

For keypad access and door locking, use the Home Assistant smart lock buying and setup guide. Keep lock automations and Alarmo arming as separate jobs while you build and test them.

Adding the garage to your dashboard? Our local garage-door guide separates motor control from door status, with left-open alerts and a confirmation before arrival opening.

Keep smoke and CO responses independent of intrusion arming. Our ZEN55 guide shows how compatible wired alarms can trigger HA lights and critical phone alerts.

Sources & methodology

Where these facts come from.

Source dates are listed above.

As an Amazon Associate I earn from qualifying purchases.

YOUR NEXT PROJECT / THE GEAR

Parts list

  • Aqara Door and Window Sensor, 3-pack

    Use the three contacts for open/closed status and door-left-open reminders.

    Check price on Amazon
  • SONOFF SNZB-03P motion sensor

    Add interior motion detection to Away mode while leaving your Home and Night routes comfortable.

    Check price on Amazon
  • SONOFF SNZB-09P indoor siren

    Add adjustable sound and light alerts to your Zigbee2MQTT alarm setup.

    Check price on Amazon
  • Zooz ZSE50 800LR Siren & Chime

    Use a plug-in siren and chime when you already have a compatible Z-Wave radio.

    Check price on Amazon
  • frient Intelligent Keypad

    Arm and disarm without reaching for your phone using a keypad linked to Alarmo by an automation.

    Check price on Amazon

Prepared by Racks & Watts.