Add TemperatureLevel feature from Matter TemperatureControl cluster (#134532)

This commit is contained in:
Ludovic BOUÉ 2025-01-25 12:22:45 +01:00 committed by GitHub
parent 8b24bac1d1
commit 71d63bac8d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 1652 additions and 6 deletions

View File

@ -36,6 +36,11 @@
}
}
},
"select": {
"temperature_level": {
"default": "mdi:thermometer"
}
},
"sensor": {
"contamination_state": {
"default": "mdi:air-filter"

View File

@ -2,10 +2,12 @@
from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, cast
from chip.clusters import Objects as clusters
from chip.clusters.ClusterObjects import ClusterAttributeDescriptor, ClusterCommand
from chip.clusters.Types import Nullable
from matter_server.common.helpers.util import create_attribute_path_from_attribute
@ -47,7 +49,18 @@ class MatterSelectEntityDescription(SelectEntityDescription, MatterEntityDescrip
"""Describe Matter select entities."""
class MatterSelectEntity(MatterEntity, SelectEntity):
@dataclass(frozen=True, kw_only=True)
class MatterListSelectEntityDescription(MatterSelectEntityDescription):
"""Describe Matter select entities for MatterListSelectEntity."""
# command: a callback to create the command to send to the device
# the callback's argument will be the index of the selected list value
command: Callable[[int], ClusterCommand]
# list attribute: the attribute descriptor to get the list of values (= list of strings)
list_attribute: type[ClusterAttributeDescriptor]
class MatterAttributeSelectEntity(MatterEntity, SelectEntity):
"""Representation of a select entity from Matter Attribute read/write."""
entity_description: MatterSelectEntityDescription
@ -76,7 +89,7 @@ class MatterSelectEntity(MatterEntity, SelectEntity):
self._attr_current_option = value_convert(value)
class MatterModeSelectEntity(MatterSelectEntity):
class MatterModeSelectEntity(MatterAttributeSelectEntity):
"""Representation of a select entity from Matter (Mode) Cluster attribute(s)."""
async def async_select_option(self, option: str) -> None:
@ -111,6 +124,37 @@ class MatterModeSelectEntity(MatterSelectEntity):
self._attr_name = desc
class MatterListSelectEntity(MatterEntity, SelectEntity):
"""Representation of a select entity from Matter list and selected item Cluster attribute(s)."""
entity_description: MatterListSelectEntityDescription
async def async_select_option(self, option: str) -> None:
"""Change the selected option."""
option_id = self._attr_options.index(option)
await self.matter_client.send_device_command(
node_id=self._endpoint.node.node_id,
endpoint_id=self._endpoint.endpoint_id,
command=self.entity_description.command(option_id),
)
@callback
def _update_from_device(self) -> None:
"""Update from device."""
list_values = cast(
list[str],
self.get_matter_attribute_value(self.entity_description.list_attribute),
)
self._attr_options = list_values
current_option_idx: int = self.get_matter_attribute_value(
self._entity_info.primary_attribute
)
try:
self._attr_current_option = list_values[current_option_idx]
except IndexError:
self._attr_current_option = None
# Discovery schema(s) to map Matter Attributes to HA entities
DISCOVERY_SCHEMAS = [
MatterDiscoverySchema(
@ -230,7 +274,7 @@ DISCOVERY_SCHEMAS = [
"previous": None,
}.get,
),
entity_class=MatterSelectEntity,
entity_class=MatterAttributeSelectEntity,
required_attributes=(clusters.OnOff.Attributes.StartUpOnOff,),
),
MatterDiscoverySchema(
@ -251,7 +295,7 @@ DISCOVERY_SCHEMAS = [
"low": 2,
}.get,
),
entity_class=MatterSelectEntity,
entity_class=MatterAttributeSelectEntity,
required_attributes=(clusters.SmokeCoAlarm.Attributes.SmokeSensitivityLevel,),
),
MatterDiscoverySchema(
@ -270,9 +314,25 @@ DISCOVERY_SCHEMAS = [
"Fahrenheit": 1,
}.get,
),
entity_class=MatterSelectEntity,
entity_class=MatterAttributeSelectEntity,
required_attributes=(
clusters.ThermostatUserInterfaceConfiguration.Attributes.TemperatureDisplayMode,
),
),
MatterDiscoverySchema(
platform=Platform.SELECT,
entity_description=MatterListSelectEntityDescription(
key="TemperatureControlSelectedTemperatureLevel",
translation_key="temperature_level",
command=lambda selected_index: clusters.TemperatureControl.Commands.SetTemperature(
targetTemperatureLevel=selected_index
),
list_attribute=clusters.TemperatureControl.Attributes.SupportedTemperatureLevels,
),
entity_class=MatterListSelectEntity,
required_attributes=(
clusters.TemperatureControl.Attributes.SelectedTemperatureLevel,
clusters.TemperatureControl.Attributes.SupportedTemperatureLevels,
),
),
]

