docs: prepare the wiki for 6.0
Users live in config subentries: Configure edits only the locks, and Add
user offers one user or a pasted block. The four slot-addressed actions and
the lock_state_changed event are removed, with their replacements listed
where people will look for the old names. The Condition Linker takes a
name. A new Upgrading to 6.0 page covers the migration, the removals, the
disabled-by-default PIN in-sync sensor, and the fixes since 5.5.5.
Also corrects drift found on the way: removing a lock has cleared its PINs
since 5.0.0, the usage limiter and notifier take entities rather than slot
numbers, and the keymaster steps still described slot ranges.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
34a0800
docs: add_user and delete_user take lists, with the single-user shorthand
157f898
docs: the four name-addressed actions, and ESPHome is supported without a provider
ce74274
docs: document set_credential and clear_credential, and deprecate the usercode pair
d65618d
docs: the sidebar is bare links; show the UI hub by nesting, not prose
91f8e99
docs: home page lists every page the sidebar does
ba563fc
docs: paste-able guest recipes, and fix a fragment that referenced an undefined variable
66ad48f
docs: reconcile every blueprint's inputs with what ships
4f9c7f1
docs: a keypad-only setup needs no lock (5.3.0)
20e5189
docs: Virtual locks are a credential store, not just a test double
8b3ffdc
docs: add External Keypads and note the Virtual lock's second use
4702a6b
docs: Manual gateways run api-only; gateway binding comes from discovery data
4fd04b0
docs: name the page Z-Wave JS UI (MQTT)
b8a9102
docs: add zwave-js-ui MQTT provider page
Documents the new Z-Wave JS UI (MQTT) provider (bridged via zwave-js-ui's
MQTT discovery gateway, distinct from the official websocket zwave_js
provider), and links it from the nav and integrations list.
3e2f2d0
docs: delete the Notifications stub
One paragraph from years ago that cited a wrong event name
(lock_code_manager_state_changed; the event is
lock_code_manager_lock_state_changed) and predated the tools that now
answer the question: the Slot Usage Notifier blueprint and the per-user
event entities, both covered by Blueprints and
Tracking-lock-state-change-events. Sidebar and Home links removed with
it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fa160ab
docs: finish the 5.0 pass — integration and developer pages
The "bring the wiki up to 5.0" commit covered the user-facing pages but
left the per-integration pages, the developer pages, and a handful of
smaller ones on the 4.x slot model. Every claim below was verified
against the 5.0.0-tagged code rather than carried over.
Integration pages:
- Z-Wave — users-first framing; Set/Clear PIN go through the driver's
unified access_control API, not the set/clear_lock_usercode services;
PIN length bounds are enforced in the PIN field before a write.
- Matter, Schlage, Akuvox — tag examples reframed onto users ("an LCM
user named Alice whose internal slot number is 3"), version-history
heading framing dropped. ZHA and Zigbee2MQTT needed nothing: their
slot references are device-level facts and their cited symbols
(async_set_usercode, UNREADABLE_CODE) still exist.
Developer pages (Architecture, Provider-State-Management,
Adding-a-Provider, Development-Guide), audited method-by-method:
- async_set_credential returns WriteResult (CONFIRMED / NO_CHANGE /
OPTIMISTIC), not bool; the OPTIMISTIC path drives the
unverified-slot / PENDING_CONFIRMATION lifecycle.
- Coordinator data is keyed by CredentialAddress, not bare slot ints.
- Push providers override setup/teardown_push_subscription; the
subscribe/unsubscribe wrappers are @final.
- async_is_integration_connected is async with a base default;
async_get_users takes a slots scope; slot teardown clears the
credential by default (the #1453 fix), it is not a no-op.
- credential_index_follows_slot documented (pinned everywhere except
Matter, which lets the lock allocate).
- Z-Wave is one native-user provider for both User Code CC and User
Credential CC; exception routing rewritten around the slot circuit
breaker and repair issues; number_of_uses entity row removed.
Smaller pages: Using-Condition-Entities rewritten onto name-keyed users
and the `condition` key (examples still showed slot-keyed YAML with
`entity_id` and the removed number_of_uses check, and a card example
still used the deprecated lcm-slot type); Advanced-Usage no longer tells
you to pick slot ranges; Adding-and-Removing-Locks, the activity-log
page, scheduler-component notes, Home, and debug-logs reframed onto
users. Dashboard/view-level condition_helpers examples deliberately keep
slot-number keys — that is still the real strategy config shape.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
cb26687
docs: tidy the wiki's navigation
Removes the manual release test plan. It described the pre-5.0 slot
flows step by step, so following it now would test something that no
longer exists, and nothing linked to it.
Links the rekeying tutorial from the FAQ. It is real contributed
content about matching keys across Yale, Kwikset and Schlage cylinders,
and it was reachable only by direct link.
Leaves "Supporting new lock integrations" unlisted deliberately: it is a
tombstone that redirects to the Development Guide and Adding a Provider,
both already in the sidebar. Putting a "this page has moved" stub into
the navigation would send people a hop out of their way.
85c06b5
docs: bring the wiki up to 5.0
The code moved from slots to users; the documentation had not. Two new
pages and a pass over what the change made wrong.
New:
- Upgrading to 5.0 — the one-way migration, what happens on the first
restart, entity IDs changing and what that costs automations, the
one-time unmanaged-code repair, and the restore-then-upgrade-again
path that strands recorder history.
- Managing guests and rentals — the three shapes this takes, and which
to pick. A recurring cleaner is a permanent user with a schedule
condition and needs no automation at all; a rental guest is a standing
user whose name and PIN rotate, which works because renaming is free;
add-and-remove is for when the count itself varies.
Updated:
- Services and Actions — add_user and delete_user were missing entirely.
- Custom Cards — lcm-user replaces lcm-slot (deprecated, still works),
addressing by user_entity_id or name, the remove action, and the new
add-user card.
- UI Strategies — the strategies generate user cards now, and an
add-user section. The strategy type and option names are unchanged.
- Blueprints, Tracking lock state change events — both take entity IDs
that all moved, and nothing rewrites an ID stored inside an
automation. Blueprints also gains "Finding a slot number", which the
repo's own BLUEPRINTS.md had and the wiki did not: three blueprints
ask for a number the interface deliberately never shows.
- Migrating from keymaster — reframed onto users. You name a person;
the slot number is chosen by reading the lock.
- Advanced Usage — its rental paragraph now points at the new page
instead of describing the slot-era approach.
9ff07b2
Add page on adding/removing locks and recovering from deleted lock entities
Documents the gap reported in lock_code_manager#1348: how to remove a
lock from an existing config entry, that PINs are not cleared from a
removed lock, the repair flow for a lock entity deleted outside LCM,
and the manual core.config_entries edit as a last resort.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
480ab0d
docs(developer): rewrite Architecture, Provider-State-Management, Adding-a-Provider for 4.0.0 seam
These three docs predated the User/Credential domain model (#1222),
the BaseLock User->Credential seam (#1225), and the user-tag identity
model (#1239/#1240/#1242). The old contract described
async_set_usercode/async_clear_usercode at the provider boundary and
dict[int, str | None] coordinator data, neither of which match
current code. Rewrites pin the 4.0.0 contract:
Architecture.md:
- Adds the domain model section (User, Credential, CredentialRef,
SlotCredential, LockCapabilities).
- Updates coordinator data shape to dict[int, SlotCredential].
- Documents the user-tag identity model and persistent-user-anchor
lifecycle for native-user providers.
- Replaces the provider-boundary description with the two-tier split
(slot-only vs native-user) and the @final seam methods + the
_set_credential/_delete_credential/_build_tagged_user_name
orchestration helpers.
- Updates exception hierarchy to include LockOperationFailed,
LockCodeManagerProviderError, and the seam's routing per
subclass.
Provider-State-Management.md:
- New section on slot-only vs native-user providers and how the
seam routes each.
- Method surface updated to async_get_users/async_set_credential/
async_delete_credential/async_set_user/async_delete_user/
async_get_capabilities.
- Push updates use coordinator.push_update({slot: SlotCredential}).
- Documents the LCM-slot-from-tag pattern for push handlers under
the user-tag identity model.
- Exception routing table per subclass.
- Adds the async_release_managed_slot slot-teardown hook.
Adding-a-Provider.md:
- Reorganized around the slot-only vs native-user split.
- All code examples rewritten against the current contract,
including the find-or-create-by-tag pattern with legacy adoption
for native-user providers.
- Updated complete minimal example.
- Manual + automated test guidance updated for the new fixtures.
cdaf37f
docs(integrations): update for 4.0.0 user-tag identity model
Akuvox + Schlage: tag format converged from [LCM:<slot>] <name> to
lcm:<slot>:<name>. Note the on-read tolerance for legacy format and
the lazy migration on next write so users know untouched codes still
work.
Matter: bump HA minimum to 2026.6.0 (per #1221). Add a new section
documenting the lcm:<slot>: tag, persistent-user-anchor lifecycle
(users survive PIN clear cycles, removed only when the slot is
removed from LCM config), and Matter credential index being
auto-allocated rather than pinned to LCM slot.
Z-Wave: add a User Credential CC vs User Code CC section. Document
the tag identity for U3C (lcm:<slot>:<name> in user-name), the
fact that user_id is now auto-allocated (no longer pinned to slot),
and the upgrade-time legacy adoption path. Note that UC is
unchanged. Mention the unified access_control API used for both.
924bd69
Document the deobfuscate_log service
Add a section to Services and Actions for the new lock_code_manager.deobfuscate_log
service shipped in #1217. Covers what it replaces, the privacy warning
on the response, the input/output schema, the salt-mismatch cases
(other HA instance or rotated PIN), and the CRC32 caveat so users
don't mistake the masking for cryptographic protection.
Update the intro count from six to seven services and split the
"helpers" wording to cover both generate_pin and deobfuscate_log.
5058c64
docs: mark show_code_sensors as no-op in slot-card layout
The slot card no longer renders a per-lock PIN column in the Lock
Status section (see lock_code_manager PR #1203). The hero PIN at
the top of the slot card already shows the synced code with its
own show/hide toggle.
show_code_sensors stays accepted on slot-card configs for
backward compatibility but is a no-op there. The flag still
drives code-sensor rendering in the legacy use_slot_cards: false
entities-card layout, which is unchanged.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
aa98e34
docs(keymaster): swap step order so keymaster entry is removed before LCM takes the lock
Previous order had LCM configured while keymaster's entry was still
active for the same lock -- both integrations run drift detection and
periodic sync, so they would fight each other for that window.
Frame the migration as per-lock: delete the keymaster entry first, then
add an LCM entry for that lock. Users with several keymaster-managed
locks can migrate one at a time and leave keymaster installed for the
rest. Promote the "remove keymaster entry" step before "install LCM"
and "add LCM entry"; reframe the up-front warning around the conflict
window rather than just the leftover-PIN gotcha.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
18a9fd8
docs: add migrating-from-keymaster page
Walks through the practical steps to move from keymaster to LCM: the PIN
cleanup situation (keymaster does not call clear_usercode on slot or entry
removal), feature mapping (notifications/access-count/date-range/day-of-week
limits map to LCM blueprints and condition entities), a 10-step migration
procedure, conversion recipes for each keymaster restriction type, provider
parity, and what doesn't translate (the auto-generated Lovelace dashboard,
autolock entity model, entity naming).
Wired into the Getting Started section in both the sidebar and the home
page.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0d28cfb
docs: clarify scheduler-component is usable via slot enabled toggles
Reframe the section so the limitation is scoped to using scheduler entities as
LCM condition entities (the entity states track timer runtime, not access
windows). Add a workaround section explaining that scheduler-component can drive
the slot Enabled switch directly via its action list, with all gating logic
living inside scheduler-component's own weekdays/conditions config.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3ec3ee2
Document dashboard strategy auto-registration in HA 2026.5+
Quick-start now leads with the Add Dashboard picker flow; YAML path
demoted to fallback for older HA / option customization.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
951b5f5
docs: spell out strategy scope (integration vs config entry vs slot/lock)
The four strategies differ primarily in *what slice of LCM data* they
render, but neither the hub nor the strategies page made that explicit.
Easy to miss that the dashboard strategy auto-discovers every config
entry while the view strategy only renders one.
- UI-Strategies: replace the bullet list with a scope-first table and
a one-paragraph "in practical terms" guide.
- Add-a-UI hub: add a Scope column to the decision table.
a21ea35
docs: split UI page into hub + UI-Strategies + Custom-Cards; update options
The single Add-a-UI-for-lock-code-management page was conflating four
distinct surfaces (dashboard creation, four strategies, two cards, code
display modes, legacy mode) into 264 lines that were hard to scan and
out of date in several places.
Split into three pages along the natural strategy/card seam:
- Add-a-UI-for-lock-code-management — slimmed to a hub with a "which
approach should I pick?" decision table and the dashboard quick-start.
URL preserved so external links continue to resolve.
- UI-Strategies — dashboard strategy, view strategy, slot section
strategy, lock section strategy, legacy mode, and the deprecated
option mappings. Common audience: "let LCM generate UI from my config".
- Custom-Cards — slot card, lock codes card, code display modes, and
the visual-editor note. Common audience: "I'll compose my own dash".
While restructuring, document options that were missing from the old
page or had drifted from source:
- condition_helpers (all four strategies + slot card) — extra helper
entities surfaced inside the slot card. Schema differs across
strategies (per-config-entry vs per-slot vs flat array).
- show_lock_count (slot card + slot section strategy) — header badge.
- collapsed_sections accepts both `condition` and `conditions`.
- Slot card status badges include `pending sync` and `suspended`.
- Lock codes card sync indicators distinguish in-sync, out-of-sync,
syncing, and suspended.
- Inline-edit on unmanaged slots in the lock-codes card calls
set_usercode/clear_usercode (cross-link to Services-and-Actions).
Sidebar gains a new UI section listing all three pages; Home.md mirrors
the change. Configuration-Structure stays under Getting Started.
17f8da5
docs: add Services and Actions page; list ZHA + Z2M; remove Number of Uses
- New Services-and-Actions page documenting all six registered actions
(set_usercode, clear_usercode, set_slot_condition, clear_slot_condition,
hard_refresh_usercodes, generate_pin) with parameters, errors, and
example automations. Linked from sidebar and Home under Features.
- Add ZHA and Zigbee2MQTT to the Supported Integrations list on Home.md
(already present in the sidebar; Home was out of date).
- Delete Using-"Number-of-Uses".md — the feature was removed in 2.0; the
Slot Usage Limiter blueprint is the replacement. Update the dangling
reference in Blueprints.md to plain text.
2f6e5e7