developers.home-assistant/docs/core/entity/climate.md

13 KiB

title sidebar_label
Climate entity Climate

A climate entity controls temperature, humidity, or fans, such as A/C systems and humidifiers. Derive a platform entity from homeassistant.components.climate.ClimateEntity

Properties

:::tip Properties should always only return information from memory and not do I/O (like network requests). Implement update() or async_update() to fetch data. :::

Name Type Default Description
current_humidity float | None None The current humidity.
current_temperature float | None None The current temperature.
fan_mode str | None Required by SUPPORT_FAN_MODE The current fan mode.
fan_modes list[str] | None Required by SUPPORT_FAN_MODE The list of available fan modes.
hvac_action HVACAction | None None The current HVAC action (heating, cooling)
hvac_mode HVACMode | None Required The current operation (e.g. heat, cool, idle). Used to determine state.
hvac_modes list[HVACMode] Required List of available operation modes. See below.
max_humidity float DEFAULT_MAX_HUMIDITY (value == 99) The maximum humidity.
max_temp float DEFAULT_MAX_TEMP (value == 35 °C) The maximum temperature in temperature_unit.
min_humidity float DEFAULT_MIN_HUMIDITY (value == 30) The minimum humidity.
min_temp float DEFAULT_MIN_TEMP (value == 7 °C) The minimum temperature in temperature_unit.
precision float According to temperature_unit The precision of the temperature in the system. Defaults to tenths for TEMP_CELSIUS, whole number otherwise.
preset_mode str | None Required by SUPPORT_PRESET_MODE The current active preset.
preset_modes list[str] | None Required by SUPPORT_PRESET_MODE The available presets.
swing_mode str | None Required by SUPPORT_SWING_MODE The swing setting.
swing_modes list[str] | None Required by SUPPORT_SWING_MODE Returns the list of available swing modes.
target_humidity float | None None The target humidity the device is trying to reach.
target_temperature float | None None The temperature currently set to be reached.
target_temperature_high float | None Required by TARGET_TEMPERATURE_RANGE The upper bound target temperature
target_temperature_low float | None Required by TARGET_TEMPERATURE_RANGE The lower bound target temperature
target_temperature_step float | None None The supported step size a target temperature can be increased or decreased
temperature_unit str Required The unit of temperature measurement for the system (TEMP_CELSIUS or TEMP_FAHRENHEIT).

HVAC modes

You are only allowed to use the built-in HVAC modes, provided by the HVACMode enum. If you want another mode, add a preset instead.

Name Description
HVACMode.OFF The device is turned off.
HVACMode.HEAT The device is set to heat to a target temperature.
HVACMode.COOL The device is set to cool to a target temperature.
HVACMode.HEAT_COOL The device is set to heat/cool to a target temperature range.
HVACMode.AUTO The device is set to a schedule, learned behavior, AI.
HVACMode.DRY The device is set to dry/humidity mode.
HVACMode.FAN_ONLY The device only has the fan on. No heating or cooling taking place.

HVAC action

The HVAC action describes the current action. This is different from the mode, because if a device is set to heat, and the target temperature is already achieved, the device will not be actively heating anymore. It is only allowed to use the built-in HVAC actions, provided by the HVACAction enum.

Name Description
HVACAction.OFF Device is turned off.
HVACAction.PREHEATING Device is preheating.
HVACAction.HEATING Device is heating.
HVACAction.COOLING Device is cooling.
HVACAction.DRYING Device is drying.
HVACAction.FAN Device has fan on.
HVACAction.IDLE Device is idle.
HVACAction.DEFROSTING Device is defrosting.

Presets

A device can have different presets that it might want to show to the user. Common presets are "Away" or "Eco". There are a couple of built-in presets that will offer translations, but you're also allowed to add custom presets.