View File

@ -200,6 +200,9 @@
"previous": "Previous"
}
},
"temperature_level": {
"name": "Temperature level"
},
"temperature_display_mode": {
"name": "Temperature display mode"
}

View File

@ -104,6 +104,7 @@ async def integration_fixture(
"pressure_sensor",
"room_airconditioner",
"silabs_dishwasher",
"silabs_laundrywasher",
"smoke_detector",
"switch_unit",
"temperature_sensor",

View File

@ -0,0 +1,909 @@
{
"node_id": 29,
"date_commissioned": "2024-10-19T19:49:36.900186",
"last_interview": "2024-10-20T09:26:38.517535",
"interview_version": 6,
"available": true,
"is_bridge": false,
"attributes": {
"0/29/0": [
{
"0": 22,
"1": 1
}
],
"0/29/1": [
29, 31, 40, 42, 43, 44, 45, 48, 49, 50, 51, 52, 53, 60, 62, 63, 64, 65
],
"0/29/2": [41],
"0/29/3": [1, 2],
"0/29/65532": 0,
"0/29/65533": 2,
"0/29/65528": [],
"0/29/65529": [],
"0/29/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
"0/31/0": [
{
"1": 5,
"2": 2,
"3": [112233],
"4": null,
"254": 4
}
],
"0/31/1": [],
"0/31/2": 4,
"0/31/3": 3,
"0/31/4": 4,
"0/31/65532": 0,
"0/31/65533": 1,
"0/31/65528": [],
"0/31/65529": [],
"0/31/65531": [0, 1, 2, 3, 4, 65528, 65529, 65531, 65532, 65533],
"0/40/0": 17,
"0/40/1": "Silabs",
"0/40/2": 65521,
"0/40/3": "LaundryWasher",
"0/40/4": 32773,
"0/40/5": "",
"0/40/6": "**REDACTED**",
"0/40/7": 1,
"0/40/8": "TEST_VERSION",
"0/40/9": 1,
"0/40/10": "1",
"0/40/11": "20200101",
"0/40/12": "",
"0/40/13": "",
"0/40/14": "",
"0/40/15": "",
"0/40/16": false,
"0/40/18": "DC840FF79F5DBFCE",
"0/40/19": {
"0": 3,
"1": 3
},
"0/40/21": 16973824,
"0/40/22": 1,
"0/40/65532": 0,
"0/40/65533": 3,
"0/40/65528": [],
"0/40/65529": [],
"0/40/65531": [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22,
65528, 65529, 65531, 65532, 65533
],
"0/42/0": [],
"0/42/1": true,
"0/42/2": 1,
"0/42/3": null,
"0/42/65532": 0,
"0/42/65533": 1,
"0/42/65528": [],
"0/42/65529": [0],
"0/42/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
"0/43/0": "en-US",
"0/43/1": [
"en-US",
"de-DE",
"fr-FR",
"en-GB",
"es-ES",
"zh-CN",
"it-IT",
"ja-JP"
],
"0/43/65532": 0,
"0/43/65533": 1,
"0/43/65528": [],
"0/43/65529": [],
"0/43/65531": [0, 1, 65528, 65529, 65531, 65532, 65533],
"0/44/0": 0,
"0/44/1": 0,
"0/44/2": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 7],
"0/44/65532": 0,
"0/44/65533": 1,
"0/44/65528": [],
"0/44/65529": [],
"0/44/65531": [0, 1, 2, 65528, 65529, 65531, 65532, 65533],
"0/45/0": 1,
"0/45/65532": 0,
"0/45/65533": 1,
"0/45/65528": [],
"0/45/65529": [],
"0/45/65531": [0, 65528, 65529, 65531, 65532, 65533],
"0/48/0": 0,
"0/48/1": {
"0": 60,
"1": 900
},
"0/48/2": 0,
"0/48/3": 0,
"0/48/4": true,
"0/48/65532": 0,
"0/48/65533": 1,
"0/48/65528": [1, 3, 5],
"0/48/65529": [0, 2, 4],
"0/48/65531": [0, 1, 2, 3, 4, 65528, 65529, 65531, 65532, 65533],
"0/49/0": 1,
"0/49/1": [
{
"0": "p0jbsOzJRNw=",
"1": true
}
],
"0/49/2": 10,
"0/49/3": 20,
"0/49/4": true,
"0/49/5": 0,
"0/49/6": "p0jbsOzJRNw=",
"0/49/7": null,
"0/49/9": 10,
"0/49/10": 4,
"0/49/65532": 2,
"0/49/65533": 2,
"0/49/65528": [1, 5, 7],
"0/49/65529": [0, 3, 4, 6, 8],
"0/49/65531": [
0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 65528, 65529, 65531, 65532, 65533
],
"0/50/65532": 0,
"0/50/65533": 1,
"0/50/65528": [1],
"0/50/65529": [0],
"0/50/65531": [65528, 65529, 65531, 65532, 65533],
"0/51/0": [
{
"0": "MyHome",
"1": true,
"2": null,
"3": null,
"4": "GstaSerJSho=",
"5": [],
"6": [
"/cS6oCynAAGilSC/p+bVSg==",
"/QANuACgAAAAAAD//gDIAA==",
"/QANuACgAABL3TOUNF1NGw==",
"/oAAAAAAAAAYy1pJ6slKGg=="
],
"7": 4
}
],
"0/51/1": 10,
"0/51/2": 1934,
"0/51/3": 17,
"0/51/4": 6,
"0/51/5": [],
"0/51/6": [],
"0/51/7": [],
"0/51/8": false,
"0/51/65532": 0,
"0/51/65533": 2,
"0/51/65528": [2],
"0/51/65529": [0, 1],
"0/51/65531": [
0, 1, 2, 3, 4, 5, 6, 7, 8, 65528, 65529, 65531, 65532, 65533
],
"0/52/0": [
{
"0": 8,
"1": "shell",
"3": 324
},
{
"0": 3,
"1": "UART",
"3": 127
},
{
"0": 2,
"1": "OT Stack",
"3": 719
},
{
"0": 9,
"1": "LaundryW",
"3": 767
},
{
"0": 12,
"1": "Bluetoot",
"3": 174
},
{
"0": 1,
"1": "Bluetoot",
"3": 294
},
{
"0": 11,
"1": "Bluetoot",
"3": 216
},
{
"0": 6,
"1": "Tmr Svc",
"3": 586
},
{
"0": 5,
"1": "IDLE",
"3": 264
},
{
"0": 7,
"1": "CHIP",
"3": 699
}
],
"0/52/1": 99808,
"0/52/2": 17592,
"0/52/3": 4294959166,
"0/52/65532": 1,
"0/52/65533": 1,
"0/52/65528": [],
"0/52/65529": [0],
"0/52/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
"0/53/0": 25,
"0/53/1": 5,
"0/53/2": "MyHome",
"0/53/3": 4660,
"0/53/4": 12054125955590472924,
"0/53/5": "QP0ADbgAoAAA",
"0/53/6": 0,
"0/53/7": [
{
"0": 7100699097952925053,
"1": 23,
"2": 15360,
"3": 222256,
"4": 71507,
"5": 2,
"6": -83,
"7": -90,
"8": 56,
"9": 3,
"10": true,
"11": true,
"12": true,
"13": false
},
{
"0": 9656160343072683744,
"1": 16,
"2": 17408,
"3": 211448,
"4": 95936,
"5": 3,
"6": -53,
"7": -59,
"8": 0,
"9": 0,
"10": true,
"11": true,
"12": true,
"13": false
},
{
"0": 5926511551178228101,
"1": 0,
"2": 19456,
"3": 420246,
"4": 89821,
"5": 3,
"6": -57,
"7": -56,
"8": 0,
"9": 0,
"10": true,
"11": true,
"12": true,
"13": false
},
{
"0": 3029834005214616809,
"1": 8,
"2": 22528,
"3": 125241,
"4": 91286,
"5": 3,
"6": -73,
"7": -81,
"8": 0,
"9": 0,
"10": true,
"11": true,
"12": true,
"13": false
},
{
"0": 17459145101989614194,
"1": 7,
"2": 26624,
"3": 1426216,
"4": 36884,
"5": 3,
"6": -39,
"7": -39,
"8": 34,
"9": 0,
"10": true,
"11": true,
"12": true,
"13": false
},
{
"0": 17503311195895696084,
"1": 30,
"2": 29696,
"3": 577028,
"4": 98083,
"5": 2,
"6": -84,
"7": -85,
"8": 65,
"9": 20,
"10": true,
"11": true,
"12": true,
"13": false
},
{
"0": 8241705229565301122,
"1": 19,
"2": 57344,
"3": 488092,
"4": 55364,
"5": 3,
"6": -48,
"7": -48,
"8": 1,
"9": 0,
"10": true,
"11": true,
"12": true,
"13": false
}
],
"0/53/8": [
{
"0": 7100699097952925053,
"1": 15360,
"2": 15,
"3": 22,
"4": 1,
"5": 2,
"6": 2,
"7": 23,
"8": true,
"9": true
},
{
"0": 9656160343072683744,
"1": 17408,
"2": 17,
"3": 19,
"4": 1,
"5": 3,
"6": 3,
"7": 16,
"8": true,
"9": true
},
{
"0": 5926511551178228101,
"1": 19456,
"2": 19,
"3": 17,
"4": 1,
"5": 3,
"6": 3,
"7": 0,
"8": true,
"9": true
},
{
"0": 3029834005214616809,
"1": 22528,
"2": 22,
"3": 17,
"4": 1,
"5": 3,
"6": 3,
"7": 8,
"8": true,
"9": true
},
{
"0": 17459145101989614194,
"1": 26624,
"2": 26,
"3": 17,
"4": 1,
"5": 3,
"6": 3,
"7": 7,
"8": true,
"9": true
},
{
"0": 17503311195895696084,
"1": 29696,
"2": 29,
"3": 26,
"4": 1,
"5": 2,
"6": 2,
"7": 30,
"8": true,
"9": true
},
{
"0": 0,
"1": 51200,
"2": 50,
"3": 63,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": true,
"9": false
},
{
"0": 8241705229565301122,
"1": 57344,
"2": 56,
"3": 17,
"4": 1,
"5": 3,
"6": 3,
"7": 19,
"8": true,
"9": true
}
],
"0/53/9": 1348153998,
"0/53/10": 68,
"0/53/11": 49,
"0/53/12": 120,
"0/53/13": 56,
"0/53/14": 1,
"0/53/15": 0,
"0/53/16": 1,
"0/53/17": 0,
"0/53/18": 0,
"0/53/19": 1,
"0/53/20": 0,
"0/53/21": 0,
"0/53/22": 18798,
"0/53/23": 18683,
"0/53/24": 115,
"0/53/25": 18699,
"0/53/26": 18492,
"0/53/27": 115,
"0/53/28": 18814,
"0/53/29": 0,
"0/53/30": 0,
"0/53/31": 0,
"0/53/32": 0,
"0/53/33": 15745,
"0/53/34": 207,
"0/53/35": 0,
"0/53/36": 71,
"0/53/37": 0,
"0/53/38": 0,
"0/53/39": 7183,
"0/53/40": 6295,
"0/53/41": 886,
"0/53/42": 6140,
"0/53/43": 0,
"0/53/44": 0,
"0/53/45": 0,
"0/53/46": 0,
"0/53/47": 0,
"0/53/48": 0,
"0/53/49": 1041,
"0/53/50": 0,
"0/53/51": 2,
"0/53/52": 0,
"0/53/53": 0,
"0/53/54": 0,
"0/53/55": 0,
"0/53/56": 65536,
"0/53/57": 0,
"0/53/58": 0,
"0/53/59": {
"0": 672,
"1": 8335
},
"0/53/60": "AB//4A==",
"0/53/61": {
"0": true,
"1": false,
"2": true,
"3": true,
"4": true,
"5": true,
"6": false,
"7": true,
"8": true,
"9": true,
"10": true,
"11": true
},
"0/53/62": [],
"0/53/65532": 15,
"0/53/65533": 2,
"0/53/65528": [],
"0/53/65529": [0],
"0/53/65531": [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 65528, 65529, 65531, 65532, 65533
],
"0/60/0": 0,
"0/60/1": null,
"0/60/2": null,
"0/60/65532": 0,
"0/60/65533": 1,
"0/60/65528": [],
"0/60/65529": [0, 1, 2],
"0/60/65531": [0, 1, 2, 65528, 65529, 65531, 65532, 65533],
"0/62/0": [
{
"1": "FTABAQEkAgE3AyQTAhgmBIAigScmBYAlTTo3BiQVAiQRHRgkBwEkCAEwCUEEJu8N93WFULw4vts483kDAExYc3VhKuaWdmpdJnF5pDcls+y34i6RfchubiU77BJq8zo9VGn6J59mVROTzKgr0DcKNQEoARgkAgE2AwQCBAEYMAQUbJ+53QmsxXf2iP0oL4td/BQFi0gwBRRT9HTfU5Nds+HA8j+/MRP+0pVyIxgwC0BFzpzN0Z0DdN+oPUwK87jzZ8amzJxWlmbnW/Q+j1Z4ziWsFy3yLAsgKYL4nOexZZSqvlEvzMhpstndmh1eGYZfGA==",
"2": "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQTAhgkBwEkCAEwCUEEyT62Yt4qMI+MorlmQ/Hxh2CpLetznVknlAbhvYAwTexpSxp9GnhR09SrcUhz3mOb0eZa2TylqcnPBhHJ2Ih2RTcKNQEpARgkAmAwBBRT9HTfU5Nds+HA8j+/MRP+0pVyIzAFFOMCO8Jk7ZCknJquFGPtPzJiNqsDGDALQI/Kc38hQyK7AkT7/pN4hiYW3LoWKT3NA43+ssMJoVpDcaZ989GXBQKIbHKbBEXzUQ1J8wfL7l2pL0Z8Lso9JwgY",
"254": 4
}
],
"0/62/1": [
{
"1": "BIrruNo7r0gX6j6lq1dDi5zeK3jxcTavjt2o4adCCSCYtbxOakfb7C3GXqgV4LzulFSinbewmYkdqFBHqm5pxvU=",
"2": 4939,
"3": 2,
"4": 29,
"5": "",
"254": 4
}
],
"0/62/2": 5,
"0/62/3": 4,
"0/62/4": [
"FTABAQAkAgE3AyYUyakYCSYVj6gLsxgmBP2G+CskBQA3BiYUyakYCSYVj6gLsxgkBwEkCAEwCUEEgYwxrTB+tyiEGfrRwjlXTG34MiQtJXbg5Qqd0ohdRW7MfwYY7vZiX/0h9hI8MqUralFaVPcnghAP0MSJm1YrqTcKNQEpARgkAmAwBBS3BS9aJzt+p6i28Nj+trB2Uu+vdzAFFLcFL1onO36nqLbw2P62sHZS7693GDALQIrLt7Uq3S9HEe7apdzYSR+j3BLWNXSTLWD4YbrdyYLpm6xqHDV/NPARcIp4skZdtz91WwFBDfuS4jO5aVoER1sY",
"FTABAQAkAgE3AycUQhmZbaIbYjokFQIYJgRWZLcqJAUANwYnFEIZmW2iG2I6JBUCGCQHASQIATAJQQT2AlKGW/kOMjqayzeO0md523/fuhrhGEUU91uQpTiKo0I7wcPpKnmrwfQNPX6g0kEQl+VGaXa3e22lzfu5Tzp0Nwo1ASkBGCQCYDAEFOOMk13ScMKuT2hlaydi1yEJnhTqMAUU44yTXdJwwq5PaGVrJ2LXIQmeFOoYMAtAv2jJd1qd5miXbYesH1XrJ+vgyY0hzGuZ78N6Jw4Cb1oN1sLSpA+PNM0u7+hsEqcSvvn2eSV8EaRR+hg5YQjHDxg=",
"FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEE0j40vjcb6ZsmtBR/I0rB3ZIfAA8lPeWCTxG7nPSbNpepe18XwLidhFIHKmvtZWDZ3Hl3MM9NBB+LAZlCFq/edjcKNQEpARgkAmAwBBS7EfW886qYxvWeWjpA/G/CjDuwEDAFFLsR9bzzqpjG9Z5aOkD8b8KMO7AQGDALQIgQgt5asUGXO0ZyTWWKdjAmBSoJAzRMuD4Z+tQYZanQ3s0OItL07MU2In6uyXhjNBfjJlRqon780lhjTsm2Y+8Y",
"FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEEiuu42juvSBfqPqWrV0OLnN4rePFxNq+O3ajhp0IJIJi1vE5qR9vsLcZeqBXgvO6UVKKdt7CZiR2oUEeqbmnG9TcKNQEpARgkAmAwBBTjAjvCZO2QpJyarhRj7T8yYjarAzAFFOMCO8Jk7ZCknJquFGPtPzJiNqsDGDALQE7hTxTRg92QOxwA1hK3xv8DaxvxL71r6ZHcNRzug9wNnonJ+NC84SFKvKDxwcBxHYqFdIyDiDgwJNTQIBgasmIY"
],
"0/62/5": 4,
"0/62/65532": 0,
"0/62/65533": 1,
"0/62/65528": [1, 3, 5, 8],
"0/62/65529": [0, 2, 4, 6, 7, 9, 10, 11],
"0/62/65531": [0, 1, 2, 3, 4, 5, 65528, 65529, 65531, 65532, 65533],
"0/63/0": [],
"0/63/1": [],
"0/63/2": 4,
"0/63/3": 3,
"0/63/65532": 0,
"0/63/65533": 2,
"0/63/65528": [2, 5],
"0/63/65529": [0, 1, 3, 4],
"0/63/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
"0/64/0": [
{
"0": "room",
"1": "bedroom 2"
},
{
"0": "orientation",
"1": "North"
},
{
"0": "floor",
"1": "2"
},
{
"0": "direction",
"1": "up"
}
],
"0/64/65532": 0,
"0/64/65533": 1,
"0/64/65528": [],
"0/64/65529": [],
"0/64/65531": [0, 65528, 65529, 65531, 65532, 65533],
"0/65/0": [],
"0/65/65532": 0,
"0/65/65533": 1,
"0/65/65528": [],
"0/65/65529": [],
"0/65/65531": [0, 65528, 65529, 65531, 65532, 65533],
"1/3/0": 0,
"1/3/1": 2,
"1/3/65532": 0,
"1/3/65533": 4,
"1/3/65528": [],
"1/3/65529": [0, 64],
"1/3/65531": [0, 1, 65528, 65529, 65531, 65532, 65533],
"1/29/0": [
{
"0": 115,
"1": 1
}
],
"1/29/1": [3, 29, 30, 81, 83, 86, 96],
"1/29/2": [],
"1/29/3": [],
"1/29/65532": 0,
"1/29/65533": 2,
"1/29/65528": [],
"1/29/65529": [],
"1/29/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
"1/30/0": [],
"1/30/65532": 0,
"1/30/65533": 1,
"1/30/65528": [],
"1/30/65529": [],
"1/30/65531": [0, 65528, 65529, 65531, 65532, 65533],
"1/81/0": null,
"1/81/1": null,
"1/81/65532": null,
"1/81/65533": 2,
"1/81/65528": [1],
"1/81/65529": [0],
"1/81/65531": [0, 1, 65528, 65529, 65531, 65532, 65533],
"1/83/0": ["Off", "Low", "Medium", "High"],
"1/83/1": 0,
"1/83/2": 0,
"1/83/3": [1, 2],
"1/83/65532": 3,
"1/83/65533": 1,
"1/83/65528": [],
"1/83/65529": [],
"1/83/65531": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533],
"1/86/0": 0,
"1/86/1": 0,
"1/86/2": 0,
"1/86/3": 0,
"1/86/4": 1,
"1/86/5": ["Cold", "Colors", "Whites"],
"1/86/65532": 2,
"1/86/65533": 1,
"1/86/65528": [],
"1/86/65529": [0],
"1/86/65531": [4, 5, 65528, 65529, 65531, 65532, 65533],
"1/96/0": null,
"1/96/1": null,
"1/96/3": [
{
"0": 0
},
{
"0": 1
},
{
"0": 2
},
{
"0": 3
}
],
"1/96/4": 0,
"1/96/5": {
"0": 0
},
"1/96/65532": 0,
"1/96/65533": 1,
"1/96/65528": [4],
"1/96/65529": [0, 1, 2, 3],
"1/96/65531": [0, 1, 3, 4, 5, 65528, 65529, 65531, 65532, 65533],
"2/29/0": [
{
"0": 1296,
"1": 1
}
],
"2/29/1": [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": 5,
"1": true,
"2": -50000000,
"3": 50000000,
"4": [
{
"0": -50000000,
"1": -10000000,
"2": 5000,
"3": 2000,
"4": 3000
},
{
"0": -9999999,
"1": 9999999,
"2": 1000,
"3": 100,
"4": 500
},
{
"0": 10000000,
"1": 50000000,
"2": 5000,
"3": 2000,
"4": 3000
}
]
},
{
"0": 2,
"1": true,
"2": -100000,
"3": 100000,
"4": [
{
"0": -100000,
"1": -5000,
"2": 5000,
"3": 2000,
"4": 3000
},
{
"0": -4999,
"1": 4999,
"2": 1000,
"3": 100,
"4": 500
},
{
"0": 5000,
"1": 100000,
"2": 5000,
"3": 2000,
"4": 3000
}
]
},
{
"0": 1,
"1": true,
"2": -500000,
"3": 500000,
"4": [
{
"0": -500000,
"1": -100000,
"2": 5000,
"3": 2000,
"4": 3000
},
{
"0": -99999,
"1": 99999,
"2": 1000,
"3": 100,
"4": 500
},
{
"0": 100000,
"1": 500000,
"2": 5000,
"3": 2000,
"4": 3000
}
]
}
],
"2/144/3": [
{
"0": 0,
"1": 0,
"2": 300,
"7": 129,
"8": 129,
"9": 129,
"10": 129
},
{
"0": 1,
"1": 0,
"2": 500,
"7": 129,
"8": 129,
"9": 129,
"10": 129
},
{
"0": 2,
"1": 0,
"2": 1000,
"7": 129,
"8": 129,
"9": 129,
"10": 129
}
],
"2/144/4": 120000,
"2/144/5": 0,
"2/144/6": 0,
"2/144/7": 0,
"2/144/8": 0,
"2/144/9": 0,
"2/144/10": 0,
"2/144/11": 120000,
"2/144/12": 0,
"2/144/13": 0,
"2/144/14": 60,
"2/144/15": [
{
"0": 1,
"1": 100000
}
],
"2/144/16": [
{
"0": 1,
"1": 100000
}
],
"2/144/17": 9800,
"2/144/18": 0,
"2/144/65532": 31,
"2/144/65533": 1,
"2/144/65528": [],
"2/144/65529": [],
"2/144/65531": [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 65528,
65529, 65531, 65532, 65533
],
"2/145/0": {
"0": 14,
"1": true,
"2": 0,
"3": 1000000000000000,
"4": [
{
"0": 0,
"1": 1000000000000000,
"2": 500,
"3": 50
}
]
},
"2/145/1": {
"0": 0,
"1": 1900,
"2": 1936,
"3": 1900222,
"4": 1936790
},
"2/145/5": {
"0": 0,
"1": 0,
"2": 0,
"3": 0
},
"2/145/65532": 5,
"2/145/65533": 1,
"2/145/65528": [],
"2/145/65529": [],
"2/145/65531": [0, 1, 5, 65528, 65529, 65531, 65532, 65533],
"2/156/0": [0, 1, 2],
"2/156/1": null,
"2/156/65532": 12,
"2/156/65533": 1,
"2/156/65528": [],
"2/156/65529": [],
"2/156/65531": [0, 1, 65528, 65529, 65531, 65532, 65533]
},
"attribute_subscriptions": []
}

