mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Add TemperatureLevel feature from Matter TemperatureControl cluster (#134532)
This commit is contained in:
parent
8b24bac1d1
commit
71d63bac8d
@ -36,6 +36,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"select": {
|
||||
"temperature_level": {
|
||||
"default": "mdi:thermometer"
|
||||
}
|
||||
},
|
||||
"sensor": {
|
||||
"contamination_state": {
|
||||
"default": "mdi:air-filter"
|
||||
|
@ -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,
|
||||
),
|
||||
),
|
||||
]
|
||||
|
@ -200,6 +200,9 @@
|
||||
"previous": "Previous"
|
||||
}
|
||||
},
|
||||
"temperature_level": {
|
||||
"name": "Temperature level"
|
||||
},
|
||||
"temperature_display_mode": {
|
||||
"name": "Temperature display mode"
|
||||
}
|
||||
|
@ -104,6 +104,7 @@ async def integration_fixture(
|
||||
"pressure_sensor",
|
||||
"room_airconditioner",
|
||||
"silabs_dishwasher",
|
||||
"silabs_laundrywasher",
|
||||
"smoke_detector",
|
||||
"switch_unit",
|
||||
"temperature_sensor",
|
||||
|
909
tests/components/matter/fixtures/nodes/silabs_laundrywasher.json
Normal file
909
tests/components/matter/fixtures/nodes/silabs_laundrywasher.json
Normal 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": []
|
||||
}
|
@ -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({
|
||||
|
@ -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({
|
||||
|
@ -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({
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user