Automation

Best Smart Locks for Home Assistant: Local Z-Wave, Matter and Zigbee

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

Your front door should not depend on a server in another state. A Wi-Fi lock that reaches Home Assistant through its maker’s cloud still turns with a key or a keypad code when the internet drops. The automations are what stop: no auto-relock, no jammed alert, no unlock when the car pulls into the driveway. The best smart lock for Home Assistant talks to a radio inside your house, so the lock, the controller and the automation never leave the LAN.

Original content from computingforgeeks.com - post 178332

We picked eight locks by the local path each one uses: Z-Wave through Z-Wave JS, Matter over Thread through a border router, and Zigbee through ZHA or Zigbee2MQTT. No lock was fitted to a door for this guide, so the hardware claims come from maker spec pages, the Z-Wave JS and Zigbee2MQTT device databases, Matter certification listings and live Amazon US listings. We confirmed the lock automations further down working on Home Assistant 2026.10.4 in October 2026, on an Ubuntu 26.04 lab VM with the built-in demo locks standing in for real hardware.

Pick the best smart lock for Home Assistant by radio

The radio decides what you have to own besides the lock, so read that column first. A Z-Wave lock needs a Z-Wave stick, a Matter over Thread lock needs a Thread border router, and a Zigbee lock needs a coordinator, while code slots tell you how many people can get their own PIN. Prices are Amazon US bands from late October 2026, so check the live price before you order.

JobLockRadioUser codesPowerPrice band
Best overallKwikset HomeConnect 620Z-Wave 700 Long Range, S22504 AAabout $130 to $165
Toughest deadboltSchlage Connect BE469ZPZ-Wave Plus, S2304 AAabout $185
Newest Z-Wave chipUltraloq Bolt Z-WaveZ-Wave 800, Long Rangenot on maker page4 AAabout $180
Swappable radioYale Assure Lock 2 Z-WaveZ-Wave Plus modulenot on maker page4 AAabout $210 to $240
Best Matter lockSchlage Sense ProMatter over Thread2504 AAabout $340 to $400
FingerprintAqara Smart Lock U400Matter over ThreadPIN count not stated; 50 fingerprintsrechargeableabout $230
Plain-looking deadboltLevel Lock (Matter)Matter over Threadkeypad sold separatelyCR2about $250
ZigbeeKwikset 914 SmartCodeZigbee 3.0304 AAabout $165 to $170

Choose the radio before the lock

Every lock above needs a second device on the Home Assistant side, and that device is the real buying decision. Z-Wave locks join a mesh run by a USB or network stick through Z-Wave JS. Matter over Thread locks join a Thread network that a border router bridges to your LAN, and the Matter Server app turns them into entities. Zigbee locks pair with a coordinator. If you already run one of these for sensors, buy a lock that speaks the same radio, because a lock adds little load and a second mesh adds a second thing to maintain.

Diagram of how Z-Wave, Matter over Thread and Zigbee smart locks reach Home Assistant locally, with vendor clouds on a separate internet path
All three radio paths end at Home Assistant inside the house. The vendor-cloud path is the one that stops when the internet does.

Home Assistant labels every integration with an IoT class, and that label tells you whether the lock is local. We read it straight from the integration manifests inside the Home Assistant container in our lab, for the integrations a lock can arrive through:

zwave_js             local_push
matter               local_push
zha                  local_polling
mqtt                 local_push
switchbot            local_push
yalexs_ble           local_push
homekit_controller   local_push
nuki                 local_polling
yale                 cloud_push
august               cloud_push
schlage              cloud_polling
switchbot_cloud      cloud_polling

The bottom four are the trap. The schlage integration is for Schlage’s Wi-Fi Encode locks and polls Schlage’s cloud, while a Schlage Connect on Z-Wave never touches it and shows up through zwave_js instead. The same split applies to Yale: the yale and august integrations are cloud push, but a Yale Assure 2 with the Z-Wave module is a plain Z-Wave node. Ultraloq has no integration of its own; Home Assistant lists it as a virtual brand pointing at Z-Wave, so the Ultraloq Bolt Z-Wave is simply a Z-Wave node. Ultraloq’s Matter over Thread models are a second local path, but the Wi-Fi versions are not.

