Automation

Best Smoke and CO Detectors for Home Assistant After Nest Protect

This post contains affiliate links. If you buy through them, we may earn a small commission at no extra cost to you. Learn more.

Google stopped making the Nest Protect in March 2025, and its suggested replacement, the First Alert SC5, has no Home Assistant integration at all. That leaves a lot of people with a working Nest that has an expiry date and no clear replacement. The best smoke detector for Home Assistant in 2026 is one that reports over a local radio, so the alert reaches your phone even when the internet is down, and that still carries a UL listing for the room it hangs in.

Original content from computingforgeeks.com - post 179169

We compared the Matter, Z-Wave and Zigbee smoke and CO alarms you can buy in the US against what Home Assistant actually exposes for each, and against the Z-Wave JS device database. None of the alarms were on our bench, and our Proxmox lab was offline for this run, so specs come from the makers, live listings and the Home Assistant docs. We confirmed the alert automation further down working on Home Assistant 2026.10.4 in October 2026, on a Core install with stand-in sensors in place of real radios.

Pick a smoke or CO detector for Home Assistant

The short version, ranked by how much of the path stays inside the house. Prices are bands from today’s listings, so check the live price before you buy:

  • Best smoke alarm overall: Heiman S1-M (Matter over Thread, about $40). UL 217 listed, local through the core Matter integration, and certified Works with Home Assistant. It does not detect CO.
  • Best CO alarm: Heiman C1-M (Matter over Thread, about $45 to $50). UL 2034 listed with a 7-year battery, and the natural partner to the S1-M.
  • Best smoke and CO combo: First Alert SMCO410 (Z-Wave Plus, about $65). Smoke and CO in one sealed 10-year unit with a Z-Wave JS device file, though its test alert has to be cleared with an idle button.
  • Best for hardwired homes: Zooz ZEN55 LR (Z-Wave Long Range, about $45). It reads the interconnect signal wire, so the hardwired alarms you already have report smoke and CO separately.

Zigbee is missing from that list on purpose. The Zigbee smoke alarms that Home Assistant users rate well carry EN 14604, the European listing, and none we found carries UL 217, which is the listing US codes ask for. If you live in Europe, the Zigbee section below is where your picks are.

Know what Nest Protect owners lost

Your Nest Protect keeps working. Google said existing units would keep their security updates and keep alarming until their printed expiration date, which is 10 years from manufacture for the second generation. What changes is the replacement path. Google appeared to have run out of Nest Protect stock by July 2025, and the Google Store now sends buyers to the First Alert SC5. That is a Wi-Fi smoke and CO alarm made by Resideo, and it shows up in the Google Home app.

Home Assistant never had an official way into the Protect either. The core Nest integration talks to Google’s Smart Device Management API, and the integration docs say smoke and CO alarms “are not currently supported by the SDM API”. The only route has been the community ha-nest-protect integration from HACS, which uses an undocumented Nest API and can break whenever Google changes it. Owners on the Home Assistant forum report that the SC5 doesn’t work with that integration, and nothing else connects it.

So the SC5 is the right answer if Google Home is your hub, and the wrong one if Home Assistant is. The same goes for the other big-brand Wi-Fi alarms. Kidde’s Ring-enabled smart alarms have no core integration, and the community one still goes through Kidde’s cloud. X-Sense added local MQTT reporting to its SBS50 base station in 2026, but it covers only alarms that pair with that base, still needs a one-time cloud setup step, and we couldn’t find the compatible SKUs on Amazon US.

Keep the alarm path local

A smart smoke alarm does two separate jobs, and only one of them belongs to Home Assistant. The siren in the alarm is the life-safety part: it sounds on its own, with no hub, no Wi-Fi and no server involved. Home Assistant is the second layer that turns that alarm into a phone alert, lights on in the hallway and the furnace fan off, so smoke doesn’t get pushed through every duct in the house. First Alert’s ZCOMBO-G listing said its Z-Wave reporting is not a life-safety system, and Zooz calls the ZEN55 “not a life safety device”.

That second layer only helps if it still works when something is going wrong. A fire can take out the router as easily as anything else, and a cloud integration fails silently when the internet goes, which is exactly when you’d want the alert. Matter over Thread and Z-Wave both report straight to your own Home Assistant box, so the message goes from the alarm to the radio to the automation without leaving the house. Wi-Fi alarms with cloud integrations put two more links in that chain, and either one can be the one that’s down.

