From d0a7940c59804712bba79d9e02f4f50355e96819 Mon Sep 17 00:00:00 2001 From: Li Shuzhen Date: Sat, 5 Apr 2025 11:38:03 +0800 Subject: [PATCH] feat: support _attr_hvac_action of the climate entity (#956) --- custom_components/xiaomi_home/climate.py | 33 +++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/custom_components/xiaomi_home/climate.py b/custom_components/xiaomi_home/climate.py index 1bd5e72..5259de5 100644 --- a/custom_components/xiaomi_home/climate.py +++ b/custom_components/xiaomi_home/climate.py @@ -55,7 +55,7 @@ from homeassistant.const import UnitOfTemperature from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.components.climate import ( FAN_ON, FAN_OFF, SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL, - ATTR_TEMPERATURE, HVACMode, ClimateEntity, ClimateEntityFeature) + ATTR_TEMPERATURE, HVACMode, HVACAction, ClimateEntity, ClimateEntityFeature) from .miot.const import DOMAIN from .miot.miot_device import MIoTDevice, MIoTServiceEntity, MIoTEntityData @@ -473,6 +473,13 @@ class Heater(FeatureOnOff, FeatureTargetTemperature, FeatureTemperature, return (HVACMode.HEAT if self.get_prop_value( prop=self._prop_on) else HVACMode.OFF) + @property + def hvac_action(self) -> Optional[HVACAction]: + """The current hvac action.""" + if self.hvac_mode == HVACMode.HEAT: + return HVACAction.HEATING + return HVACAction.OFF + class AirConditioner(FeatureOnOff, FeatureTargetTemperature, FeatureTargetHumidity, FeatureTemperature, FeatureHumidity, @@ -562,6 +569,23 @@ class AirConditioner(FeatureOnOff, FeatureTargetTemperature, prop=self._prop_mode)) if self._prop_mode else None) + @property + def hvac_action(self) -> Optional[HVACAction]: + """The current hvac action.""" + if self.hvac_mode is None: + return None + if self.hvac_mode == HVACMode.OFF: + return HVACAction.OFF + if self.hvac_mode == HVACMode.FAN_ONLY: + return HVACAction.FAN + if self.hvac_mode == HVACMode.COOL: + return HVACAction.COOLING + if self.hvac_mode == HVACMode.HEAT: + return HVACAction.HEATING + if self.hvac_mode == HVACMode.DRY: + return HVACAction.DRYING + return HVACAction.IDLE + def __ac_state_changed(self, prop: MIoTSpecProperty, value: Any) -> None: del prop if not isinstance(value, str): @@ -730,3 +754,10 @@ class ElectricBlanket(FeatureOnOff, FeatureTargetTemperature, """The current hvac mode.""" return (HVACMode.HEAT if self.get_prop_value( prop=self._prop_on) else HVACMode.OFF) + + @property + def hvac_action(self) -> Optional[HVACAction]: + """The current hvac action.""" + if self.hvac_mode == HVACMode.OFF: + return HVACAction.OFF + return HVACAction.HEATING