Pick the path in this order, based on what already runs in the house:

  1. Check the server for a Z-Wave stick. If one is there, buy a Z-Wave lock.
  2. Check the LAN for a Thread border router. With one, a Matter lock drops in.
  3. Check for a Zigbee coordinator on ZHA or Zigbee2MQTT. Only then buy Zigbee.
  4. Start with Z-Wave if none of the three exist yet.

Z-Wave wins the tie because four of the eight picks use it, three of them already have device files in the Z-Wave JS database, and one stick handles the lock plus every sensor you add later. Our Z-Wave 800 stick guide covers the controllers. A Thread border router can be Home Assistant’s own OTBR, a HomePod mini or a Nest Hub (2nd gen), and the Thread border router guide explains which ones Home Assistant can share. For Zigbee, the Zigbee coordinator guide covers the stick.

Start with the Kwikset HomeConnect 620 on Z-Wave

The Kwikset HomeConnect 620 is the lock we’d buy first for a cloud-free setup, because it pairs Long Range and SmartStart with the most code slots for the money. Kwikset lists a Z-Wave 700 chip with Long Range, S2 security and SmartStart, 250 user codes, four AA batteries rated for at least 12 months, and a BHMA Grade 2 rating.

Kwikset HomeConnect 620 Z-Wave Long Range smart lock in matte black
Kwikset HomeConnect 620 keypad deadbolt, matte black. Image: Amazon listing.

SmartStart is the part that saves time at the door. You scan the QR code from the box in Z-Wave JS before you fit the lock, and the stick includes it with S2 Access Control as soon as the batteries go in, with no PIN typed on a ladder. Long Range matters when the front door sits at the far end of the house from the server: a Long Range node talks straight to an LR-capable controller (any 800-series stick) in a star layout instead of hopping through mains-powered repeaters. Kwikset’s SmartKey cylinder also lets you rekey the lock yourself to match your other doors.

If a Grade 1 rating matters to you, the Schlage below is the tougher bolt. Amazon itself sold the matte black version at about $150 when we checked, with other finishes from about $130 to $165.

Get a Grade 1 deadbolt with the Schlage Connect

The Schlage Connect BE469ZP is the oldest design here and shares the top rating with the Level Lock. Schlage rates it ANSI/BHMA Grade 1 with a AAA overall score, fits doors from 1-3/8 to 1-3/4 inches thick, and builds in an alarm. It holds 30 user codes and runs on four AA batteries for up to a year by Schlage’s estimate.

Schlage Connect BE469ZP Z-Wave touchscreen deadbolt in satin nickel
Schlage Connect BE469ZP, Century trim in satin nickel. Image: Schlage.

It is a Z-Wave Plus lock with S2, which means no Long Range and a mesh that needs a repeater or two between the door and the stick if the house is large. Thirty codes is enough for a family and a cleaner, not for a rental with weekly guests. Over 2,400 Amazon reviews make it the most widely deployed lock on this list, and the BE469ZP has its own device file in the Z-Wave JS database, so its configuration parameters are mapped.

Look elsewhere for more than 30 codes or a lock that rekeys without a locksmith. The satin nickel Century model was about $185 from Amazon directly; other finishes came from third-party sellers at higher prices.

Go Z-Wave 800 with the Ultraloq Bolt Z-Wave

The Ultraloq Bolt Z-Wave is built around an 800-series Z-Wave chip, a generation newer than the Kwikset’s, and the Amazon listing names Long Range support. It runs on four AA batteries, carries an IP65 rating on the exterior keypad, and fits doors from 1-3/8 to 2-1/4 inches, which covers thicker exterior doors that some locks miss.

Ultraloq Bolt Z-Wave 800 smart lock with keypad
Ultraloq Bolt Z-Wave with its round keypad. Image: Ultraloq.

Ultraloq rates the batteries at up to 8 months on alkaline cells and a year on lithium (its FAQ says 6 months of everyday use), and the page confirms SmartStart QR pairing, but it does not state the code count or the S2 class, so check both at inclusion. The Z-Wave JS database has no device file for this model yet (only the older U-Bolt Pro Z-Wave), so Z-Wave JS drives it through the standard lock command classes. Ultraloq also sells Matter over Thread Bolts, which are local too; it is the Wi-Fi models that tie you to the app, so check the radio on the listing before you buy.

Buyers who want a full spec sheet before paying should take the Kwikset instead. The brand’s own store on Amazon sold it at about $180.

