This commit is contained in:
Home Assistant Version Control
2026-08-12 23:21:24 +00:00
parent 4517d1682f
commit f8ab9eda84
24 changed files with 625 additions and 468 deletions
+24 -14
View File
@@ -40,17 +40,17 @@ from homeassistant.const import (
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from midealocal.device import DeviceType
from midealocal.devices.ac import DeviceAttributes as ACAttributes
from midealocal.devices.ac import MideaACDevice
from midealocal.devices.c3 import DeviceAttributes as C3Attributes
from midealocal.devices.c3 import MideaC3Device
from midealocal.devices.cc import DeviceAttributes as CCAttributes
from midealocal.devices.cc import MideaCCDevice
from midealocal.devices.cf import DeviceAttributes as CFAttributes
from midealocal.devices.cf import MideaCFDevice
from midealocal.devices.fb import DeviceAttributes as FBAttributes
from midealocal.devices.fb import MideaFBDevice
from midealan.device import DeviceType
from midealan.devices.ac import DeviceAttributes as ACAttributes
from midealan.devices.ac import MideaACDevice
from midealan.devices.c3 import DeviceAttributes as C3Attributes
from midealan.devices.c3 import MideaC3Device
from midealan.devices.cc import DeviceAttributes as CCAttributes
from midealan.devices.cc import MideaCCDevice
from midealan.devices.cf import DeviceAttributes as CFAttributes
from midealan.devices.cf import MideaCFDevice
from midealan.devices.fb import DeviceAttributes as FBAttributes
from midealan.devices.fb import MideaFBDevice
from .const import DEVICES, DOMAIN, FanSpeed
from .midea_devices import MIDEA_DEVICES
@@ -146,7 +146,10 @@ class MideaClimate(MideaEntity, ClimateEntity):
"""Midea Climate hvac mode."""
if self._device.get_attribute("power"):
mode = cast("int", self._device.get_attribute("mode"))
return self.hvac_modes[mode]
# Guard against an out-of-range/undefined device mode so a malformed
# frame cannot raise IndexError on every state render.
if 0 <= mode < len(self.hvac_modes):
return self.hvac_modes[mode]
return HVACMode.OFF
@property
@@ -450,7 +453,10 @@ class MideaACClimate(MideaClimate):
"""Midea AC Climate hvac mode (device mode int -> fixed map)."""
if self._device.get_attribute("power"):
mode = cast("int", self._device.get_attribute("mode"))
return self._mode_index[mode]
# The AC `mode` field is a 3-bit value (0-7) but `_mode_index` only
# maps 0-5; guard so an out-of-spec 6/7 cannot raise IndexError.
if 0 <= mode < len(self._mode_index):
return self._mode_index[mode]
return HVACMode.OFF
def set_hvac_mode(self, hvac_mode: HVACMode) -> None:
@@ -814,7 +820,11 @@ class MideaC3Climate(MideaClimate):
def hvac_mode(self) -> HVACMode:
"""Midea C3 Climate hvac mode."""
mode = self._device.get_attribute(C3Attributes.mode)
if self._device.get_attribute(self._power_attr) and isinstance(mode, int):
if (
self._device.get_attribute(self._power_attr)
and isinstance(mode, int)
and 0 <= mode < len(self.hvac_modes)
):
return self.hvac_modes[mode]
return HVACMode.OFF