mirror of
https://github.com/home-assistant/core.git
synced 2026-09-06 05:22:44 +01:00
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
134 lines
3.6 KiB
Python
134 lines
3.6 KiB
Python
"""Switch for Midea."""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any, override
|
|
|
|
from midealocal.const import DeviceType
|
|
|
|
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
|
|
from .entity import MideaConfigEntry, MideaEntity, midea_api_call
|
|
|
|
PARALLEL_UPDATES = 0
|
|
|
|
|
|
@dataclass(kw_only=True, frozen=True)
|
|
class MideaSwitchEntityDescription(SwitchEntityDescription):
|
|
"""Description for a Midea switch entity."""
|
|
|
|
models: list[DeviceType]
|
|
|
|
|
|
SWITCHES: list[MideaSwitchEntityDescription] = [
|
|
MideaSwitchEntityDescription(
|
|
key="aux_heating",
|
|
translation_key="aux_heating",
|
|
models=[DeviceType.AC, DeviceType.CC, DeviceType.CF],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="prompt_tone",
|
|
translation_key="prompt_tone",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="screen_display",
|
|
translation_key="screen_display",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="out_silent",
|
|
translation_key="out_silent",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="smart_eye",
|
|
translation_key="smart_eye",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="anion",
|
|
translation_key="anion",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="sound",
|
|
translation_key="sound",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="self_clean",
|
|
translation_key="self_clean",
|
|
models=[DeviceType.AC],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="disinfect",
|
|
translation_key="disinfect",
|
|
models=[DeviceType.C3],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="tbh",
|
|
translation_key="tbh",
|
|
models=[DeviceType.C3],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="zone1_curve",
|
|
translation_key="zone1_curve",
|
|
models=[DeviceType.C3],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="zone2_curve",
|
|
translation_key="zone2_curve",
|
|
models=[DeviceType.C3],
|
|
),
|
|
MideaSwitchEntityDescription(
|
|
key="night_light",
|
|
translation_key="night_light",
|
|
models=[DeviceType.CC],
|
|
),
|
|
]
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
config_entry: MideaConfigEntry,
|
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
) -> None:
|
|
"""Set up switches for device."""
|
|
device = config_entry.runtime_data
|
|
|
|
async_add_entities(
|
|
MideaSwitch(device, description)
|
|
for description in SWITCHES
|
|
if device.device_type in description.models
|
|
and description.key in device.attributes
|
|
)
|
|
|
|
|
|
class MideaSwitch(MideaEntity, SwitchEntity):
|
|
"""Represent a Midea switch."""
|
|
|
|
entity_description: MideaSwitchEntityDescription
|
|
|
|
@property
|
|
@override
|
|
def is_on(self) -> bool | None:
|
|
"""Return true if switch is on."""
|
|
value = self._device.get_attribute(self.entity_description.key)
|
|
if not isinstance(value, bool):
|
|
return None
|
|
return value
|
|
|
|
@override
|
|
def turn_on(self, **kwargs: Any) -> None:
|
|
"""Turn on switch."""
|
|
with midea_api_call():
|
|
self._device.set_attribute(attr=self.entity_description.key, value=True)
|
|
|
|
@override
|
|
def turn_off(self, **kwargs: Any) -> None:
|
|
"""Turn off switch."""
|
|
with midea_api_call():
|
|
self._device.set_attribute(attr=self.entity_description.key, value=False)
|