Keep the radio swappable with the Yale Assure Lock 2

The Yale Assure Lock 2 Keypad with Z-Wave (YRD410-ZW2) ships with Yale’s Z-Wave Plus module in a slot on the interior unit, which is the reason to pick it. The radio is a card you can pull out, so the lock body outlives the radio. Yale rates it BHMA Grade 2, says four AA batteries last about 9 to 12 months with Z-Wave, and keeps Bluetooth for the Yale Access app as a fallback you can ignore.

Yale Assure Lock 2 keypad smart lock in black suede with the Z-Wave Plus module
Yale Assure Lock 2 Keypad, black suede, shown with the Z-Wave Plus module. Image: Yale.

Yale does not state which Z-Wave security class the ZW2 module negotiates, so watch the inclusion dialog in Z-Wave JS: you want S2 Access Control, and S0 is the fallback the Home Assistant docs reserve for older locks. The newer Assure Lock 2 Touch with fingerprint ships with the ZW3 module instead, if you’d rather start on the later card.

On price per feature, the Kwikset still wins. Amazon sold the keypad version at about $210, and the touchscreen and fingerprint versions at about $230 to $240.

Use Matter over Thread with the Schlage Sense Pro

The Schlage Sense Pro (BE889WB) is Schlage’s Matter over Thread deadbolt, certified at Matter 1.3, and it’s the Matter lock we’d pick when the house already has a Thread border router. It stores 250 user codes, runs on four AA batteries with a USB-C jumpstart for a dead set, carries an ANSI Grade 2 rating and adds ultra-wideband for Apple Home Key.

Schlage Sense Pro Matter over Thread smart deadbolt with touch keypad
Schlage Sense Pro exterior keypad, satin nickel. Image: Schlage.

Matter gives Home Assistant more than lock and unlock. The Matter integration exposes actions to add users and PIN credentials (matter.set_lock_user, matter.set_lock_credential and their clear and status partners), so in principle code management stays local the way it does on Z-Wave. Schlage doesn’t document how the Sense Pro treats PINs set from a second Matter admin, so test one code before you retire the Schlage app. Schlage lists a 2.4 GHz Wi-Fi network as a requirement and uses it for the Schlage Home app. Home Assistant control runs over Thread, but we could not confirm the lock sets up without the app or Wi-Fi, so budget for both.

Battery life is the trade. Schlage rates the Sense Pro at up to six months against a year for the Connect, with Thread, UWB and Wi-Fi radios sharing the same four cells. It is also the most expensive lock here: matte black was about $340 and satin nickel about $395 on Amazon.

Add fingerprints with the Aqara Smart Lock U400

The Aqara Smart Lock U400 is the fingerprint pick, and it’s Matter over Thread at Matter 1.4 with Aqara listing Home Assistant support directly. It stores 50 fingerprints, reads NFC cards, runs on a rechargeable battery that Aqara rates at up to six months, and has an IP65 exterior.

Aqara Smart Lock U400 Matter over Thread fingerprint deadbolt in black with retail box
Aqara Smart Lock U400 in black, interior and exterior units with the retail box. Image: Amazon listing.

Home Assistant’s Matter actions are built around users and PIN codes, so plan on Aqara’s app for anything beyond that, fingerprints included, and add Home Assistant as a second Matter admin. Firmware is the other reason to keep the app. The Home Assistant docs say Matter firmware updates fail for Thread devices when any Apple border router is on the network, and Home Assistant only fetches update files that makers publish to the Matter ledger, so don’t count on it to update the U400. The rechargeable pack also needs a charge every few months by Aqara’s own rating, where an AA lock just takes fresh cells.

Pass on it if swapping AA batteries beats charging a pack for you. AqaraDirect sold the black version at about $230 on Amazon.

Hide the motor in the bolt with the Level Lock

The Level Lock (Matter) is a full deadbolt that replaces most standard US deadbolts, with the motor hidden inside the bolt so the door shows only a plain cylinder and thumb turn. Level claims a BHMA AAA rating, uses a single CR2 battery, and certifies the lock at Matter 1.4 over Thread.

Level Lock Matter over Thread smart deadbolt, exterior and interior in black
Level Lock (Matter), exterior cylinder and interior turn in black. Image: Level Home.