Each local pick needs one piece of hardware on the Home Assistant side. Have these ready before the alarms arrive:

  1. A Home Assistant host that stays on around the clock. A small x86 box from our mini PC picks for Home Assistant handles every radio below.
  2. A Thread border router for the Heiman alarms. Our Thread border router guide covers the ZBT-2 and the routers that double as one.
  3. A Z-Wave controller for the Zooz and First Alert picks. Long Range needs an 800-series stick, which our Z-Wave 800 stick comparison narrows down.
  4. The Home Assistant Companion app on every phone that should get the alert, because the mobile push is what reaches you away from home.

You don’t need all three radios. A battery-alarm house can live entirely on Thread with the two Heiman units, and a house with hardwired interconnected alarms only needs the Z-Wave stick and one ZEN55.

Compare the picks side by side

The columns are the ones that decide the purchase: what each unit detects, how it reaches Home Assistant, what powers it, which listing it carries and whether it sets off other alarms.

PickDetectsPath into HAPowerListingInterconnectPrice band
Heiman S1-MSmokeMatter over Thread, localCR123A, about 5 yearsUL 217 (ETL)NoneAbout $40
Heiman C1-MCOMatter over Thread, localCR123A, about 7 yearsUL 2034 (ETL)NoneAbout $45 to $50
First Alert SMCO410Smoke and COZ-Wave JS, localSealed 10-year batteryUL 217 (UL 2034 not stated)Not advertisedAbout $65
Zooz ZEN55 LRSmoke and CO from your alarmsZ-Wave JS, local120 to 240 VACNot a life-safety deviceReads the interconnect signalAbout $45

Two things stand out. None of the battery picks advertise alarm-to-alarm interconnect, so Home Assistant is the only thing that ties them together, and an automation can’t replace a siren in the bedroom when the fire is in the kitchen. The ZEN55 is the only pick that keeps a code-compliant interconnected system intact, because it adds reporting to alarms that already sound together.

Add Matter smoke alarms with the Heiman S1-M

For a house with battery alarms and no interconnect wiring, the S1-M is the smoke alarm we’d put in first. It’s the one Matter smoke alarm we found that carries UL 217, and Heiman joined the Works with Home Assistant program in February 2026 with this exact US model.

Heiman S1-M Matter over Thread smoke alarm for Home Assistant
Heiman S1 series smoke alarm: dual-wavelength photoelectric sensor, CR123A battery, Matter over Thread on the S1-M. Image: Heiman.

Inside is a dual-wavelength photoelectric sensor (red and infrared), a CR123A battery that Heiman rates for 5 years, and an 85 dB siren. The Amazon title says “10-Year”, which is the life of the unit, not the battery. It pairs through the core Matter integration as a Thread end device, so you scan the Matter code from the Home Assistant app and the alarm joins your Thread network through the border router.

Once it’s in, Home Assistant reads the Matter smoke and CO alarm cluster and builds a useful set of entities: smoke detected, battery percentage, a battery alert, hardware fault, end of service, muted and test in progress. The end-of-service and hardware-fault entities are the ones most people ignore, and they’re the ones worth wiring to a notification, because they tell you the alarm has stopped protecting the room while it still looks fine on the ceiling.

It is not a fit for every house. There is no CO sensor, so it needs the C1-M or another CO alarm next to it. There is no interconnect either, so a fire in the basement will not sound the S1-M in the bedroom unless an automation does it through a speaker. Pairing reports are split too: some owners add it in a minute, others fight the commissioning step, which usually comes down to the Thread network rather than the alarm. Expect to pay around $40 per alarm, and check the live price before you buy.

Cover CO with the Heiman C1-M

Carbon monoxide is the half of the Nest Protect that gets forgotten, and it matters more once the heating comes on. The C1-M is Heiman’s Matter CO alarm, and Home Assistant called these the first Matter carbon monoxide alarms to be certified when it announced the partnership.

Heiman C1-M Matter carbon monoxide alarm for Home Assistant
Heiman C1-M: Figaro electrochemical CO sensor, UL 2034 listed, Matter over Thread. Image: Heiman.

It uses a Figaro electrochemical sensor, a CR123A battery rated for 7 years and the same 85 dB siren class as the S1-M, and it is listed to UL 2034 through ETL. Home Assistant maps the same Matter alarm cluster for CO, so it should land as a binary sensor with the carbon monoxide device class plus the same battery and fault entities. One automation can then handle both Heiman alarms without special cases.

The honest caveat is age. The listing had only a couple of dozen reviews when we checked, so there’s little long-term data on false alarms or sensor drift yet. Heiman doesn’t sell a Matter smoke and CO combo either; the Heiman “combo” listings on Amazon are plain standalone alarms with no radio, so read the title before ordering. Budget roughly $45 to $50, and check the live price.

