Skip to content
Home Assistant TestFlight
Security & safety

keymaster

FutureTense/keymaster · vv0.6.2

HACSLocal polling

Home Assistant integration for managing Z-Wave enabled locks

In Apple Home through HomeKit Bridge

What HomeKit Bridge makes of each kind of entity this integration creates, read from its source code. A device only gets the ones that apply to it.

EntityShows up asNote
switchSwitch or outlet
lockLockNeeds its own HomeKit Bridge in accessory mode
binary_sensorSensor (motion, contact, leak, smoke…)
sensorSensor (temperature, humidity, air quality…)
buttonButton (as a switch)

3 reports below say how a device from this integration behaves in the Home app.

What people report

Keymaster manages lock PIN codes across Z-Wave JS, ZHA and Akuvox providers; Schlage Z-Wave locks are common but need a complete inclusion. HomeKit Bridge exposure of its helper switches was fixed, and HomeKit-created Schlage PINs cannot be managed.

  • Works8
  • Partly works3
DeviceIn Home AssistantIn Apple HomeWhat they saidSource
Akuvox A08SWorks LocalSupported via Local Akuvox provider
Saved copy
Summary Add Local Akuvox (`local_akuvox`) as a supported lock provider for keymaster, enabling code slot management and event handling for Akuvox door controllers. ## Changes ### Akuvox provider (`providers/akuvox.py`) - Maps keymaster slots to Akuvox users via `[KM: ]` name tags - Handles webhook events: valid_code_entered, relay triggered/closed, input triggered/closed, invalid_code_entered - CRUD operations for user codes via local_akuvox service calls - Filters cloud-sourced users (source_type '2') from management - Accesses Akuvox coordinator via `hass.data` (not `runtime_data`) ### …

Excerpt saved from GitHub on 2026-10-23.

PR #578 · 2026-03
Akuvox E18C door controllerWorks LocalLocal users now detected when source_type is 'local'
Saved copy
Akuvox E18C firmware may return `source_type="local"` instead of `"1"` for locally-created users. The previous strict equality check against `"1"` silently skipped all local users on affected devices. ## Changes - Tagged `[KM:XX]` users always pass `_is_local_user()`, if Keymaster created it, Keymaster manages it regardless of `source_type`/`user_type`. - Invert source_type logic: instead of matching known-local (`"1"`), we now exclude known-cloud (`"2"`). Any other value (including `"local"`, `"1"`, or future firmware strings) is treated as local. - Update tests to cover the new tag-bypass …

Excerpt saved from GitHub on 2026-10-23.

PR #616 · 2026-05
Akuvox X916Works LocalUser filtering fixed where firmware omits source_type
Saved copy
Problem The Akuvox provider filters local vs cloud users by checking `source_type == "1"`. This works for A08S and E18C models, but the X916 firmware does not populate `source_type` at all (returns `None` for all users). This causes the provider to skip every user on X916 devices, breaking user code management entirely. Observed symptoms on X916: - `async_get_usercodes()` returns empty list - `async_set_usercode()` always calls `add_user` instead of `modify_user`, causing `FAILED` errors when a user already exists - `async_clear_usercode()` silently does nothing ## Solution Replace the inline …

Excerpt saved from GitHub on 2026-10-23.

PR #584 · 2026-03
Keymaster slot control switches via HomeKit BridgeWorksBroken in Home
Slot switches appeared as writable HomeKit switches, risking lock-outs; fixed v0.3.4
Helper switches made diagnostic/config entities in v0.3.4
Saved copy
Describe the bug # What happens The per-slot control switches (Enabled, Limit by Number of Uses, Use Date Range Limits, Use Day of Week Limits, the per-day and time toggles, etc.) are created with no `entity_category`. By default the HomeKit bridge exposes every switch-domain entity that isn't hidden or categorized, so all of these get added to HomeKit as writable switches. Because they're writable from HomeKit, an Apple Home scene/automation (or a bulk "turn on" action) can flip the limit toggles on active slots. On my locks this turned on the date-range/day-of-week/use-count limits for …

Excerpt saved from GitHub on 2026-10-23.

Issue #624 · 2026-05
Kwikset 620 deadboltWorksWorks nicely via Keymaster; no fingerprint reader
Saved copy
Are you deadset on the fingerprint requirement? If not, Kwickset 620. Works quite nice, use keymaster integration with HA via HACS.

Excerpt saved from the Arctic Shift Reddit archive on 2026-10-23.