Name Description
NONE No preset is active
ECO Device is running an energy-saving mode
AWAY Device is in away mode
BOOST Device turn all valve full up
COMFORT Device is in comfort mode
HOME Device is in home mode
SLEEP Device is prepared for sleep
ACTIVITY Device is reacting to activity (e.g. movement sensors)

Fan modes

A device's fan can have different states. There are a couple of built-in fan modes, but you're also allowed to use custom fan modes.

Name
FAN_ON
FAN_OFF
FAN_AUTO
FAN_LOW
FAN_MEDIUM
FAN_HIGH
FAN_MIDDLE
FAN_FOCUS
FAN_DIFFUSE

Swing modes

The device fan can have different swing modes that it wants the user to know about/control.

Name Description
SWING_OFF The fan is not swinging.
SWING_ON The fan is swinging.
SWING_VERTICAL The fan is swinging vertical.
SWING_HORIZONTAL The fan is swinging horizontal.
SWING_BOTH The fan is swinging both horizontal and vertical.

Supported features

Supported features are defined by using values in the ClimateEntityFeature enum and are combined using the bitwise or (|) operator.

Value Description
TARGET_TEMPERATURE The device supports a target temperature.
TARGET_TEMPERATURE_RANGE The device supports a ranged target temperature. Used for HVAC modes heat_cool and auto
TARGET_HUMIDITY The device supports a target humidity.
FAN_MODE The device supports fan modes.
PRESET_MODE The device supports presets.
SWING_MODE The device supports swing modes.
TURN_ON The device supports turn on.
TURN_OFF The device supports turn off.

Methods

Set HVAC mode

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.

    def set_hvac_mode(self, hvac_mode):
        """Set new target hvac mode."""

    async def async_set_hvac_mode(self, hvac_mode):
        """Set new target hvac mode."""

Turn on

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.
    # The `turn_on` method should set `hvac_mode` to any other than
    # `HVACMode.OFF` by optimistically setting it from the service action
    # handler or with the next state update

    def turn_on(self):
        """Turn the entity on."""

    async def async_turn_on(self):
        """Turn the entity on."""

Turn off

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.
    # The `turn_off` method should set `hvac_mode` to `HVACMode.OFF` by
    # optimistically setting it from the service action handler or with the
    # next state update

    def turn_off(self):
        """Turn the entity off."""

    async def async_turn_off(self):
        """Turn the entity off."""

Toggle

class MyClimateEntity(ClimateEntity):
    # It's not mandatory to implement the `toggle` method as the base implementation
    # will call `turn_on`/`turn_off` according to the current HVAC mode.

    # If implemented, the `toggle` method should set `hvac_mode` to the right `HVACMode` by
    # optimistically setting it from the service action handler
    # or with the next state update.

    def toggle(self):
        """Toggle the entity."""

    async def async_toggle(self):
        """Toggle the entity."""

Set preset mode

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.

    def set_preset_mode(self, preset_mode):
        """Set new target preset mode."""

    async def async_set_preset_mode(self, preset_mode):
        """Set new target preset mode."""

Set fan mode

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.

    def set_fan_mode(self, fan_mode):
        """Set new target fan mode."""

    async def async_set_fan_mode(self, fan_mode):
        """Set new target fan mode."""

Set humidity

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.

    def set_humidity(self, humidity):
        """Set new target humidity."""

    async def async_set_humidity(self, humidity):
        """Set new target humidity."""

Set swing mode

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.

    def set_swing_mode(self, swing_mode):
        """Set new target swing operation."""

    async def async_set_swing_mode(self, swing_mode):
        """Set new target swing operation."""

Set temperature

:::note ClimateEntity has built-in validation to ensure that the target_temperature_low argument is lower than or equal to the target_temperature_high argument. Therefore, integrations do not need to validate this in their own implementation. :::

class MyClimateEntity(ClimateEntity):
    # Implement one of these methods.

    def set_temperature(self, **kwargs):
        """Set new target temperature."""

    async def async_set_temperature(self, **kwargs):
        """Set new target temperature."""