Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
ee979d0
Move all discovery functions to module level
puddly Jan 5, 2026
3c4a198
WIP
puddly Jan 5, 2026
ce7eaa3
WIP
puddly Jan 5, 2026
3a89a2a
WIP
puddly Jan 6, 2026
c531a87
WIP: unique ID compatibility
puddly Jan 6, 2026
afe7824
WIP: Delete registries
puddly Jan 6, 2026
2697397
WIP: more `unique_id` fixes
puddly Jan 6, 2026
7b3bde1
WIP: cleanup
puddly Jan 6, 2026
7b20a97
WIP: Fix OnOff output cluster exceptions
puddly Jan 6, 2026
52c7734
WIP: Minimize entity diff
puddly Jan 6, 2026
4f23c9c
WIP: more OnOff unique ID fixes
puddly Jan 6, 2026
81b1a51
WIP: More light fixes
puddly Jan 6, 2026
58b9545
WIP: More fan fixes
puddly Jan 6, 2026
b740670
Fix device tracker tests
puddly Jan 14, 2026
3cfa730
Remove unnecessary registry tests
puddly Jan 14, 2026
8b70a71
Remove broken `ThermostatHVACAction` entity
puddly Jan 14, 2026
58bb951
Revert "Remove broken `ThermostatHVACAction` entity"
puddly Jan 14, 2026
4ebfe76
Ignore Keen vent when generating switch entities
puddly Jan 14, 2026
76b0780
Fix Keen vent unique ID
puddly Jan 14, 2026
80f134d
Explicit `value_attribute``
puddly Jan 14, 2026
426658b
Revert "Explicit `value_attribute``"
puddly Jan 14, 2026
4fbdae2
Fixes
puddly Jan 14, 2026
aae7073
Regenerate diagnostics
puddly Jan 16, 2026
eac071f
Avoid private imports from zigpy
puddly Jan 16, 2026
eed902c
Drop weights
puddly Jan 21, 2026
224defd
Re-add model/manufacturer checks
puddly Jan 21, 2026
141951c
Drop unnecessary `if` model/manufacturer checks
puddly Jan 21, 2026
bacc170
Fixes
puddly Jan 21, 2026
4185fba
Fixes
puddly Jan 21, 2026
056ad85
FIXME: Use a separate cluster handler for IAS ACE client clusters
puddly Jan 21, 2026
aaff32d
Exclude Sinope from ThermostatHVACAction
puddly Jan 21, 2026
8f446c2
Regenerate diagnostics
puddly Jan 21, 2026
e192c1b
Merge branch 'dev' into puddly/discovery-cleanup
puddly Jan 21, 2026
2d82c83
Drop unnecessary server cluster handler
puddly Jan 21, 2026
7cac678
WIP: fix existing tests
puddly Jan 21, 2026
cbefc44
Re-implement device overrides
puddly Jan 21, 2026
f0c6eea
Fix failing alarm control panel test
puddly Jan 21, 2026
3aad5ce
Remove unnecessary `endpoint_discover_entities`
puddly Jan 21, 2026
6b5c9d9
Fix IAS ACE cluster handler type
puddly Jan 21, 2026
292ecb9
Exclude old coordinators from entity creation
puddly Jan 21, 2026
cfe0986
Regenerate diagnostics to account for changed IAS ACE cluster handler…
puddly Jan 21, 2026
efd1ffa
Merge matching logic into `discover_entities_for_endpoint`
puddly Jan 21, 2026
45edbbb
Implement group discovery and get all tests passing
puddly Jan 21, 2026
38b3e04
Key ENTITY_REGISTRY lookups by `cluster_id` for performance
puddly Jan 21, 2026
478a593
Apply pre-commit auto fixes
pre-commit-ci[bot] Jan 21, 2026
5f96ebb
Pre-commit...
puddly Jan 21, 2026
74f92a6
Simplify group discovery
puddly Jan 21, 2026
f475cc2
Make `match_cluster_handlers` abstract
puddly Jan 21, 2026
6930de6
Revert "Make `match_cluster_handlers` abstract"
puddly Jan 22, 2026
5c6383c
Add another TODO
puddly Jan 22, 2026
3406ec7
Implement simpler entity filters via feature weight system
puddly Jan 22, 2026
b27e6dc
Account for `platform_override`
puddly Jan 22, 2026
efac057
Aggregate matches across all clusters
puddly Jan 22, 2026
57838b3
Migrate climate/fan to new system
puddly Jan 22, 2026
981a4fe
Remove dynamic logic from device tracker platform
puddly Jan 22, 2026
b60f0a7
Drop `platform_override` from match_cluster_handlers args
puddly Jan 22, 2026
1d45081
Remove `Endpoint.unclaimed_cluster_handlers`, it is unused
puddly Jan 22, 2026
1622466
Compute `legacy_discovery_unique_id` within the entity class itself
puddly Jan 22, 2026
ae26b14
Migrate from dynamic `match_cluster_handlers` to static `_cluster_han…
puddly Jan 22, 2026
eb8f38c
Re-introduce removed test fixture
puddly Jan 26, 2026
100a25d
Remove unnecessary claimed check
puddly Jan 26, 2026
9938dc6
Merge branch 'dev' into puddly/discovery-cleanup
puddly Jan 27, 2026
5e6b6c2
Re-add mocks to disable normal ZHA entity discovery
puddly Jan 27, 2026
b15f1e8
Revert "Remove unnecessary claimed check"
puddly Jan 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions tests/data/devices/awox-esmlfzm-w6-dimm.json
Original file line number Diff line number Diff line change
Expand Up @@ -307,18 +307,18 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:4f:a8:bc:46:1:0x0006",
"status": "CREATED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:4f:a8:bc:46:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:4f:a8:bc:46",
Expand Down
55 changes: 5 additions & 50 deletions tests/data/devices/centralite-3405-l.json
Original file line number Diff line number Diff line change
Expand Up @@ -181,51 +181,6 @@
},
"zha_lib_entities": {
"alarm_control_panel": [
{
"info_object": {
"fallback_name": null,
"unique_id": "00:0d:6f:00:05:65:83:f2-1",
"migrate_unique_ids": [],
"platform": "alarm_control_panel",
"class_name": "AlarmControlPanel",
"translation_key": "alarm_control_panel",
"translation_placeholders": null,
"device_class": null,
"state_class": null,
"entity_category": null,
"entity_registry_enabled_default": true,
"enabled": true,
"primary": false,
"cluster_handlers": [
{
"class_name": "IasAceClusterHandler",
"generic_id": "cluster_handler_0x0501",
"endpoint_id": 1,
"cluster": {
"id": 1281,
"name": "IAS Ancillary Control Equipment",
"type": "server"
},
"id": "1:0x0501",
"unique_id": "00:0d:6f:00:05:65:83:f2:1:0x0501",
"status": "CREATED",
"value_attribute": null
}
],
"device_ieee": "00:0d:6f:00:05:65:83:f2",
"endpoint_id": 1,
"available": true,
"group_id": null,
"code_arm_required": false,
"code_format": "number",
"supported_features": 15
},
"state": {
"class_name": "AlarmControlPanel",
"available": true,
"state": "disarmed"
}
},
{
"info_object": {
"fallback_name": null,
Expand All @@ -243,17 +198,17 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "IasAceClusterHandler",
"generic_id": "cluster_handler_0x0501",
"class_name": "IasAceClientClusterHandler",
"generic_id": "cluster_handler_0x0501_client",
"endpoint_id": 1,
"cluster": {
"id": 1281,
"name": "IAS Ancillary Control Equipment",
"type": "client"
},
"id": "1:0x0501",
"unique_id": "00:0d:6f:00:05:65:83:f2:1:0x0501",
"status": "CONFIGURED",
"id": "1:0x0501_client",
"unique_id": "00:0d:6f:00:05:65:83:f2:1:0x0501_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
Expand Down
10 changes: 5 additions & 5 deletions tests/data/devices/frient-a-s-kepzb-110.json
Original file line number Diff line number Diff line change
Expand Up @@ -219,17 +219,17 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "IasAceClusterHandler",
"generic_id": "cluster_handler_0x0501",
"class_name": "IasAceClientClusterHandler",
"generic_id": "cluster_handler_0x0501_client",
"endpoint_id": 44,
"cluster": {
"id": 1281,
"name": "IAS Ancillary Control Equipment",
"type": "client"
},
"id": "44:0x0501",
"unique_id": "00:15:bc:00:43:00:4a:39:44:0x0501",
"status": "CONFIGURED",
"id": "44:0x0501_client",
"unique_id": "00:15:bc:00:43:00:4a:39:44:0x0501_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
Expand Down
2 changes: 1 addition & 1 deletion tests/data/devices/homr-hrmsn01.json
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@
"entity_category": null,
"entity_registry_enabled_default": true,
"enabled": true,
"primary": false,
"primary": true,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
Expand Down
12 changes: 6 additions & 6 deletions tests/data/devices/horn-zone-haier-hs-22zw-0000011216.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,18 +106,18 @@
"primary": true,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:e2:16:2d:16:1:0x0006",
"status": "CONFIGURED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:e2:16:2d:16:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:e2:16:2d:16",
Expand Down
16 changes: 8 additions & 8 deletions tests/data/devices/ikea-of-sweden-tradfri-motion-sensor.json
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@
"unique_id": "ab:cd:ef:12:99:94:76:3f-1-6",
"migrate_unique_ids": [],
"platform": "binary_sensor",
"class_name": "Motion",
"class_name": "IkeaMotion",
"translation_key": null,
"translation_placeholders": null,
"device_class": "motion",
Expand All @@ -212,18 +212,18 @@
"primary": true,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:99:94:76:3f:1:0x0006",
"status": "CONFIGURED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:99:94:76:3f:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:99:94:76:3f",
Expand All @@ -233,7 +233,7 @@
"attribute_name": "on_off"
},
"state": {
"class_name": "Motion",
"class_name": "IkeaMotion",
"available": true,
"state": false
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,18 +321,18 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "8c:6f:b9:ff:fe:26:3b:4a:1:0x0006",
"status": "CONFIGURED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "8c:6f:b9:ff:fe:26:3b:4a:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "8c:6f:b9:ff:fe:26:3b:4a",
Expand Down
10 changes: 5 additions & 5 deletions tests/data/devices/imagic-by-greatstar-1112-s.json
Original file line number Diff line number Diff line change
Expand Up @@ -219,17 +219,17 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "IasAceClusterHandler",
"generic_id": "cluster_handler_0x0501",
"class_name": "IasAceClientClusterHandler",
"generic_id": "cluster_handler_0x0501_client",
"endpoint_id": 1,
"cluster": {
"id": 1281,
"name": "IAS Ancillary Control Equipment",
"type": "client"
},
"id": "1:0x0501",
"unique_id": "ab:cd:ef:12:06:61:9f:d3:1:0x0501",
"status": "CONFIGURED",
"id": "1:0x0501_client",
"unique_id": "ab:cd:ef:12:06:61:9f:d3:1:0x0501_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
Expand Down
12 changes: 6 additions & 6 deletions tests/data/devices/legrand-contactor.json
Original file line number Diff line number Diff line change
Expand Up @@ -529,18 +529,18 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:0d:ab:89:6b:1:0x0006",
"status": "CREATED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:0d:ab:89:6b:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:0d:ab:89:6b",
Expand Down
12 changes: 6 additions & 6 deletions tests/data/devices/legrand-dimmer-switch-w-o-neutral.json
Original file line number Diff line number Diff line change
Expand Up @@ -381,18 +381,18 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:b1:5a:79:5a:1:0x0006",
"status": "CREATED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:b1:5a:79:5a:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:b1:5a:79:5a",
Expand Down
12 changes: 6 additions & 6 deletions tests/data/devices/legrand-mobile-outlet.json
Original file line number Diff line number Diff line change
Expand Up @@ -622,18 +622,18 @@
"primary": false,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:00:e8:bc:6f:1:0x0006",
"status": "CREATED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:00:e8:bc:6f:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:00:e8:bc:6f",
Expand Down
14 changes: 0 additions & 14 deletions tests/data/devices/lumi-lumi-ctrl-neutral2.json
Original file line number Diff line number Diff line change
Expand Up @@ -615,20 +615,6 @@
"enabled": true,
"primary": false,
"cluster_handlers": [
{
"class_name": "OtaClusterHandler",
"generic_id": "cluster_handler_0x0019",
"endpoint_id": 1,
"cluster": {
"id": 25,
"name": "Ota",
"type": "server"
},
"id": "1:0x0019",
"unique_id": "ab:cd:ef:12:35:1a:bf:9e:1:0x0019",
"status": "INITIALIZED",
"value_attribute": null
},
{
"class_name": "OtaClientClusterHandler",
"generic_id": "cluster_handler_0x0019_client",
Expand Down
12 changes: 6 additions & 6 deletions tests/data/devices/lumi-lumi-magnet-ac01.json
Original file line number Diff line number Diff line change
Expand Up @@ -169,18 +169,18 @@
"primary": true,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "54:ef:44:10:00:1e:85:7f:1:0x0006",
"status": "CONFIGURED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "54:ef:44:10:00:1e:85:7f:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "54:ef:44:10:00:1e:85:7f",
Expand Down
12 changes: 6 additions & 6 deletions tests/data/devices/lumi-lumi-magnet-agl02.json
Original file line number Diff line number Diff line change
Expand Up @@ -150,18 +150,18 @@
"primary": true,
"cluster_handlers": [
{
"class_name": "OnOffClusterHandler",
"generic_id": "cluster_handler_0x0006",
"class_name": "OnOffClientClusterHandler",
"generic_id": "cluster_handler_0x0006_client",
"endpoint_id": 1,
"cluster": {
"id": 6,
"name": "On/Off",
"type": "client"
},
"id": "1:0x0006",
"unique_id": "ab:cd:ef:12:52:70:f0:26:1:0x0006",
"status": "CONFIGURED",
"value_attribute": "on_off"
"id": "1:0x0006_client",
"unique_id": "ab:cd:ef:12:52:70:f0:26:1:0x0006_CLIENT",
"status": "INITIALIZED",
"value_attribute": null
}
],
"device_ieee": "ab:cd:ef:12:52:70:f0:26",
Expand Down
Loading
Loading