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.