1 """Matter ModeSelect Cluster Support."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from typing
import TYPE_CHECKING
8 from chip.clusters
import Objects
as clusters
9 from chip.clusters.Types
import Nullable
10 from matter_server.common.helpers.util
import create_attribute_path_from_attribute
18 from .entity
import MatterEntity, MatterEntityDescription
19 from .helpers
import get_matter
20 from .models
import MatterDiscoverySchema
22 type SelectCluster = (
25 | clusters.LaundryWasherMode
26 | clusters.RefrigeratorAndTemperatureControlledCabinetMode
28 | clusters.RvcCleanMode
29 | clusters.DishwasherMode
30 | clusters.EnergyEvseMode
31 | clusters.DeviceEnergyManagementMode
37 config_entry: ConfigEntry,
38 async_add_entities: AddEntitiesCallback,
40 """Set up Matter ModeSelect from Config Entry."""
42 matter.register_platform_handler(Platform.SELECT, async_add_entities)
45 @dataclass(frozen=True)
47 """Describe Matter select entities."""
51 """Representation of a select entity from Matter Attribute read/write."""
53 entity_description: MatterSelectEntityDescription
56 """Change the selected mode."""
59 assert value_convert
is not None
61 node_id=self.
_endpoint_endpoint.node.node_id,
62 attribute_path=create_attribute_path_from_attribute(
65 value=value_convert(option),
70 """Update from device."""
71 value: Nullable | int |
None
75 assert value_convert
is not None
80 """Representation of a select entity from Matter (Mode) Cluster attribute(s)."""
83 """Change the selected mode."""
84 cluster: SelectCluster = self.
_endpoint_endpoint.get_cluster(
85 self.
_entity_info_entity_info.primary_attribute.cluster_id
88 for mode
in cluster.supportedModes:
89 if mode.label != option:
92 node_id=self.
_endpoint_endpoint.node.node_id,
93 endpoint_id=self.
_endpoint_endpoint.endpoint_id,
94 command=cluster.Commands.ChangeToMode(newMode=mode.mode),
100 """Update from device."""
103 cluster: SelectCluster = self.
_endpoint_endpoint.get_cluster(
104 self.
_entity_info_entity_info.primary_attribute.cluster_id
106 modes = {mode.mode: mode.label
for mode
in cluster.supportedModes}
110 if desc := getattr(cluster,
"description",
None):
115 DISCOVERY_SCHEMAS = [
117 platform=Platform.SELECT,
119 key=
"MatterModeSelect",
120 entity_category=EntityCategory.CONFIG,
121 translation_key=
"mode",
123 entity_class=MatterModeSelectEntity,
124 required_attributes=(
125 clusters.ModeSelect.Attributes.CurrentMode,
126 clusters.ModeSelect.Attributes.SupportedModes,
130 platform=Platform.SELECT,
132 key=
"MatterOvenMode",
133 translation_key=
"mode",
135 entity_class=MatterModeSelectEntity,
136 required_attributes=(
137 clusters.OvenMode.Attributes.CurrentMode,
138 clusters.OvenMode.Attributes.SupportedModes,
142 platform=Platform.SELECT,
144 key=
"MatterLaundryWasherMode",
145 translation_key=
"mode",
147 entity_class=MatterModeSelectEntity,
148 required_attributes=(
149 clusters.LaundryWasherMode.Attributes.CurrentMode,
150 clusters.LaundryWasherMode.Attributes.SupportedModes,
154 platform=Platform.SELECT,
156 key=
"MatterRefrigeratorAndTemperatureControlledCabinetMode",
157 translation_key=
"mode",
159 entity_class=MatterModeSelectEntity,
160 required_attributes=(
161 clusters.RefrigeratorAndTemperatureControlledCabinetMode.Attributes.CurrentMode,
162 clusters.RefrigeratorAndTemperatureControlledCabinetMode.Attributes.SupportedModes,
166 platform=Platform.SELECT,
168 key=
"MatterRvcCleanMode",
169 translation_key=
"clean_mode",
171 entity_class=MatterModeSelectEntity,
172 required_attributes=(
173 clusters.RvcCleanMode.Attributes.CurrentMode,
174 clusters.RvcCleanMode.Attributes.SupportedModes,
178 platform=Platform.SELECT,
180 key=
"MatterDishwasherMode",
181 translation_key=
"mode",
183 entity_class=MatterModeSelectEntity,
184 required_attributes=(
185 clusters.DishwasherMode.Attributes.CurrentMode,
186 clusters.DishwasherMode.Attributes.SupportedModes,
190 platform=Platform.SELECT,
192 key=
"MatterEnergyEvseMode",
193 translation_key=
"mode",
195 entity_class=MatterModeSelectEntity,
196 required_attributes=(
197 clusters.EnergyEvseMode.Attributes.CurrentMode,
198 clusters.EnergyEvseMode.Attributes.SupportedModes,
202 platform=Platform.SELECT,
204 key=
"MatterDeviceEnergyManagementMode",
205 translation_key=
"mode",
207 entity_class=MatterModeSelectEntity,
208 required_attributes=(
209 clusters.DeviceEnergyManagementMode.Attributes.CurrentMode,
210 clusters.DeviceEnergyManagementMode.Attributes.SupportedModes,
214 platform=Platform.SELECT,
216 key=
"MatterStartUpOnOff",
217 entity_category=EntityCategory.CONFIG,
218 translation_key=
"startup_on_off",
219 options=[
"on",
"off",
"toggle",
"previous"],
233 entity_class=MatterSelectEntity,
234 required_attributes=(clusters.OnOff.Attributes.StartUpOnOff,),
237 platform=Platform.SELECT,
239 key=
"SmokeCOSmokeSensitivityLevel",
240 entity_category=EntityCategory.CONFIG,
241 translation_key=
"sensitivity_level",
242 options=[
"high",
"standard",
"low"],
254 entity_class=MatterSelectEntity,
255 required_attributes=(clusters.SmokeCoAlarm.Attributes.SmokeSensitivityLevel,),
Any get_matter_attribute_value(self, type[ClusterAttributeDescriptor] attribute, bool null_as_none=True)
None _update_from_device(self)
None async_select_option(self, str option)
None async_select_option(self, str option)
MatterAdapter get_matter(HomeAssistant hass)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)