Tap hardwired interconnect with the Zooz ZEN55 LR

Most US homes built in the last few decades already have hardwired alarms that sound together, because model codes require it. The IRC says all alarms in a dwelling must be interconnected so one alarm sets off the rest. Ripping those out for smart battery units would make the house less safe. The ZEN55 takes the opposite approach and adds reporting to the system you already have.

Zooz ZEN55 LR Z-Wave DC signal sensor for hardwired smoke alarm interconnect in Home Assistant
Zooz ZEN55 LR: Z-Wave 800 Long Range sensor that reads the interconnect line of hardwired smoke and CO alarms. Image: Zooz.

It wires into the junction box of one hardwired alarm and watches the interconnect signal wire, the low-voltage line the alarms use to set each other off. When any alarm in the chain trips, the signal on that line changes, and the ZEN55 reports it over Z-Wave. It tells a smoke alarm from a CO alarm and reports them as separate events. On firmware 1.40 and later, the Z-Wave JS device file gives its relay a choice of “Smoke and CO notifications”, “Smoke notification only” or “CO notification only”. That relay can switch a light or siren directly, which keeps working even when Home Assistant is down.

The radio is Z-Wave 800 with Long Range, S2 security and SmartStart, so it pairs through Z-Wave JS like any modern Zooz device and reports locally. It works with hardwired alarms from any brand as long as they use an analog interconnect, which is why a Home Assistant forum poster chose it over Kidde’s cloud-only smart alarms in August 2026: the reporting no longer depends on which alarm brand you replace next.

Pass on it if your alarms run on batteries; Zooz says it does not work with them. Installing it means switching off the breaker and working inside a box that carries 120V, so hire an electrician if you aren’t comfortable with that work. Check that your alarms use a standard analog interconnect line before ordering. The Amazon listing we checked was sold by a third-party seller at around $45, so confirm the seller and the live price at checkout.

Combine smoke and CO with the First Alert SMCO410

For years the default Z-Wave answer was the First Alert ZCOMBO-G, a battery smoke and CO combo that Z-Wave JS supports with its own device file. It has largely disappeared from retail, and its documentation described the ZCOMBO units as single-station alarms that don’t interconnect. The current Z-Wave model is the SMCO410, sold as “works with Ring”, and it’s the closest thing to a Nest Protect that Home Assistant can read locally.

First Alert SMCO410 Z-Wave Plus smoke and carbon monoxide alarm
First Alert SMCO410: Z-Wave Plus smoke and CO combo with a sealed 10-year battery. Image: First Alert.

It puts smoke and CO in one unit with a sealed 10-year battery, Z-Wave Plus certification, and a UL 217 claim on First Alert’s product page. One detail trips people up: the SMCO410 reports Resideo’s manufacturer ID (0x041B) rather than the BRK ID the older First Alert units use, so it sits in a different folder of the Z-Wave JS device database. Its device file landed in Z-Wave JS 15.9.0 in July 2025, so a current Home Assistant install recognizes it and creates smoke, CO and test entities.

Owners in the Home Assistant forum thread on the SMCO410 report it working, with two habits to learn. Pairing uses SmartStart: scan the QR code in Home Assistant first, then twist the alarm onto its bracket, because the sealed battery only switches on when it’s mounted. If you mounted it first and it sits half-provisioned, delete it from Home Assistant, hold the button until it gives three beeps to reset it, then include it normally by holding the button until it chirps twice and the green LED flashes.

The other habit is a firmware quirk owners trace to the alarm itself: after a test press, the test notification never returns to idle, so it can re-fire your automation after a Home Assistant restart until you clear it with the “Idle Smoke Alarm Alarm status” and “Idle CO Alarm Alarm status” button entities. Both are disabled by default, so open each one, go to its settings and switch Enabled on. Some owners then add an automation that presses the idle button about 20 seconds after the test sensor turns on. It’s sold by Amazon at about $65, and the live price is worth checking.

Skip Zigbee smoke alarms in North America

Zigbee has the best-tested smoke alarms in the Home Assistant community, and they’re almost all European products. Heiman’s HS1SA-E works in both ZHA and Zigbee2MQTT and exposes smoke, battery and test, but it’s listed to EN 14604 and SmartHomeScene notes it isn’t UL certified. The Frient (Develco) SMSZB-120 and Aqara’s smoke detectors are in the same position: well supported, and we found no UL 217 listing or US Amazon listing for any of them.