It fits doors 1-3/4 to 2 inches thick, so a thinner 1-3/8 inch interior-style door rules it out. There’s no keypad on the lock itself, so guests need a phone, a key or the separately sold Level Keypad. In Home Assistant it behaves like any other Matter lock once it joins the Thread network, and remote access comes from the border router rather than Level’s cloud. Level’s own Wi-Fi bridge is only for people without a Thread hub.

Anyone who wants codes at the door without a second device should pick a keypad lock. Level Home sold it at about $250 on Amazon; the Level Lock Pro with Apple Home Key was about $350.

Connect the Kwikset 914 to Zigbee

The Kwikset 914 SmartCode is a Zigbee lock (Zigbee 3.0 on the Amazon listing and the CSA certification) still sold new on Amazon in the US, and it is the one to buy if your house already runs a Zigbee coordinator. It’s a BHMA Grade 2 deadbolt with 30 codes and four AA batteries that Kwikset rates at 12 months or longer.

Kwikset 914 SmartCode Zigbee keypad deadbolt in matte black
Kwikset 914 SmartCode, contemporary trim in matte black. Image: Amazon listing.

Zigbee2MQTT’s device page for this family exposes lock state, battery and a pin_code setting, and ZHA has its own code actions, so both stacks manage codes locally. That page covers the 99140-031 model, and we could not confirm which Amazon finish maps to which model number. If you are still choosing a stack, our ZHA vs Zigbee2MQTT comparison covers the trade-offs. Stock is the weak point: Amazon listed the matte black version as low stock when we checked, and the Yale Zigbee module we found is for older Assure locks from a third-party seller.

On a fresh install, Z-Wave has more current locks to choose from. The matte black 914 was about $165 to $170, and the touchscreen 916 about $220.

Build lock automations that stay local

A local lock earns its keep in automations, so we ran two of them in our lab against Home Assistant’s demo lock platform. The demo platform creates four locks, one of which jams every time it locks, which is the easiest way to test a jam alert without a door. Both automations below are the exact file we loaded into /config/automations.yaml, and they work the same on a Z-Wave, Matter or Zigbee lock entity because Home Assistant gives every lock the same states.

- id: front_door_auto_relock
  alias: "Front door: relock after 2 minutes unlocked"
  triggers:
    - trigger: state
      entity_id: lock.front_door
      to: "unlocked"
      for: "00:02:00"
  actions:
    - action: lock.lock
      target:
        entity_id: lock.front_door

- id: any_lock_jammed
  alias: "Any lock: alert when jammed"
  triggers:
    - trigger: state
      entity_id:
        - lock.front_door
        - lock.kitchen_door
        - lock.poorly_installed_door
        - lock.openable_lock
      to: "jammed"
  actions:
    - action: persistent_notification.create
      data:
        title: "Lock jammed"
        message: "{{ trigger.to_state.name }} reported jammed at {{ now().strftime('%H:%M') }}"

We unlocked the front door, locked the badly fitted one, then waited. These are the front-door and jammed-lock lines from the logbook, showing both automations firing and the relock landing exactly two minutes after the door reported unlocked:

07:41:29 lock.front_door | unlocking | call_service
07:41:31 lock.front_door | unlocked | call_service
07:41:39 lock.poorly_installed_door | locking | call_service
07:41:41 lock.poorly_installed_door | jammed | call_service
07:41:41 automation.any_lock_alert_when_jammed | triggered by state of lock.poorly_installed_door | call_service
07:43:31 automation.front_door_relock_after_2_minutes_unlocked | triggered by state of lock.front_door | call_service
07:43:31 lock.front_door | locking | automation_triggered Front door: relock after 2 minutes unlocked triggered by state of lock.front_door
07:43:33 lock.front_door | locked | automation_triggered Front door: relock after 2 minutes unlocked triggered by state of lock.front_door

Two things in that log matter for real locks. The timer starts at unlocked, not at unlocking, so a slow motor does not eat into the delay. And jammed is its own state, so the alert only fires when the lock itself reports a jam. A bolt that hits the strike plate on a sagging door shows up there, and the notification arrives before anyone finds the door unlocked at night.

