48 files
This commit is contained in:
1 parent
8abf4efaec
commit
2d21a40fd6
48 files changed
+4181
-232
No files matched your search
@@ -23,7 +23,13 @@ from midealocal.devices.x40 import DeviceAttributes as X40Attributes
|
||||
from midealocal.devices.x40 import MideaX40Device
|
||||
|
||||
from .const import DEVICES, DOMAIN
|
||||
from .midea_devices import MIDEA_DEVICES
|
||||
from .midea_devices import (
|
||||
FRESH_AIR_EXHAUST,
|
||||
FRESH_AIR_EXHAUST_MODE,
|
||||
FRESH_AIR_EXHAUST_POWER,
|
||||
FRESH_AIR_EXHAUST_SPEED,
|
||||
MIDEA_DEVICES,
|
||||
)
|
||||
from .midea_entity import MideaEntity
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
@@ -45,6 +51,12 @@ async def async_setup_entry(
|
||||
"dict",
|
||||
MIDEA_DEVICES[device.device_type]["entities"],
|
||||
).items():
|
||||
required_attribute = config.get("required_attribute")
|
||||
if (
|
||||
required_attribute is not None
|
||||
and required_attribute not in device.attributes
|
||||
):
|
||||
continue
|
||||
if config["type"] == Platform.FAN and (
|
||||
config.get("default") or entity_key in extra_switches
|
||||
):
|
||||
@@ -100,7 +112,7 @@ class MideaFan(MideaEntity, FanEntity):
|
||||
"""Midea Fan fan speed."""
|
||||
return cast("int", self._device.get_attribute("fan_speed"))
|
||||
|
||||
def turn_off(self, **kwargs: Any) -> None: # noqa: ANN401, ARG002
|
||||
def turn_off(self, **kwargs: Any) -> None: # ruff:ignore[any-type, unused-method-argument]
|
||||
"""Midea Fan turn off."""
|
||||
self._device.set_attribute(attr="power", value=False)
|
||||
|
||||
@@ -117,7 +129,7 @@ class MideaFan(MideaEntity, FanEntity):
|
||||
"""Midea Fan percentage."""
|
||||
if not self.fan_speed:
|
||||
return None
|
||||
return int(round(self.fan_speed * self.percentage_step)) # noqa: RUF046
|
||||
return int(round(self.fan_speed * self.percentage_step)) # ruff:ignore[unnecessary-cast-to-int]
|
||||
|
||||
def set_percentage(self, percentage: int) -> None:
|
||||
"""Midea Fan set percentage."""
|
||||
@@ -131,7 +143,7 @@ class MideaFan(MideaEntity, FanEntity):
|
||||
else:
|
||||
await self.hass.async_add_executor_job(self.set_percentage, percentage)
|
||||
|
||||
def update_state(self, status: Any) -> None: # noqa: ANN401, ARG002
|
||||
def update_state(self, status: Any) -> None: # ruff:ignore[any-type, unused-method-argument]
|
||||
"""Midea Fan update state."""
|
||||
if not self.hass:
|
||||
_LOGGER.warning(
|
||||
@@ -140,7 +152,7 @@ class MideaFan(MideaEntity, FanEntity):
|
||||
type(self),
|
||||
)
|
||||
return
|
||||
self.schedule_update_ha_state()
|
||||
self.schedule_update_if_running()
|
||||
|
||||
|
||||
class MideaFAFan(MideaFan):
|
||||
@@ -163,7 +175,7 @@ class MideaFAFan(MideaFan):
|
||||
self,
|
||||
percentage: int | None = None,
|
||||
preset_mode: str | None = None,
|
||||
**kwargs: Any, # noqa: ANN401, ARG002
|
||||
**kwargs: Any, # ruff:ignore[any-type, unused-method-argument]
|
||||
) -> None:
|
||||
"""Midea FA Fan turn on."""
|
||||
fan_speed = int(percentage / self.percentage_step + 0.5) if percentage else None
|
||||
@@ -189,7 +201,7 @@ class MideaB6Fan(MideaFan):
|
||||
self,
|
||||
percentage: int | None = None,
|
||||
preset_mode: str | None = None,
|
||||
**kwargs: Any, # noqa: ANN401, ARG002
|
||||
**kwargs: Any, # ruff:ignore[any-type, unused-method-argument]
|
||||
) -> None:
|
||||
"""Midea B6 Fan turn on."""
|
||||
fan_speed = int(percentage / self.percentage_step + 0.5) if percentage else None
|
||||
@@ -204,6 +216,7 @@ class MideaACFreshAirFan(MideaFan):
|
||||
def __init__(self, device: MideaACDevice, entity_key: str) -> None:
|
||||
"""Midea AC Fresh Air Fan entity init."""
|
||||
super().__init__(device, entity_key)
|
||||
self._is_exhaust = entity_key == FRESH_AIR_EXHAUST
|
||||
self._attr_supported_features = (
|
||||
FanEntityFeature.SET_SPEED
|
||||
| FanEntityFeature.PRESET_MODE
|
||||
@@ -214,47 +227,89 @@ class MideaACFreshAirFan(MideaFan):
|
||||
@property
|
||||
def preset_modes(self) -> list[str] | None:
|
||||
"""Midea AC Fan preset modes."""
|
||||
if self._is_exhaust:
|
||||
return cast(
|
||||
"list[str]",
|
||||
getattr(self._device, "fresh_air_exhaust_fan_speeds", []),
|
||||
)
|
||||
return cast("list", self._device.fresh_air_fan_speeds)
|
||||
|
||||
@property
|
||||
def is_on(self) -> bool:
|
||||
"""Midea AC Fan is on."""
|
||||
return cast("bool", self._device.get_attribute(ACAttributes.fresh_air_power))
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_POWER
|
||||
if self._is_exhaust
|
||||
else ACAttributes.fresh_air_power
|
||||
)
|
||||
return cast("bool", self._device.get_attribute(attribute))
|
||||
|
||||
@property
|
||||
def fan_speed(self) -> int:
|
||||
"""Midea AC Fan fan speed."""
|
||||
return cast("int", self._device.get_attribute(ACAttributes.fresh_air_fan_speed))
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_SPEED
|
||||
if self._is_exhaust
|
||||
else ACAttributes.fresh_air_fan_speed
|
||||
)
|
||||
return cast("int", self._device.get_attribute(attribute))
|
||||
|
||||
def turn_on(
|
||||
self,
|
||||
percentage: int | None = None, # noqa: ARG002
|
||||
preset_mode: str | None = None, # noqa: ARG002
|
||||
**kwargs: Any, # noqa: ANN401, ARG002
|
||||
percentage: int | None = None,
|
||||
preset_mode: str | None = None,
|
||||
**kwargs: Any, # ruff:ignore[any-type, unused-method-argument]
|
||||
) -> None:
|
||||
"""Midea AC Fan tun on."""
|
||||
self._device.set_attribute(attr=ACAttributes.fresh_air_power, value=True)
|
||||
if preset_mode is not None:
|
||||
self.set_preset_mode(preset_mode)
|
||||
return
|
||||
if percentage is not None:
|
||||
self.set_percentage(percentage)
|
||||
return
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_POWER
|
||||
if self._is_exhaust
|
||||
else ACAttributes.fresh_air_power
|
||||
)
|
||||
self._device.set_attribute(attr=attribute, value=True)
|
||||
|
||||
def turn_off(self, **kwargs: Any) -> None: # noqa: ANN401, ARG002
|
||||
def turn_off(self, **kwargs: Any) -> None: # ruff:ignore[any-type, unused-method-argument]
|
||||
"""Midea AC Fan turn off."""
|
||||
self._device.set_attribute(attr=ACAttributes.fresh_air_power, value=False)
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_POWER
|
||||
if self._is_exhaust
|
||||
else ACAttributes.fresh_air_power
|
||||
)
|
||||
self._device.set_attribute(attr=attribute, value=False)
|
||||
|
||||
def set_percentage(self, percentage: int) -> None:
|
||||
"""Midea AC Fan set percentage."""
|
||||
fan_speed = int(percentage / self.percentage_step + 0.5)
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_SPEED
|
||||
if self._is_exhaust
|
||||
else ACAttributes.fresh_air_fan_speed
|
||||
)
|
||||
self._device.set_attribute(
|
||||
attr=ACAttributes.fresh_air_fan_speed,
|
||||
attr=attribute,
|
||||
value=fan_speed,
|
||||
)
|
||||
|
||||
def set_preset_mode(self, preset_mode: str) -> None:
|
||||
"""Midea AC Fan set preset mode."""
|
||||
self._device.set_attribute(attr=ACAttributes.fresh_air_mode, value=preset_mode)
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_MODE if self._is_exhaust else ACAttributes.fresh_air_mode
|
||||
)
|
||||
self._device.set_attribute(attr=attribute, value=preset_mode)
|
||||
|
||||
@property
|
||||
def preset_mode(self) -> str | None:
|
||||
"""Midea AC Fan preset mode."""
|
||||
return cast("str", self._device.get_attribute(attr=ACAttributes.fresh_air_mode))
|
||||
attribute = (
|
||||
FRESH_AIR_EXHAUST_MODE if self._is_exhaust else ACAttributes.fresh_air_mode
|
||||
)
|
||||
return cast("str", self._device.get_attribute(attr=attribute))
|
||||
|
||||
|
||||
class MideaCEFan(MideaFan):
|
||||
@@ -274,9 +329,9 @@ class MideaCEFan(MideaFan):
|
||||
|
||||
def turn_on(
|
||||
self,
|
||||
percentage: int | None = None, # noqa: ARG002
|
||||
preset_mode: str | None = None, # noqa: ARG002
|
||||
**kwargs: Any, # noqa: ANN401, ARG002
|
||||
percentage: int | None = None, # ruff:ignore[unused-method-argument]
|
||||
preset_mode: str | None = None, # ruff:ignore[unused-method-argument]
|
||||
**kwargs: Any, # ruff:ignore[any-type, unused-method-argument]
|
||||
) -> None:
|
||||
"""Midea CE Fan turn on."""
|
||||
self._device.set_attribute(attr=CEAttributes.power, value=True)
|
||||
@@ -308,13 +363,13 @@ class MideaX40Fan(MideaFan):
|
||||
|
||||
def turn_on(
|
||||
self,
|
||||
percentage: int | None = None, # noqa: ARG002
|
||||
preset_mode: str | None = None, # noqa: ARG002
|
||||
**kwargs: Any, # noqa: ANN401, ARG002
|
||||
percentage: int | None = None, # ruff:ignore[unused-method-argument]
|
||||
preset_mode: str | None = None, # ruff:ignore[unused-method-argument]
|
||||
**kwargs: Any, # ruff:ignore[any-type, unused-method-argument]
|
||||
) -> None:
|
||||
"""Midea X40 Fan turn on."""
|
||||
self._device.set_attribute(attr=X40Attributes.fan_speed, value=1)
|
||||
|
||||
def turn_off(self, **kwargs: Any) -> None: # noqa: ANN401, ARG002
|
||||
def turn_off(self, **kwargs: Any) -> None: # ruff:ignore[any-type, unused-method-argument]
|
||||
"""Midea X40 Fan turn off."""
|
||||
self._device.set_attribute(attr=X40Attributes.fan_speed, value=0)
|
||||
Reference in new issue
Block a user