In Europe they’re good choices, and one forum test is worth knowing about. In a March 2026 thread, a user ran a humidifier near several Zigbee alarms: an Aqara SD-S01D false-alarmed within ten minutes, while the Heiman HS1SA and HS1SA-E ignored the steam for hours and still tripped on real smoke. That’s one person and one humidifier, and the tester got his Heiman units from Heiman, but it matches what you’d expect from a bathroom-adjacent hallway. Zigbee2MQTT also flags a firmware regression on Aqara’s JY-GZ-01AQ where the alarm beeps once and mutes itself.

In the US, the listing is the deciding factor. An unlisted alarm can conflict with local code, your insurer’s questions after a claim and a home inspection, and none of that is worth saving $10 on. Pick the S1-M on Thread instead and keep Zigbee for the leak and contact sensors where it does well, using a coordinator from our Zigbee coordinator picks.

Wire the alert automation

Whichever alarms you buy, the Home Assistant side ends up the same: a binary sensor with the smoke device class, one with the carbon monoxide device class, and an automation that reacts to either. We built that on Home Assistant 2026.10.4 with two template binary sensors driven by input booleans standing in for the radios, so we could trip them on demand. These are the blocks we added to configuration.yaml; merge them into any input_boolean: or template: key you already have instead of adding a second one:

input_boolean:
  kitchen_smoke_test:
    name: Kitchen smoke test
  hallway_co_test:
    name: Hallway CO test
  hall_lights:
    name: Hall lights
  hvac_running:
    name: HVAC running
    initial: true

template:
  - binary_sensor:
      - name: Kitchen smoke
        unique_id: kitchen_smoke
        device_class: smoke
        state: "{{ is_state('input_boolean.kitchen_smoke_test', 'on') }}"
      - name: Hallway CO
        unique_id: hallway_co
        device_class: carbon_monoxide
        state: "{{ is_state('input_boolean.hallway_co_test', 'on') }}"

With real hardware you’d drop the stand-ins and use the entity IDs your Matter or Z-Wave alarms create. The automation is where the work happens: it fires on either sensor turning on, raises a notification that names the alarm, turns on the hall lights and switches off the HVAC so the blower doesn’t spread smoke. The automations.yaml from the run, including a second rule that catches an alarm going quiet:

- id: smoke_or_co_detected
  alias: Smoke or CO detected
  description: Alert, light the house and stop the HVAC fan when a detector trips
  mode: single
  triggers:
    - trigger: state
      entity_id:
        - binary_sensor.kitchen_smoke
        - binary_sensor.hallway_co
      to: "on"
  conditions: []
  actions:
    - action: persistent_notification.create
      data:
        notification_id: smoke_co_alert
        title: "ALARM: {{ trigger.to_state.name }}"
        message: >-
          {{ trigger.to_state.name }} reported {{ trigger.to_state.state }}
          at {{ now().strftime('%H:%M:%S') }}. Lights are on and the HVAC is off.
    - action: input_boolean.turn_on
      target:
        entity_id: input_boolean.hall_lights
    - action: input_boolean.turn_off
      target:
        entity_id: input_boolean.hvac_running

- id: detector_unavailable
  alias: Detector offline
  mode: single
  triggers:
    - trigger: state
      entity_id:
        - binary_sensor.kitchen_smoke
        - binary_sensor.hallway_co
      to: unavailable
      for: "00:10:00"
  actions:
    - action: persistent_notification.create
      data:
        title: "Detector offline"
        message: "{{ trigger.to_state.name }} has been unavailable for 10 minutes. Check its battery."

Our first version had a notify action second in the list, pointing at a service that didn’t exist on the test box, and the run stopped there with Action notify.alert_log not found. Nothing after it ran, so the lights stayed off and the HVAC kept going. continue_on_error: true would not have saved it, because Home Assistant still stops on a missing service. On a real system, add the notify.mobile_app_<your_phone> action as the last step, or send the push from a second automation on the same triggers, so a removed phone registration can’t block the steps that act on the house.

For the phone itself, the Companion app critical notification options are what make the alert ring a silenced phone. Set these in the notify action’s data block:

  • Android: ttl: 0 and priority: high so it arrives at once, plus channel: alarm_stream so it rings in silent mode.
  • iOS: a push sound with critical: 1 and a volume, which plays through Do Not Disturb.

With real hardware, retarget the two input_boolean actions too: light.turn_on for your hall lights and your thermostat’s climate entity for the HVAC. Check that turning the thermostat off also stops the fan, because some thermostats keep it running when the fan mode is set to on. We validated the files with Home Assistant’s own config check before starting it. That command is for Core installs like ours; on Home Assistant OS run ha core check, or use Developer tools, YAML, Check configuration:

