Skip to content

Merge beta into main#565

Merged
raman325 merged 66 commits intomainfrom
beta
Feb 26, 2026
Merged

Merge beta into main#565
raman325 merged 66 commits intomainfrom
beta

Conversation

@raman325
Copy link
Copy Markdown
Collaborator

@raman325 raman325 commented Feb 25, 2026

Proposed change

Merges beta into main. Releases have been coming from beta since mid 2025 at least so I think this is safe.

Type of change

  • Dependency upgrade
  • Bugfix (non-breaking change which fixes an issue)
  • New feature (which adds functionality)
  • Breaking change (fix/feature causing existing functionality to break)
  • Code quality improvements to existing code or addition of tests

Additional information

  • This PR fixes or closes issue: fixes #
  • This PR is related to issue:

Snuffy2 and others added 30 commits November 24, 2024 09:30
…product (#394)

* Move coordinator to separate file

* Move services from init to services

* Update typing

* Add KeymasterEntity

* Add Text Entities

* Update KeymasterLock data model

* Change to one Coordinator for entire integration

* Update for new data model

* Add property to link entity to coordinator data

* Connect to Z-Wave and move to config_entry_id as key

Rename KeymasterLock entities from lock to kmlock
Rename KeymasterLock parent to parent_name

* Add additional Code Slot Active Binary Sensors

* Fix via_device

* Remove use of keymaster_device_id

* Write PIN changes to lock and sync children
* Add Number entities

* Add Switch Entities

* Remove converted helpers, scripts, automations

* Fix enabled switch

* Add datetime and time entities

* Store kmlocks in JSON file

* Build Code Slot is active logic

* Add limit by time of day switch

* Use zwave_js_server for usercode updates

* Refine active/enabled logic

* Code cleanup

* Update Listeners

* Sync Lock and Door Statuses

* Auto Lock Timer

* Rename door/lock status to state

* Fix circular imports with type annotations

Redo json import code

* Complete Auto Lock Timer

* Add notifications

* Update config and options flow

* Delete unused code slot entities on update

* Code Cleanup
* Fix ValueError when clearing PIN

* Keep entities available when slot not enabled

* Add Code Slot Sync Status Sensor

* Code Cleanup

* Refresh in 15 seconds after PIN changes
… if door sensor set (#403)

* Only add Door Notifications and Retry Lock if door sensor set

* Add Icons

* Add Override Parent Logging
* Further logic refinement

* Lovelace refinements
* Delete Lovelace on Lock Delete

* Delete config file on coordinator delete
* Add Notify Script to config flow

* Filter out already used locks and Config flow cleanup
* Remove unused config fields

* Remove unused yaml

* Update ConfigEntry to Version 3

* Remove unused functions

* Update Z-Wave JS Client

* Combine all config into pyproject.toml

* Update conftest.py

* Limit test files for now

* Change to ruff

* Linting cleanup

* Update pytest.yaml

* Update test_config_flow.py

* init and config_flow changes to pass pytest
* Linting Cleanup

* More complicated linting cleanup

* Update pyproject.toml

* Update .gitignore
* Fix config_flow

* Remove assertions

* Initialize code_slot and dow to None

* Update ruff for Py3.13 and Fix/Format
* Show Code Slot Name in Unlock Notifications

* Only trigger changes when state actually changes

* Use activity map to standardize event name
* Add none option for notification scripts

* Change to none for all options

* Add additional typing

* Linting

* Variable naming cleanup

* Fix Entity Naming

* Clarify datetime entities vs import

* Handle dictionary changed size during iteration errors

* Check usercode after clearing code slot

* Keep pin when reconfiguring
Line 834 added. The initial message string was missing, causing an exception that killed the notification. This effectively disabled all code-specific notifications and required the use of global notifications.
* fix: switch to reconfigure flow, fix tests

* linting and formatting

* remove commented lines

* update more tests

* more test updates
* Cleans up _most_ of the issues that pre-commit hooks found.
* Adds in a .pre-commit-config.yaml file that can be used in conjuction
  with pre-commit (see pre-commit.com) and the pre-commit GitHub Action
  integration (see pre-commit.ci)
* Many of the pre-commit hooks were disabled as they were going to require
  significant changes to the codebase.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>
* Feat: Add new schema for advanced features

Add the schema and migration for being able to disable the advanced
features of date range and day of week. As the features have
historically been enabled by default, this migration will set the
default values to True for existing installations.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

* Feat: Teach config flow about advanced options

Teaches the config flow about the advanced options for date range and
day of week.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

* Feat: Teach how to skip Advanced options

Teach Keymaster how to skip configuration of the entities for the
Advanced Date Range and Advanced Day of Week options.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

* Feat: Teach dashboard generator advanced toggles

Teach the dashboard generator about the advanced toggles for date range
and day of week. When a customer configures keymaster with these options
the related entities will be appropriately added to generated dashboard
output.

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>

---------

Signed-off-by: Andrew Grimberg <tykeal@bardicgrove.org>
raman325 and others added 20 commits January 4, 2026 19:27
…eration (#536)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…gy (#543)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fixes #547
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…rs (#553)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
…ort (#538)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Fixes error reported by tykeal in PR #538.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
#559)

* address copilot comments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* address copilot comments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: clarify masked response comment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Update custom_components/keymaster/providers/zwave_js.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
YAML-mode Lovelace resources don't have an 'id' field, only 'url' and
'type'. When users manually added the keymaster resource (as instructed
by the warning message), the generator expression crashed on
data['id'] before the StopIteration handler could run.

Restructured async_register_strategy_resource to check resource
existence by URL first (works for both YAML and storage modes),
then branch on the result.

Fixes #560

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings February 25, 2026 01:10
@raman325 raman325 marked this pull request as draft February 25, 2026 01:10
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR merges the beta branch into main, consolidating significant development work that has occurred on beta since mid-2025. The changes represent a major architectural overhaul of the keymaster integration, including a complete rewrite of the lock provider system, migration to native Home Assistant entities, implementation of Lovelace dashboard strategies, and comprehensive test coverage improvements.

Changes:

  • Introduced provider abstraction layer for lock platforms with Z-Wave JS implementation
  • Migrated from YAML-based input helpers to native HA entity platforms (Text, Number, Switch, DateTime, Time, Button, Sensor, Binary Sensor)
  • Implemented Lovelace dashboard/view/section strategies with TypeScript frontend
  • Refactored coordinator for event-driven architecture with real-time lock event handling
  • Enhanced testing infrastructure with new test files and updated CI/CD workflows

Reviewed changes

Copilot reviewed 94 out of 129 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tests/test_coordinator_events.py New tests for coordinator event handling with lock/unlock events and access limit decrementing
tests/test_button.py New tests for button entity creation and press actions
tests/test_binary_sensor.py Updated Z-Wave JS network sensor tests with improved connection handling
tests/providers/init.py New provider tests package initialization
tests/json/zwave_js/lock_schlage_be469_state.json Updated lock state JSON with corrected field names and expanded command class data
tests/json/zwave_js/controller_state.json Updated controller state with reformatted arrays and new status fields
tests/json/zwave_js/controller_node_state.json New controller node state fixture for testing
tests/const.py Refactored test constants to use integration constants and updated config data structure
tests/common.py Modernized imports and updated time manipulation for test utilities
tests/init.py Updated docstring formatting
setup.cfg Removed deprecated configuration file
scripts/compare_lovelace_output.py New utility script for comparing Lovelace output between branches
rollup.config.js New Rollup configuration for TypeScript compilation
requirements_test.txt Reorganized test dependencies with clear categorization
requirements_lint.txt New lint-specific dependencies file
requirements_dev.txt Simplified to reference test and lint requirements
pylintrc Removed deprecated pylint configuration
package.json New package.json for TypeScript/JavaScript tooling
lovelace_strategy/view-strategy.ts New TypeScript view strategy implementation
lovelace_strategy/view-strategy.test.ts Comprehensive tests for view strategy
lovelace_strategy/types.ts TypeScript type definitions for strategies
lovelace_strategy/strategy-utils.ts Utility functions for strategy error handling
lovelace_strategy/slugify.ts URL slug generation utility
lovelace_strategy/section-strategy.ts New section strategy for code slot cards
lovelace_strategy/main.ts Strategy registration entry point
lovelace_strategy/ha_type_stubs.ts Home Assistant type definitions
lovelace_strategy/dashboard-strategy.ts Dashboard-level strategy implementation
lovelace_strategy/dashboard-strategy.test.ts Tests for dashboard strategy
lovelace_strategy/const.ts Strategy constants
info.md Formatted documentation with line breaks
hacs.json Updated minimum HA version and added persistent directory
custom_components/keymaster/websocket.py New WebSocket API for dashboard strategies
custom_components/keymaster/translations/nb.json Updated Norwegian translations for new config flow
custom_components/keymaster/translations/en.json Updated English translations for simplified config
custom_components/keymaster/time.py New Time entity platform
custom_components/keymaster/text.py New Text entity platform for names and PINs
custom_components/keymaster/system_health.py Removed deprecated system health module
custom_components/keymaster/switch.py New Switch entity platform
custom_components/keymaster/strings.json Updated config flow strings
custom_components/keymaster/services.yaml Updated service definitions
custom_components/keymaster/services.py Refactored services to use coordinator
custom_components/keymaster/sensor.py Migrated to native entity platform
custom_components/keymaster/resources.py New Lovelace resource registration helpers
custom_components/keymaster/providers/const.py Provider system constants
custom_components/keymaster/providers/_base.py Base lock provider abstraction
custom_components/keymaster/providers/init.py Provider factory and registration
custom_components/keymaster/providers/PROVIDERS.md Provider development documentation
custom_components/keymaster/number.py New Number entity platform
custom_components/keymaster/manifest.json Added http dependency
custom_components/keymaster/lovelace_child.head Removed deprecated template
custom_components/keymaster/lovelace_child.code Removed deprecated template
custom_components/keymaster/lovelace.head Removed deprecated template
custom_components/keymaster/lovelace.code Removed deprecated template
custom_components/keymaster/lock.py Expanded lock dataclass with code slots and provider
custom_components/keymaster/keymaster_common.yaml Removed deprecated YAML package
custom_components/keymaster/keymaster.yaml Removed deprecated YAML package
custom_components/keymaster/exceptions.py Updated exception classes for provider system
custom_components/keymaster/entity.py New base entity class for all platforms
custom_components/keymaster/datetime.py New DateTime entity platform
custom_components/keymaster/const.py Expanded constants for new architecture
custom_components/keymaster/button.py New Button entity platform
custom_components/keymaster/binary_sensor.py Migrated to entity platform with connection status
codecov.yml New Codecov configuration for Python and TypeScript
autolock/autolock_definitions.yml Formatting improvements
autolock/Autolock.md Documentation formatting
assets/additional_yaml/ozw.yaml Added yamllint disable comments
README.md Enhanced documentation with Lovelace strategy information
Dockerfile.test New Docker test environment
.pre-commit-config.yaml New pre-commit hooks configuration
.github/workflows/yarn.yaml New workflow for TypeScript linting and building
.github/workflows/vitest.yaml New workflow for TypeScript tests
.github/workflows/release.yaml Updated release workflow
.github/workflows/pytest.yaml Enhanced Python CI with lint and type checking
.github/workflows/combined.yaml Removed trailing whitespace
.github/release-drafter.yml Fixed typo in "Enhancements"
.github/PULL_REQUEST_TEMPLATE.md Formatting improvements
.github/ISSUE_TEMPLATE/feature_request.md Line length formatting
.gitattributes Mark generated JavaScript as linguist-generated
.eslintrc.cjs New ESLint configuration
.coveragerc Removed deprecated coverage configuration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown
Collaborator

@tykeal tykeal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm just going to personally say yes to this. I think it's time especially since I think releasing off of a branch named beta isn't a really good practice!

Copy link
Copy Markdown
Collaborator

@firstof9 firstof9 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was good while testing was underway before dropping non-prerelease versions tho

@raman325 raman325 marked this pull request as ready for review February 26, 2026 06:18
@raman325 raman325 merged commit 59dcdf1 into main Feb 26, 2026
10 checks passed
@raman325 raman325 deleted the beta branch February 26, 2026 06:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants