mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
Fix duplicate power sensors for Matter 1.3 powerplugs (#126269)
* Prevent duplicate power sensors in Matter sensor platform * adjust test as well
This commit is contained in:
parent
3ad6589f25
commit
ef94fcf873
@ -100,13 +100,20 @@ def async_discover_entities(
|
||||
):
|
||||
continue
|
||||
|
||||
# check for values that may not be present
|
||||
# check for endpoint-attributes that may not be present
|
||||
if schema.absent_attributes is not None and any(
|
||||
endpoint.has_attribute(None, val_schema)
|
||||
for val_schema in schema.absent_attributes
|
||||
):
|
||||
continue
|
||||
|
||||
# check for clusters that may not be present
|
||||
if schema.absent_clusters is not None and any(
|
||||
endpoint.node.has_cluster(val_schema)
|
||||
for val_schema in schema.absent_clusters
|
||||
):
|
||||
continue
|
||||
|
||||
# all checks passed, this value belongs to an entity
|
||||
|
||||
attributes_to_watch = list(schema.required_attributes)
|
||||
|
@ -6,7 +6,7 @@ from dataclasses import dataclass
|
||||
from typing import TypedDict
|
||||
|
||||
from chip.clusters import Objects as clusters
|
||||
from chip.clusters.Objects import ClusterAttributeDescriptor
|
||||
from chip.clusters.Objects import Cluster, ClusterAttributeDescriptor
|
||||
from matter_server.client.models.device_types import DeviceType
|
||||
from matter_server.client.models.node import MatterEndpoint
|
||||
|
||||
@ -95,11 +95,15 @@ class MatterDiscoverySchema:
|
||||
# [optional] the attribute's endpoint_id must match ANY of these values
|
||||
endpoint_id: tuple[int, ...] | None = None
|
||||
|
||||
# [optional] additional attributes that MAY NOT be present
|
||||
# on the node for this scheme to pass
|
||||
# [optional] attributes that MAY NOT be present
|
||||
# (on the same endpoint) for this scheme to pass
|
||||
absent_attributes: tuple[type[ClusterAttributeDescriptor], ...] | None = None
|
||||
|
||||
# [optional] additional attributes that may be present
|
||||
# [optional] cluster(s) that MAY NOT be present
|
||||
# (on ANY endpoint) for this scheme to pass
|
||||
absent_clusters: tuple[type[Cluster], ...] | None = None
|
||||
|
||||
# [optional] additional attributes that may be present (on the same endpoint)
|
||||
# these attributes are copied over to attributes_to_watch and
|
||||
# are not discovered by other entities
|
||||
optional_attributes: tuple[type[ClusterAttributeDescriptor], ...] | None = None
|
||||
|
@ -188,7 +188,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(EveCluster.Attributes.Watt,),
|
||||
absent_attributes=(clusters.ElectricalPowerMeasurement.Attributes.ActivePower,),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -202,7 +202,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(EveCluster.Attributes.Voltage,),
|
||||
absent_attributes=(clusters.ElectricalPowerMeasurement.Attributes.Voltage,),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -216,9 +216,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(EveCluster.Attributes.WattAccumulated,),
|
||||
absent_attributes=(
|
||||
clusters.ElectricalEnergyMeasurement.Attributes.CumulativeEnergyImported,
|
||||
),
|
||||
absent_clusters=(clusters.ElectricalEnergyMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -232,9 +230,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(EveCluster.Attributes.Current,),
|
||||
absent_attributes=(
|
||||
clusters.ElectricalPowerMeasurement.Attributes.ActiveCurrent,
|
||||
),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -398,7 +394,7 @@ DISCOVERY_SCHEMAS = [
|
||||
required_attributes=(
|
||||
ThirdRealityMeteringCluster.Attributes.InstantaneousDemand,
|
||||
),
|
||||
absent_attributes=(clusters.ElectricalPowerMeasurement.Attributes.ActivePower,),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -415,9 +411,7 @@ DISCOVERY_SCHEMAS = [
|
||||
required_attributes=(
|
||||
ThirdRealityMeteringCluster.Attributes.CurrentSummationDelivered,
|
||||
),
|
||||
absent_attributes=(
|
||||
clusters.ElectricalEnergyMeasurement.Attributes.CumulativeEnergyImported,
|
||||
),
|
||||
absent_clusters=(clusters.ElectricalEnergyMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -432,7 +426,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(NeoCluster.Attributes.Watt,),
|
||||
absent_attributes=(clusters.ElectricalPowerMeasurement.Attributes.ActivePower,),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -446,9 +440,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(NeoCluster.Attributes.WattAccumulated,),
|
||||
absent_attributes=(
|
||||
clusters.ElectricalEnergyMeasurement.Attributes.CumulativeEnergyImported,
|
||||
),
|
||||
absent_clusters=(clusters.ElectricalEnergyMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -463,7 +455,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(NeoCluster.Attributes.Voltage,),
|
||||
absent_attributes=(clusters.ElectricalPowerMeasurement.Attributes.Voltage,),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
@ -477,9 +469,7 @@ DISCOVERY_SCHEMAS = [
|
||||
),
|
||||
entity_class=MatterSensor,
|
||||
required_attributes=(NeoCluster.Attributes.Current,),
|
||||
absent_attributes=(
|
||||
clusters.ElectricalPowerMeasurement.Attributes.ActiveCurrent,
|
||||
),
|
||||
absent_clusters=(clusters.ElectricalPowerMeasurement,),
|
||||
),
|
||||
MatterDiscoverySchema(
|
||||
platform=Platform.SENSOR,
|
||||
|
@ -305,9 +305,23 @@
|
||||
319422468, 319422469, 319422471, 319422472, 319422473, 319422474,
|
||||
319422475, 319422476, 319422478, 319422481, 319422482, 65533
|
||||
],
|
||||
"1/144/0": 2,
|
||||
"1/144/1": 3,
|
||||
"1/144/2": [
|
||||
"2/29/0": [
|
||||
{
|
||||
"0": 1296,
|
||||
"1": 1
|
||||
}
|
||||
],
|
||||
"2/29/1": [3, 29, 144, 145, 156],
|
||||
"2/29/2": [],
|
||||
"2/29/3": [],
|
||||
"2/29/65532": 0,
|
||||
"2/29/65533": 2,
|
||||
"2/29/65528": [],
|
||||
"2/29/65529": [],
|
||||
"2/29/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
|
||||
"2/144/0": 2,
|
||||
"2/144/1": 3,
|
||||
"2/144/2": [
|
||||
{
|
||||
"0": 1,
|
||||
"1": true,
|
||||
@ -345,16 +359,16 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"1/144/4": 220000,
|
||||
"1/144/5": 2000,
|
||||
"1/144/8": 550000,
|
||||
"1/144/65533": 1,
|
||||
"1/144/65532": 2,
|
||||
"1/144/65531": [0, 1, 2, 4, 5, 8, 65528, 65529, 65530, 65531, 65532, 65533],
|
||||
"1/144/65530": [],
|
||||
"1/144/65529": [],
|
||||
"1/144/65528": [],
|
||||
"1/145/0": {
|
||||
"2/144/4": 220000,
|
||||
"2/144/5": 2000,
|
||||
"2/144/8": 550000,
|
||||
"2/144/65533": 1,
|
||||
"2/144/65532": 2,
|
||||
"2/144/65531": [0, 1, 2, 4, 5, 8, 65528, 65529, 65530, 65531, 65532, 65533],
|
||||
"2/144/65530": [],
|
||||
"2/144/65529": [],
|
||||
"2/144/65528": [],
|
||||
"2/145/0": {
|
||||
"0": 14,
|
||||
"1": true,
|
||||
"2": 0,
|
||||
@ -366,16 +380,16 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"1/145/65533": 1,
|
||||
"1/145/65532": 7,
|
||||
"1/145/65531": [0, 1, 2, 65528, 65529, 65530, 65531, 65532, 65533],
|
||||
"1/145/65530": [0],
|
||||
"1/145/65529": [],
|
||||
"1/145/65528": [],
|
||||
"1/145/1": {
|
||||
"2/145/65533": 1,
|
||||
"2/145/65532": 7,
|
||||
"2/145/65531": [0, 1, 2, 65528, 65529, 65530, 65531, 65532, 65533],
|
||||
"2/145/65530": [0],
|
||||
"2/145/65529": [],
|
||||
"2/145/65528": [],
|
||||
"2/145/1": {
|
||||
"0": 2500
|
||||
},
|
||||
"1/145/2": null
|
||||
"2/145/2": null
|
||||
},
|
||||
"attribute_subscriptions": [],
|
||||
"last_subscription_attempt": 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user