hass --script check_config -c /path/to/config

A clean config prints only the header line and exits 0. Anything else it prints is a problem to fix before the automation will load:

Testing configuration at /path/to/config

Then we turned on the kitchen smoke stand-in and read the logbook. The whole chain, from the input changing to the HVAC switching off, took about 3 milliseconds:

10:26:00.212423 Kitchen smoke test on
10:26:00.212690 Kitchen smoke on
10:26:00.212973 Smoke or CO detected triggered by state of binary_sensor.kitchen_smoke
10:26:00.215443 Hall lights on
10:26:00.215722 HVAC running off

The notification came up titled “ALARM: Kitchen smoke” with the message “Kitchen smoke reported on at 13:26:00. Lights are on and the HVAC is off.” The logbook times are UTC and the message uses local time, which is why they differ by three hours. Those milliseconds are the Home Assistant side only; with real radios, add the time the alarm takes to report over Thread or Z-Wave, which the stand-ins skip. Our thermostat guide for Home Assistant covers the climate entities you’d target instead of the HVAC stand-in.

Check listing, battery and interconnect first

Most bad purchases in this category come from shopping on the radio and ignoring the alarm. Work through the alarm side first:

  1. Look for UL 217 on smoke alarms and UL 2034 on CO alarms. Alarms made from mid-2024 on must pass UL’s cooking-nuisance and polyurethane foam fire tests, which cut false alarms from cooking. Check for the listing on the box rather than chasing an edition number, because sources disagree on which edition applies when.
  2. Keep interconnect if you have it. If your alarms are hardwired and sound together, add a ZEN55 instead of replacing them with battery units that can’t trip each other.
  3. Prefer photoelectric smoke sensing near kitchens and bathrooms, and put a CO alarm on every sleeping floor and near fuel-burning appliances, following the maker’s placement guide.
  4. Plan the replacement date. UL says to replace smoke alarms 10 years after manufacture or when they sound end of life, so write the date on the base and add an end-of-service automation where the alarm exposes one.
  5. Confirm the integration is local and maintained. Core Matter and Z-Wave JS integrations are; a HACS integration that logs into a vendor cloud is not, no matter how good the hardware is.

Local code wins over any of this, and some jurisdictions set rules on alarm type and placement that go beyond the model codes, so check yours before you buy for a rental or a sale.

Test the alarm path end to end

An alarm that sounds but never reaches Home Assistant fails quietly, and you’ll only find out on the day it matters. Once a month, when you’d press the test button anyway, check the whole path in order:

  1. Press the test button on one alarm and confirm the siren sounds, and on a hardwired system that the others join in.
  2. Watch the entity in Home Assistant. Heiman alarms flip “test in progress” during a self-test, while the ZEN55 reports the interconnect signal as an alarm event.
  3. Confirm the phone alert arrived with the screen off and the ringer silenced.
  4. Check the logbook for the lights and HVAC actions, then set the HVAC back.

A test press does not always look like real smoke to Home Assistant, so a smoke automation keyed on the smoke entity may not fire during a self-test. If yours does not, run the automation from its menu in Home Assistant to prove the notification and the HVAC step still work. Keep the “Detector offline” rule enabled too, because a dropped Thread route is a common failure. Sleeping Z-Wave battery alarms such as the SMCO410 don’t always go unavailable when the battery dies, so add a trigger on their battery or low-battery entity as well. We’d start with the Heiman pair on a Thread network, the SMCO410 where you want one combo unit per room on Z-Wave, or a single ZEN55 on an existing hardwired chain. If water is the next risk you want covered, our leak sensor and shutoff valve guide uses the same local-first wiring.

Keep reading

OpenCode CLI Cheat Sheet: Commands, Sessions and Fixes (PDF) AI OpenCode CLI Cheat Sheet: Commands, Sessions and Fixes (PDF) Best Mini PC for Home Assistant: 4 Picks for HAOS and Proxmox Automation Best Mini PC for Home Assistant: 4 Picks for HAOS and Proxmox Ansible + Proxmox: Automated VM Management Ansible Ansible + Proxmox: Automated VM Management Best Weather Stations for Home Assistant: Ecowitt, Tempest, Davis Automation Best Weather Stations for Home Assistant: Ecowitt, Tempest, Davis Best Water Leak Sensors and Auto Shutoff Valves for Home Assistant Automation Best Water Leak Sensors and Auto Shutoff Valves for Home Assistant Install Home Assistant on Ubuntu 26.04 LTS Automation Install Home Assistant on Ubuntu 26.04 LTS

Leave a Comment

Press ESC to close