On a real door, give the relock a condition. A lock that throws its bolt while the door stands open leaves the bolt sticking out, so add a door contact sensor as a condition (only lock when the door reads closed), or let a Z-Wave lock relock itself with zwave_js.set_lock_configuration on locks that support it (older ones use their own auto-lock parameter), which keeps working when Home Assistant is down.

Not every lock supports every action. Calling lock.open on a lock that does not advertise the open feature fails with an HTTP 400 and this message:

{"message":"Entity lock.front_door does not support action lock.open"}

On Matter locks the open action only appears when the lock reports the unbolt feature, in which case lock.open unlatches and lock.unlock only withdraws the bolt. Check the entity’s supported features before you build a “let the courier in” button on it.

Set PIN codes from Home Assistant

Each radio has its own actions for user codes, and all of them run without the maker’s app once the lock is paired. That’s what makes a lock usable for a cleaner’s weekday code or a guest code that expires, so check the action names before you plan a code-rotation automation:

PathSet a codeClear a codeWho unlocked
Z-Wave JSzwave_js.set_lock_usercodezwave_js.clear_lock_usercodezwave_js_notification event with the user ID
Mattermatter.set_lock_credentialmatter.clear_lock_credentiallock operation source on the entity
ZHAzha.set_lock_user_codezha.clear_lock_user_codenot covered here
Zigbee2MQTTpin_code setting on the deviceset pin_code to nullaction_user and action_source_name

Z-Wave JS goes furthest. Besides the user-code actions, zwave_js.set_lock_configuration sets auto-relock and timed operation on the lock itself. Only locks that implement those settings honour it, and on them the relock still happens if the server is down. Older locks such as the BE469ZP handle auto-lock through their own configuration parameter instead. A keypad unlock arrives as a zwave_js_notification event labelled “Keypad unlock operation” with the user ID, which is how you build “tell me when the dog walker arrives” without a cloud account.

Check these before you order

Most returns come from fit and power, not from the radio, so run through these before you compare features:

  1. Measure the backset and the door thickness.
  2. Include a Z-Wave lock with S2 Access Control, not S0.
  3. Add a Thread border router to the price of a Matter lock.
  4. Read the BHMA grade on the maker’s page, not the listing.
  5. Decide between AA cells, a rechargeable pack and a CR2.
  6. Confirm who opens the door without a phone.

Most picks list a 2-3/8 or 2-3/4 inch backset, but door thickness differs: the Schlage Connect tops out at 1-3/4 inches, while the Ultraloq takes up to 2-1/4. Most Matter over Thread locks need a border router to reach Home Assistant at all, so count the router in the cost unless the lock also does Matter over Wi-Fi. Grade 1 is the Schlage Connect and Level’s own claim, most of the others are Grade 2, and Aqara does not state one for the U400. AA locks run 6 to 12 months by maker ratings, the U400 needs charging, and the Level takes a CR2. The Level also needs a door at least 1-3/4 inches thick. Every pick except the Level Lock has a keypad on the door; the Level needs its keypad bought separately.

If you run Home Assistant on a small box, the lock adds almost nothing to the load. The mini PC guide for Home Assistant covers the hardware, and the Ubuntu 26.04 install guide is the setup we used for the lab VM. The same local-first logic drives our thermostat picks for Home Assistant.

Skip the cloud-only locks

A lock can be excellent hardware and still fail this list. These came up in research and stayed out, mostly because Home Assistant reaches them through a vendor server or needs a cloud step the day you set them up:

  • Wi-Fi-only locks (Schlage Encode, Wi-Fi U-Bolt Pro, the original Kwikset Halo, non-Matter eufy): cloud or nothing.
  • Matter over Thread variants such as Kwikset Halo Select Plus and eufy E30: local, but not researched here.
  • SwitchBot Lock Pro and Lock Ultra: local push, but the key comes from the SwitchBot account or app.
  • Yale and August Bluetooth locks: local push after a one-time offline key fetch.
  • Aqara U100: owners report it reaching Home Assistant through an Aqara hub.

The two Bluetooth options are a reasonable second tier if you already own one, since they keep working offline after that first key fetch. For a new door, buy the radio you can run yourself: Z-Wave if you’re starting from nothing, Matter over Thread if a border router is already on the network, and Zigbee only if the coordinator is already there.

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 Disable User Creation (Signup) on GitLab welcome page Git Disable User Creation (Signup) on GitLab welcome page

Leave a Comment

Press ESC to close