Reddit comment · 2026-10
Schlage Z-Wave locksWorks LocalWorks in Home
Works with Siri unlock via HomeKit Bridge; Keymaster manages codes
Works with Siri unlock via HomeKit Bridge; Keymaster manages codes
Saved copy
I have our z-wave schlages hooked up to HA and use keymaster to manage codes, auto-lock, etc. I wouldn't have it any other way.

Excerpt saved from the Arctic Shift Reddit archive on 2026-10-23.

Reddit comment · 2024-08
Z-Wave locks with User Credential CCWorks LocalSupport added for HA 2026.6+ locks using User Credential CC
Saved copy
HA Core 2026.6 adds zwave-js-server-python 0.71.0, where locks that advertise User Credential CC may no longer expose legacy User Code CC values. Keymaster then cannot find slots and PIN set or clear operations fail with NotFoundError. This keeps backward compatibility with guarded imports and probes each Z-Wave JS node after connect. Locks without the new API, unsupported credential CC, or probe errors continue through the legacy User Code CC helpers. Locks with User Credential CC use user_id = slot number and credential slot 1 for PIN credentials. Behavior matrix: - old HA without …

Excerpt saved from GitHub on 2026-10-23.

PR #619 · 2026-05
Zigbee locks via ZHAWorks LocalZHA lock provider adds PIN management and keypad events
Saved copy
Summary This PR adds a ZHA (Zigbee Home Automation) lock provider implementation for Keymaster, enabling PIN code management and real-time keypad lock/unlock event handling for Zigbee locks integrated via native ZHA. ## Proposed change A new `ZHALockProvider` is introduced in `custom_components/keymaster/providers/zha.py` following the `BaseLockProvider` design. - Uses `zha.set_lock_user_code` and `zha.clear_lock_user_code` services for code management. - Implements an optimistic cache (`_usercodes_cache`) for lock codes, since ZHA does not support retrieving PIN codes from locks. - …

Excerpt saved from GitHub on 2026-10-23.

PR #638 · 2026-06
Schlage BE469ZPPartly works LocalCode slots missing until re-interview or proper S0/S2 inclusion; signal quality matters
Saved copy
I had the same problem with my Schlage BE469ZP's back on an older version of zwave_js. For me this problem is ended up being caused by an incomplete inclusion when using S0. For whatever reason, my locks just refused to properly transmit the usercodes during the inclusion process. After zwave_js added support for S2, I re-included my locks using S2 and this problem went away entirely. It might be worth excluding/reincluding to verify that S2 security is used instead of the legacy S0

Excerpt saved from GitHub on 2026-10-23.

Issue #278 · 2022-04
Schlage FE599Partly works LocalLock/unlock events and notifications not triggered, unlike BE649ZP
Saved copy
Describe the bug FE599 locks --> When locking/unlocking via code and/or manual, no notify events are being triggered and sent to mobile device. Works fine for BE649ZP locks Environment (please complete the following information): - Z-Wave integration name: zwaveJS - Lock make and model: FE599 Logs Paste your error logs here. Screenshots none available to show

Excerpt saved from GitHub on 2026-10-23.

Issue #281 · 2022-05
Schlage lock with Apple Home resident PINPartly worksPartly in Home
Home Key resident PIN appears as HomeKit-xxxx code, managed only from Apple Home
HomeKit-created PINs cannot be tagged; keymaster now skips them
Saved copy
Summary Fixes Schlage refresh spam for HomeKit-created resident PINs by treating untagged `HomeKit-*` code names as unmanageable before keymaster assigns virtual slots or attempts add-then-delete tagging. Schlage exposes only code names and PINs, with no provenance metadata, so name matching is the only available mechanism for this provider. ## Proposed change The Schlage provider now keeps a module-level tuple of compiled unmanageable name patterns, starting with a case-insensitive `HomeKit-*` prefix match. Tagged `[KM: ]` codes always remain keymaster-managed, even if their friendly name …

Excerpt saved from GitHub on 2026-10-23.

PR #819 · 2026-10

Gathered from GitHub issues, pull requests, discussions and docs, and from r/homeassistant. These are individual reports, so check the linked thread and the date before you buy.

How it connects

Local polling

Talks to the device on your network, asking it for updates every so often.

Details

Installs (analytics)1,760 (0.25%)
GitHub stars350
Latest versionv0.6.2 (2026-10-21)
Set up in the UIYes
Maintainers@FutureTense, @firstof9, @raman325, @tykeal
LicenseMIT

In ReReHome

Whatever HomeKit Bridge shares reaches Apple Home as normal HomeKit accessories behind your Home Assistant bridge, so ReReHome shows and controls them like any other.

Bridges get their own settings page listing the accessories behind them.