How to Build a DIY Home Alarm System With No Monthly Monitoring Fees

Professional monitoring services charge $20–50 per month — $240–600 per year — for someone to call the police when your alarm triggers. With Home Assistant and a handful of Zigbee sensors, you can build a smart alarm system that sends you an immediate phone notification, sounds a local siren, and optionally shares a video clip from your cameras. No monthly fees, no contracts, and arguably faster response since you are the first to know.

What You Need

  • Home Assistant (already running on your hub)
  • 2–4 Zigbee door/window contact sensors ($5–10 each)
  • 1–2 Zigbee motion sensors ($8–15 each)
  • A Zigbee siren ($20–40)
  • Home Assistant Companion app on your smartphone

Total hardware cost: $60–120 for a basic system covering a typical home.

How Home Assistant Alarm Panel Works

Home Assistant includes a built-in Manual Alarm Control Panel integration. It manages alarm states (disarmed, armed away, armed home, armed night, triggered) and provides a simple code-protected interface for arming and disarming.

Add it to your configuration:

alarm_control_panel:
  - platform: manual
    name: "Home Alarm"
    code: "1234"
    arming_time: 30
    delay_time: 30
    trigger_time: 120
    disarm_after_trigger: false

Step 1: Install and Configure Sensors

Add your Zigbee contact sensors to doors and windows via ZHA or Zigbee2MQTT. Place motion sensors in hallways, the living room, and other key areas. Label each sensor clearly: binary_sensor.front_door, binary_sensor.back_window_kitchen, etc.

Step 2: Create the Alarm Trigger Automation

alias: "Alarm - Trigger on Sensor"
trigger:
  - platform: state
    entity_id:
      - binary_sensor.front_door
      - binary_sensor.back_door
      - binary_sensor.living_room_motion
    to: "on"
condition:
  - condition: state
    entity_id: alarm_control_panel.home_alarm
    state:
      - armed_away
      - armed_home
      - armed_night
action:
  - service: alarm_control_panel.alarm_trigger
    target:
      entity_id: alarm_control_panel.home_alarm

Step 3: Create the Alarm Response Automation

alias: "Alarm - Response on Trigger"
trigger:
  - platform: state
    entity_id: alarm_control_panel.home_alarm
    to: triggered
action:
  - service: siren.turn_on
    target:
      entity_id: siren.zigbee_siren
  - service: notify.mobile_app_your_phone
    data:
      title: "ALARM TRIGGERED"
      message: "Home alarm is active. Check cameras."

Step 4: Add Camera Snapshots to Alerts

If you have Frigate running, include a camera snapshot in the notification:

  - service: notify.mobile_app_your_phone
    data:
      title: "ALARM TRIGGERED"
      message: "Motion detected — camera snapshot attached"
      data:
        image: /api/camera_proxy/camera.frigate_front_door

Step 5: Arming and Disarming

Add an alarm control panel card to your Home Assistant dashboard. You can also arm and disarm via the Home Assistant Companion app from anywhere (via Tailscale), a Zigbee keypad at the door, NFC tags, or presence detection (automatically disarm when your phone connects to home Wi-Fi).

Recommended Zigbee Siren

The Heiman Zigbee Siren (~$25) and Frient Intelligent Siren (~$35) are popular choices that work well with ZHA and Zigbee2MQTT. Look for a siren with both audible alarm and strobe light — the visual component is useful for deaf household members and confusing for intruders.

Related: Pair your alarm with instant notifications by sending Home Assistant security alerts to Telegram.

Choosing how you arm and disarm

Three realistic options, each with a real tradeoff: a physical Zigbee keypad (~$40–60) feels the most like a traditional alarm and works even if your phone is dead or elsewhere; the Home Assistant Companion app is free and convenient but means fumbling with a phone at the door; presence-based auto-arm/disarm (using phone location or Wi-Fi connection) is the most seamless day-to-day but needs a reliable fallback for the times presence detection lags, so most people run it alongside one of the other two rather than as the only method.

Entry and exit delays, set deliberately

A common beginner mistake is copying default delay times without thinking about their own home. An exit delay of 30–60 seconds needs to be long enough to actually leave through your usual door without adjustment; an entry delay on that same door needs to be long enough to disarm before the alarm sounds, but short everywhere else (a window, a back door) where nobody should be entering during normal use at all — giving every entry point the same generous delay just gives an intruder more time.

The honest weak point: false alarms

Professional monitoring companies have decades of tuning to reduce false dispatches; a DIY system doesn’t have that discipline built in unless you add it yourself. The fixes that matter most: require two sensors to agree (a door sensor and a motion sensor, not either alone) before triggering a loud alarm for anything short of a specific “breach” sensor, and add a short grace-period notification (“Front door opened — disarm within 20s”) before escalating to sirens, so a forgetful household member has a chance to self-correct before the whole system goes off.

Free guide — no signup

Trying to cut the cloud out of your smart home? This is the whole map in one place.

☁️➡️🏠Cloud → Local: replace every cloud service What replaces Ring, Nest, Alexa, August & more — hardware, offline status, difficulty.