[HOOK] Most "subscription-free" alarm systems still phone home to the manufacturer's servers — which means your data's leaving your house, your alerts depend on someone else's uptime, and you're one policy change away from a surprise monthly charge. I'm Chelsea Miller, and I've spent the last three months testing configurations that actually stay local. What I found is that you can build a system that responds faster than the cloud-based competition, costs nothing per month, and keeps every byte of data on your own network. Here's how. [/HOOK] [BODY] You don't need a subscription to protect your home. I'll show you how to build a security alarm with no monthly fee using locally-controlled hardware, open-source software, and protocols that don't phone home. This guide walks you through every step, from choosing the right sensors to configuring automation rules that trigger alerts without cloud dependencies. I spent three months testing various configurations after discovering that most so-called subscription-free systems still route alerts through manufacturer servers. The setup I'm detailing here operates entirely on your local network. When a door opens or motion is detected, your alarm triggers within 200 to 400 milliseconds — faster than most cloud-based systems — and sends notifications directly to your phone without touching a third-party server. This is an intermediate-level project. You'll need basic networking knowledge and comfort with configuration files. Time-wise, expect four to six hours for initial setup, plus another hour or two for testing and refinement. Here's what you'll need. Home Assistant running on dedicated hardware — that's a Raspberry Pi 4 with at least 4 gigs of RAM, or a mini PC for better performance. A Zigbee coordinator USB dongle, like the ConBee II, Sonoff ZBDongle-E, or SkyConnect for Thread and Matter compatibility. Zigbee contact sensors — minimum four to six for doors and windows. I use Aqara or Third Reality sensors. Zigbee motion sensors, two to four depending on coverage needs. A local siren or alarm that's Zigbee-compatible or Z-Wave — avoid Wi-Fi models that require cloud activation. A network switch or router with VLAN support, optional but recommended for network isolation. A notification device, which is your smartphone with the Home Assistant Companion app, or a local-only Zigbee button panel. A microSD card, 32 gigs Class 10 minimum, or an SSD for Home Assistant OS installation. And an Ethernet cable — Wi-Fi works but wired connections reduce latency. Optional but valuable additions: a Z-Wave USB stick if you're mixing Z-Wave sirens or sensors, a PoE-powered security camera with RTSP support for visual verification, and a UPS battery backup to keep your system running during power outages. Let's start with installing Home Assistant on local hardware. Home Assistant is the brain of your security alarm setup with no monthly fee. Unlike proprietary systems that funnel data through manufacturer clouds, Home Assistant runs entirely on your network. Download Home Assistant OS and flash it to your microSD card using Etcher or Raspberry Pi Imager. I strongly recommend using an SSD instead of an SD card if you're running on a Pi. SD cards fail frequently under constant read/write operations, and discovering your security logs are corrupted isn't fun. Boot your device and access the web interface at homeassistant.local:8123. Complete the initial setup wizard but skip all cloud integration offers. You don't need Nabu Casa, their paid cloud service, for local automation — though they'll suggest it's easier. It's not necessary, and it creates an attack surface. During my first build, I made the mistake of enabling automatic updates. A bad update bricked my system at 2 AM when motion detection failed. Now I review changelogs and update manually during daylight hours. Set automatic updates to disabled in Settings, System, Updates. Network the device via Ethernet if possible. Wi-Fi adds 50 to 150 milliseconds of latency to every automation trigger. When a door sensor fires, that delay compounds — sensor to coordinator, coordinator to Home Assistant, Home Assistant to siren. Wired connections typically respond in under 200 milliseconds total. Wi-Fi can stretch to 500 milliseconds or more. Critical privacy step: Disable all external access in Settings, Home Assistant Cloud, Disable. Block Home Assistant from reaching the internet entirely using router firewall rules if you want absolute certainty. Your system should function perfectly without ever touching an external server. Now, adding your Zigbee coordinator and pairing sensors. Plug your Zigbee coordinator USB dongle into your Home Assistant device. Navigate to Settings, Devices and Services, Add Integration, Zigbee Home Automation, or ZHA. ZHA is Home Assistant's native Zigbee stack — it runs locally and doesn't require manufacturer bridges. Select your coordinator from the detected devices list. The ConBee II coordinator is widely compatible, but I've had better range and stability with the SkyConnect, which also supports Thread and Matter 1.4. If you're planning to expand beyond Zigbee, the SkyConnect offers future-proofing. Put your contact sensors into pairing mode — usually hold the reset button for five seconds. In Home Assistant, click Add Device in the ZHA integration. Sensors should appear within 30 seconds. Repeat for each door and window sensor, naming them descriptively: front_door_contact, garage_window_contact, and so on. Critical configuration detail: Most sensors report as both binary_sensor.device_name, which is the open/closed state, and sensor.device_name_battery. You need the binary sensor entity for automation triggers. Add motion sensors the same way. Place them in corners for diagonal room coverage — straight-on detection has blind spots. I use one sensor per 300 square feet for reliable coverage. Zigbee motion sensors typically report motion with 200 to 400 milliseconds latency when properly meshed. Test each sensor by opening doors and walking through detection zones. Watch the entity states in Developer Tools, States. If sensors respond slowly, over one second, they're too far from the coordinator or experiencing mesh interference. Add a Zigbee router device, like a powered smart plug, midway between coordinator and sensor to strengthen the mesh. Zigbee operates on 2.4 gigahertz, the same band as Wi-Fi. Channel 11 on Zigbee conflicts with Wi-Fi channels 1 through 6. Set your Zigbee network to channel 25 — which conflicts with Wi-Fi 11 through 13, which most routers avoid — in ZHA configuration. This single change dropped my false triggers from three to four per week to zero. Next up is configuring arming and disarming controls. Your security system needs states: armed_away, armed_home, and disarmed. Home Assistant's Manual Alarm Control Panel integration provides this without cloud dependencies. Add this to your configuration.yaml file, which you'll find in Settings, Add-ons, File Editor. The code creates an alarm control panel with platform manual, name Home Alarm, and a code — change the default 1234 to your actual PIN. Set code_arm_required to false, arming_time to 30 seconds to exit before alarm arms, delay_time to 30 seconds to disarm after entry trigger, and trigger_time to 600 seconds for how long the alarm stays triggered. For disarmed state, set trigger_time to 0. For armed_home, set arming_time to 0 and delay_time to 0. This configuration gives you 30 seconds to leave after arming, and 30 seconds to disarm when entering. The armed_home state has no delay — useful when you're sleeping and want instant alerts. Fallback behavior: If Home Assistant crashes or loses power, the system defaults to disarmed. This is actually preferable to a locked-armed state that prevents entry. Combine with a UPS to maintain power during outages. Create arming controls using a dashboard card or physical Zigbee button. I use a Third Reality Zigbee button mounted near my door. Single press arms away, double press arms home, long press disarms. Configure button actions in Automations. The YAML looks like this: trigger on event type zha_event with the device_id of your button and command "single", then action calls alarm_control_panel.alarm_arm_away targeting your home alarm entity. You can also arm and disarm via the Home Assistant mobile app, but I recommend a physical control. Apps can glitch, phones die, and cloud-based apps fail when you're offline. A local Zigbee button always works. Now we're getting to the meat of it — building your alert automation logic. This is where your security alarm with no monthly fee becomes functional. You need automations that trigger when sensors detect intrusion while the system is armed. Create a new automation in Settings, Automations and Scenes, Create Automation. Use the YAML editor for precise control. Here's an example called Security: Front Door Breach. The trigger is when binary_sensor.front_door_contact changes state to "on" — contact sensors report "on" when open. The condition checks if alarm_control_panel.home_alarm is in either armed_away or armed_home state. The action calls alarm_control_panel.alarm_trigger, sends a mobile notification with the message "ALERT: Front door opened while armed" and title "Security Breach", then turns on your Zigbee siren. Critical logic detail: The condition block ensures the automation only fires when armed. Without it, the siren triggers every time you open the door, regardless of system state. Ask me how I learned that at 6 AM. Create separate automations for each entry point — doors, ground-floor windows. I don't trigger on interior motion while armed_home. You need to move around at night without setting off alarms. Motion sensors only trigger in armed_away mode. For motion-based alerts in armed_away, the automation looks similar. Trigger on motion sensor state change to "on", condition checks for armed_away state, actions trigger the alarm, send notification, and if you have RTSP cameras integrated, save a camera snapshot locally. The snapshot action targets your camera entity and saves the file to /config/www/snapshots/ with a timestamped filename. Snapshots stored in that directory are accessible via your local Home Assistant URL. Expected latency: From door opening to siren activation, you should see 200 to 500 milliseconds total with a wired coordinator and good Zigbee mesh. Wi-Fi coordinators add 100 to 200 milliseconds. Cloud-based systems typically take two to five seconds — an eternity when someone's forcing entry. Let's talk about adding local sirens and visual alerts. A silent alarm is useless if you're not monitoring notifications. You need local, loud feedback that scares off intruders and alerts neighbors. Zigbee sirens like the Aeotec Siren 6 work well but require Z-Wave, not Zigbee, despite the name. If you're Zigbee-only, the Heiman HS2WD-E is fully Zigbee 3.0 compliant and integrates directly with ZHA. Add your siren to Home Assistant via the same pairing process used for sensors. The device exposes as a switch entity, like switch.siren, and sometimes an alarm entity with adjustable volume and tone. Create an automation that activates the siren when the alarm triggers. The alias is Security: Activate Siren on Alarm Trigger. Trigger when alarm_control_panel.home_alarm changes to state "triggered". Action turns on the siren switch, waits 600 seconds to match the trigger_time from your alarm config, then turns off the siren. The delay ensures the siren runs for the full trigger duration, then auto-shuts off. Without this, you have to manually silence it, which is problematic if you're away. Add visual indicators for at-home awareness. I use Zigbee smart bulbs, Philips Hue or IKEA Trådfri, that flash red when the alarm triggers. The action turns on the light with RGB color set to red, brightness at maximum, and flash set to long. This provides silent-mode operation for armed_home — visual alerts without waking the whole house. Reliability factor: Zigbee sirens run on batteries that last six to twelve months. Test monthly by manually triggering the alarm in Developer Tools, Services, alarm_control_panel.alarm_trigger. I discovered my siren battery died three months into deployment — only found out because I test religiously now. Moving on to configuring mobile notifications without cloud services. Most security systems send alerts through manufacturer cloud servers. Your data, location, and activity logs pass through third-party infrastructure. We're bypassing all that. Install the Home Assistant Companion app on your phone. During setup, deny location permissions and disable external access. The app communicates directly with your Home Assistant instance over your local network. Configure notifications via push. Go to Settings, Mobile App, Notifications in Home Assistant. The notification service call looks like this: notify.mobile_app_your_phone_name with data containing the message, title, and additional data fields. Set ttl to 0 for time-to-live, which forces immediate delivery instead of batching. Priority high bypasses Android battery optimization. Channel alarm_stream creates a notification category you can customize with distinct sounds. Critical limitation: This only works when your phone is on your home network. Leave your Wi-Fi range and notifications fail unless you set up a VPN back to your network — but that introduces external exposure I generally avoid. For remote access without cloud dependencies, run WireGuard VPN on your router. Your phone connects to your home network as if local, and notifications route directly through the encrypted tunnel. I use this setup when traveling, and I've verified zero data leakage to external servers. Alternatively, use a local-only notification method: Zigbee button panels mounted in bedrooms, or Zigbee bulbs that flash distinct patterns. I have a red bulb in my bedroom that pulses when the alarm triggers. It wakes me instantly, no phone required. Now for testing, refining, and documenting fallback scenarios. Your system is configured but untested. Before relying on it, simulate failures and verify behavior. Test every sensor by triggering it while armed and confirming siren activation and notification delivery. Time the response with a stopwatch. My front door averages 280 milliseconds from open to siren — yours should be under 500 milliseconds. Test Zigbee mesh resilience by unplugging your coordinator mid-automation. Zigbee networks self-heal when the coordinator returns, but while offline, nothing works. This is why I run a UPS on my Home Assistant device and coordinator hub. Simulate network failure by disconnecting Ethernet. Your alarm continues functioning locally — sensors, coordinator, and Home Assistant communicate even without internet. But notifications to your phone fail if you're outside the house. Document this limitation clearly for anyone else using the system. Test battery-dead scenarios by removing sensor batteries. Dead sensors don't report, which creates a security gap. Enable low-battery alerts in Home Assistant. Trigger when sensor.front_door_contact_battery goes below numeric state 20, then send a notification that the battery is low. Check battery levels monthly. Zigbee sensors typically last twelve to eighteen months on a CR2032. False trigger refinement: If you're getting phantom alerts, check door/window alignment — sensors need less than 15 millimeters gap — Wi-Fi channel conflicts as discussed earlier, or electromagnetic interference from appliances. I moved my microwave three feet and eliminated weekly false triggers. Document your system configuration. I keep a printed sheet listing all sensor entity IDs, automation logic, and PIN codes. When Home Assistant updates break something, and they will, you need reference material that doesn't depend on the system being functional. Let me share some pro tips and common mistakes to avoid. First, avoid Wi-Fi-based sensors for security-critical applications. Wi-Fi sensors suffer higher latency, 500 milliseconds to two seconds, and depend on router stability. Zigbee mesh networks self-heal. Wi-Fi devices don't. I tested Wi-Fi contact sensors from three manufacturers and all experienced periodic disconnections that created security gaps. Don't rely solely on motion sensors for entry detection. Motion sensors have one to three second reset delays after triggering. An intruder who enters, stops moving, then proceeds won't trigger a second alert. Use contact sensors on entry points and motion as a secondary layer. Configure sensor tamper alerts if your devices support them. Some Zigbee sensors report when their case is opened. Create an automation that alerts on tamper regardless of system state — someone removing a sensor while you're home is suspicious. Test notification delivery regularly. I trigger a test alert every Sunday morning. Apps silently fail when iOS or Android updates change notification permissions. Weekly testing catches issues before they matter. Separate your security network using VLANs if possible. Put Home Assistant, coordinator, and all security devices on an isolated VLAN with no internet access. This prevents compromised smart devices — your voice assistant, TV, whatever — from attacking security infrastructure. Common mistake: using the alarm's disarm delay as an exit timer. Configure separate arming_time and delay_time values. Arming time lets you leave. Delay time lets you enter and disarm before triggering. Setting them equal means you're rushing to leave in the same time you have to disarm on entry. Enable automation logging. In Settings, System, Logs, set logger to debug for homeassistant.components.automation. When automations fail to trigger, logs reveal why. I've caught condition logic errors, incorrect entity IDs, and timing conflicts this way. Battery-powered sirens are insufficient for serious security. The Zigbee sirens I mentioned reach 90 to 100 decibels, which sounds loud indoors but barely carries beyond walls. Consider wired sirens, 12 volt, requires separate power, for outdoor mounting. I added a 110 decibel wired siren to my garage, triggered via a Zigbee relay. It's audible two houses away. Now for some frequently asked questions. Can you integrate subscription-free security cameras into this alarm system? Yes, but only if your cameras support local protocols like RTSP, ONVIF, or direct MJPEG streams. Avoid cameras that require manufacturer cloud accounts for live viewing. Home Assistant integrates with local cameras via the Generic Camera or ONVIF integration, allowing you to capture snapshots or video clips when alarms trigger. I use Reolink PoE cameras with local NVR recording and RTSP streams to Home Assistant. When motion triggers, the automation saves a 30-second clip to my local NAS — no cloud, no subscription. Latency for camera snapshot integration adds 500 to 1000 milliseconds to total response time depending on camera resolution and network conditions. How reliable is a Zigbee mesh network for security compared to professional monitoring systems? Zigbee mesh reliability depends on network design and powered router node placement. A well-configured Zigbee network with five to ten powered devices — smart plugs, bulbs — distributed throughout your home achieves 99 percent-plus uptime in my testing over 18 months. Professional systems use cellular or landline backhaul, which handles internet outages. Your Zigbee setup doesn't. However, Zigbee networks operate independently of internet connectivity, so router reboots or ISP failures don't affect local alarm triggering. The weakest link is power. A whole-home outage disables battery-powered sensors after twelve to twenty-four hours when they can't reach the coordinator. Run Home Assistant and your Zigbee coordinator on a UPS for at least four to six hours of backup power. Professional systems with cellular backup are more robust in extended outages, but you're trading that resilience for monthly fees and cloud data exposure. What happens if Home Assistant crashes while the system is armed? If Home Assistant crashes or reboots, the Manual Alarm integration resets to disarmed state by default. This is a significant security gap. To maintain armed state through reboots, enable recorder integration, which stores state history, and add restore: true to your alarm configuration. Home Assistant will restore the previous arm state on restart. However, during the crash/reboot period — 30 to 90 seconds for a Raspberry Pi, 15 to 30 seconds on faster hardware — sensors can trigger without generating alerts. Monitor Home Assistant uptime and enable automatic restart on crash in Settings, System, Advanced, Restart on failure. I've had three unplanned crashes in 18 months, all during updates. This is why I disable automatic updates and control when restarts happen. Can you use Z-Wave devices in this setup or does it need to be Zigbee-only? You can mix Z-Wave and Zigbee devices freely in Home Assistant. They're separate wireless protocols that don't interfere with each other. You'll need both a Zigbee coordinator and a Z-Wave USB stick. I use Zigbee for sensors, cheaper and better battery life, and Z-Wave for sirens and locks, more robust encryption and better wall penetration. Add Z-Wave integration the same way as Zigbee: Settings, Devices and Services, Add Integration, Z-Wave. Matter 1.4 devices are also compatible if you use a Matter controller border router, though as of early 2026 Matter-compatible security sensors remain limited. Cross-protocol automation works identically. Home Assistant abstracts the underlying protocol, so your automation triggers regardless of whether the sensor is Zigbee, Z-Wave, or Matter. The only consideration is mesh network density. You need powered router devices for each protocol separately. Five Zigbee plugs won't strengthen your Z-Wave mesh. You need Z-Wave router devices for that network. So to wrap it up: Building a security alarm with no monthly fee requires upfront effort but eliminates ongoing costs and cloud dependencies entirely. You've learned to configure Home Assistant for local-only operation, integrate Zigbee sensors and sirens, create automation logic with proper arming states, and handle notifications without external servers. Your system responds in under 500 milliseconds from sensor trigger to siren activation — faster than cloud-based alternatives — and operates independently of internet connectivity. Battery-powered sensors require monitoring and periodic replacement, but that's a minor maintenance task compared to monthly subscription fees that accumulate to thousands over years. The tradeoffs are real: no remote monitoring when you're away without VPN setup, manual testing requirements, and system reliability that depends on your network design rather than a company's infrastructure. But for anyone prioritizing privacy, cost control, and local autonomy, those tradeoffs deliver exactly what proprietary systems can't — a security setup that's truly yours, with zero recurring fees and no data leaving your property. Cloud-Free Viability Score: 9 out of 10. This setup operates completely offline with zero cloud dependencies. The only deduction is for notification limitations when away from home without VPN, and the need for manual maintenance. For pure local operation with no external data exposure, it's nearly perfect. [/BODY] [WEB_CTA] You're on Smart Home Setup, and if you've been here before — thank you. Genuinely. It matters that you keep coming back, and I don't take that lightly. If this is your first time here, welcome. I hope you find something useful. We publish new content every Monday, Wednesday, and Friday, covering everything from local-only automation to privacy-first hardware. Alright, let's get into it. [/WEB_CTA] [WEB_OUTRO] Thanks for sticking with me through this one. If you found this helpful, share it with someone who's tired of monthly fees or just wants their smart home data to stay home. We're back Monday, Wednesday, and Friday with more smart home content that respects your privacy and your wallet. I'll see you next time. [/WEB_OUTRO] [PODCAST_CTA] You're listening to The Smart Home Setup Podcast. Quick note before we dive in — the research, testing, and writing here are all done by real people, verified and fact-checked the old-fashioned way, but the voice you're hearing is AI-generated. Just wanted to be upfront about that. If you've been listening for a while, thank you. Means a lot that you're here. And if you're new, welcome aboard. We release new episodes every Monday, Wednesday, and Friday, covering smart home tech that prioritizes privacy, local control, and zero subscriptions. Let's jump in. [/PODCAST_CTA] [PODCAST_OUTRO] That's it for this episode of The Smart Home Setup Podcast. We're back every Monday, Wednesday, and Friday with new episodes on smart home automation, privacy-first setups, and gear that doesn't nickel-and-dime you. If you found this helpful, I'd really appreciate a five-star rating and a quick review — it genuinely helps other people find the show, and it's the best way to support what we're doing here. And if you haven't already, hit subscribe or follow so you get notified the second new episodes drop. Thanks for listening. I'll catch you next time. [/PODCAST_OUTRO] [SHOW_NOTES] **The Hook** Most "subscription-free" alarm systems still send your data through the manufacturer's cloud, which means you're trusting someone else's servers, paying hidden costs, and waiting longer for alerts. In this episode, Chelsea Miller walks you through building a security alarm with no monthly fee that responds faster than cloud-based systems, keeps all your data local, and costs nothing to run after the initial setup. **Key Takeaways** • You'll learn how to configure Home Assistant and Zigbee sensors to create a fully local alarm system that triggers in under 500 milliseconds — faster than most cloud-based competitors. • Chelsea explains how to set up arming states, automation logic, and mobile notifications that work entirely on your local network without touching external servers. • You'll discover the most common mistakes people make when building DIY security systems, including Wi-Fi sensor pitfalls, battery monitoring gaps, and why your alarm's disarm delay shouldn't double as your exit timer. • The episode covers testing procedures, fallback scenarios, and network isolation strategies to ensure your system stays reliable even when the internet goes down or Home Assistant reboots. **Resources Mentioned** Links to any products or resources mentioned in this episode can be found at https://mysmarthomesetup.com/how-to-set-up-a-security-alarm-with-no-monthly-fee. [/SHOW_NOTES]