View File

@ -2340,6 +2340,237 @@
'state': 'unknown',
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_identify-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': <EntityCategory.CONFIG: 'config'>,
'entity_id': 'button.laundrywasher_identify',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <ButtonDeviceClass.IDENTIFY: 'identify'>,
'original_icon': None,
'original_name': 'Identify',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-IdentifyButton-3-65529',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_identify-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'identify',
'friendly_name': 'LaundryWasher Identify',
}),
'context': <ANY>,
'entity_id': 'button.laundrywasher_identify',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_pause-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.laundrywasher_pause',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Pause',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'pause',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-OperationalStatePauseButton-96-65529',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_pause-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'LaundryWasher Pause',
}),
'context': <ANY>,
'entity_id': 'button.laundrywasher_pause',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_resume-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.laundrywasher_resume',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Resume',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'resume',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-OperationalStateResumeButton-96-65529',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_resume-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'LaundryWasher Resume',
}),
'context': <ANY>,
'entity_id': 'button.laundrywasher_resume',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_start-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.laundrywasher_start',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Start',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'start',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-OperationalStateStartButton-96-65529',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_start-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'LaundryWasher Start',
}),
'context': <ANY>,
'entity_id': 'button.laundrywasher_start',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_stop-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.laundrywasher_stop',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Stop',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'stop',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-OperationalStateStopButton-96-65529',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[silabs_laundrywasher][button.laundrywasher_stop-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'LaundryWasher Stop',
}),
'context': <ANY>,
'entity_id': 'button.laundrywasher_stop',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[smoke_detector][button.smoke_sensor_identify-entry]
EntityRegistryEntrySnapshot({
'aliases': set({

View File

@ -1569,6 +1569,114 @@
'state': 'unknown',
})
# ---
# name: test_selects[silabs_laundrywasher][select.laundrywasher_mode-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
]),
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': None,
'entity_id': 'select.laundrywasher_mode',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Mode',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'mode',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-MatterLaundryWasherMode-81-1',
'unit_of_measurement': None,
})
# ---
# name: test_selects[silabs_laundrywasher][select.laundrywasher_mode-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'LaundryWasher Mode',
'options': list([
]),
}),
'context': <ANY>,
'entity_id': 'select.laundrywasher_mode',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_selects[silabs_laundrywasher][select.laundrywasher_temperature_level-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'Cold',
'Colors',
'Whites',
]),
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'select',
'entity_category': None,
'entity_id': 'select.laundrywasher_temperature_level',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Temperature level',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'temperature_level',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-TemperatureControlSelectedTemperatureLevel-86-4',
'unit_of_measurement': None,
})
# ---
# name: test_selects[silabs_laundrywasher][select.laundrywasher_temperature_level-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'LaundryWasher Temperature level',
'options': list([
'Cold',
'Colors',
'Whites',
]),
}),
'context': <ANY>,
'entity_id': 'select.laundrywasher_temperature_level',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Colors',
})
# ---
# name: test_selects[switch_unit][select.mock_switchunit_power_on_behavior_on_startup-entry]
EntityRegistryEntrySnapshot({
'aliases': set({

View File

@ -2711,6 +2711,294 @@
'state': '120.0',
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_current-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.laundrywasher_current',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>,
}),
}),
'original_device_class': <SensorDeviceClass.CURRENT: 'current'>,
'original_icon': None,
'original_name': 'Current',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-2-ElectricalPowerMeasurementActiveCurrent-144-5',
'unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>,
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_current-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'current',
'friendly_name': 'LaundryWasher Current',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricCurrent.AMPERE: 'A'>,
}),
'context': <ANY>,
'entity_id': 'sensor.laundrywasher_current',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_energy-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.laundrywasher_energy',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 3,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}),
}),
'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>,
'original_icon': None,
'original_name': 'Energy',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-2-ElectricalEnergyMeasurementCumulativeEnergyImported-145-1',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_energy-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'energy',
'friendly_name': 'LaundryWasher Energy',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}),
'context': <ANY>,
'entity_id': 'sensor.laundrywasher_energy',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_operational_state-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'options': list([
'stopped',
'running',
'paused',
'error',
]),
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.laundrywasher_operational_state',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.ENUM: 'enum'>,
'original_icon': None,
'original_name': 'Operational state',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'operational_state',
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-1-OperationalState-96-4',
'unit_of_measurement': None,
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_operational_state-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'enum',
'friendly_name': 'LaundryWasher Operational state',
'options': list([
'stopped',
'running',
'paused',
'error',
]),
}),
'context': <ANY>,
'entity_id': 'sensor.laundrywasher_operational_state',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'stopped',
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_power-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.laundrywasher_power',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfPower.WATT: 'W'>,
}),
}),
'original_device_class': <SensorDeviceClass.POWER: 'power'>,
'original_icon': None,
'original_name': 'Power',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-2-ElectricalPowerMeasurementWatt-144-8',
'unit_of_measurement': <UnitOfPower.WATT: 'W'>,
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_power-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'power',
'friendly_name': 'LaundryWasher Power',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfPower.WATT: 'W'>,
}),
'context': <ANY>,
'entity_id': 'sensor.laundrywasher_power',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_voltage-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.laundrywasher_voltage',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 0,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
}),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None,
'original_name': 'Voltage',
'platform': 'matter',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '00000000000004D2-000000000000001D-MatterNodeDevice-2-ElectricalPowerMeasurementVoltage-144-4',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
})
# ---
# name: test_sensors[silabs_laundrywasher][sensor.laundrywasher_voltage-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'voltage',
'friendly_name': 'LaundryWasher Voltage',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}),
'context': <ANY>,
'entity_id': 'sensor.laundrywasher_voltage',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '120.0',
})
# ---
# name: test_sensors[smoke_detector][sensor.smoke_sensor_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': set({

View File

@ -103,3 +103,44 @@ async def test_attribute_select_entities(
await trigger_subscription_callback(hass, matter_client)
state = hass.states.get(entity_id)
assert state.state == "unknown"
@pytest.mark.parametrize("node_fixture", ["silabs_laundrywasher"])
async def test_list_select_entities(
hass: HomeAssistant,
matter_client: MagicMock,
matter_node: MatterNode,
) -> None:
"""Test ListSelect entities are discovered and working from a laundrywasher fixture."""
state = hass.states.get("select.laundrywasher_temperature_level")
assert state
assert state.state == "Colors"
assert state.attributes["options"] == ["Cold", "Colors", "Whites"]
# Change temperature_level
set_node_attribute(matter_node, 1, 86, 4, 0)
await trigger_subscription_callback(hass, matter_client)
state = hass.states.get("select.laundrywasher_temperature_level")
assert state.state == "Cold"
# test select option
await hass.services.async_call(
"select",
"select_option",
{
"entity_id": "select.laundrywasher_temperature_level",
"option": "Whites",
},
blocking=True,
)
assert matter_client.send_device_command.call_count == 1
assert matter_client.send_device_command.call_args == call(
node_id=matter_node.node_id,
endpoint_id=1,
command=clusters.TemperatureControl.Commands.SetTemperature(
targetTemperatureLevel=2
),
)
# test that an invalid value (e.g. 253) leads to an unknown state
set_node_attribute(matter_node, 1, 86, 4, 253)
await trigger_subscription_callback(hass, matter_client)
state = hass.states.get("select.laundrywasher_temperature_level")
assert state.state == "unknown"