1 """Provides functionality to interact with climate devices."""
3 from __future__
import annotations
6 from datetime
import timedelta
9 from typing
import Any, Literal, final
11 from propcache
import cached_property
12 import voluptuous
as vol
30 all_with_deprecated_constants,
31 check_if_deprecated_constant,
32 dir_with_deprecated_constants,
44 _DEPRECATED_HVAC_MODE_AUTO,
45 _DEPRECATED_HVAC_MODE_COOL,
46 _DEPRECATED_HVAC_MODE_DRY,
47 _DEPRECATED_HVAC_MODE_FAN_ONLY,
48 _DEPRECATED_HVAC_MODE_HEAT,
49 _DEPRECATED_HVAC_MODE_HEAT_COOL,
50 _DEPRECATED_HVAC_MODE_OFF,
51 _DEPRECATED_SUPPORT_AUX_HEAT,
52 _DEPRECATED_SUPPORT_FAN_MODE,
53 _DEPRECATED_SUPPORT_PRESET_MODE,
54 _DEPRECATED_SUPPORT_SWING_MODE,
55 _DEPRECATED_SUPPORT_TARGET_HUMIDITY,
56 _DEPRECATED_SUPPORT_TARGET_TEMPERATURE,
57 _DEPRECATED_SUPPORT_TARGET_TEMPERATURE_RANGE,
59 ATTR_CURRENT_HUMIDITY,
60 ATTR_CURRENT_TEMPERATURE,
73 ATTR_SWING_HORIZONTAL_MODE,
74 ATTR_SWING_HORIZONTAL_MODES,
77 ATTR_TARGET_TEMP_HIGH,
79 ATTR_TARGET_TEMP_STEP,
92 INTENT_GET_TEMPERATURE,
101 SERVICE_SET_AUX_HEAT,
102 SERVICE_SET_FAN_MODE,
103 SERVICE_SET_HUMIDITY,
104 SERVICE_SET_HVAC_MODE,
105 SERVICE_SET_PRESET_MODE,
106 SERVICE_SET_SWING_HORIZONTAL_MODE,
107 SERVICE_SET_SWING_MODE,
108 SERVICE_SET_TEMPERATURE,
114 ClimateEntityFeature,
119 _LOGGER = logging.getLogger(__name__)
121 DATA_COMPONENT: HassKey[EntityComponent[ClimateEntity]] =
HassKey(DOMAIN)
122 ENTITY_ID_FORMAT = DOMAIN +
".{}"
123 PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA
124 PLATFORM_SCHEMA_BASE = cv.PLATFORM_SCHEMA_BASE
128 DEFAULT_MAX_TEMP = 35
129 DEFAULT_MIN_HUMIDITY = 30
130 DEFAULT_MAX_HUMIDITY = 99
132 CONVERTIBLE_ATTRIBUTE = [ATTR_TEMPERATURE, ATTR_TARGET_TEMP_LOW, ATTR_TARGET_TEMP_HIGH]
135 CHECK_TURN_ON_OFF_FEATURE_FLAG = (
136 ClimateEntityFeature.TURN_ON | ClimateEntityFeature.TURN_OFF
139 SET_TEMPERATURE_SCHEMA = vol.All(
140 cv.has_at_least_one_key(
141 ATTR_TEMPERATURE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW
143 cv.make_entity_service_schema(
145 vol.Exclusive(ATTR_TEMPERATURE,
"temperature"): vol.Coerce(float),
146 vol.Inclusive(ATTR_TARGET_TEMP_HIGH,
"temperature"): vol.Coerce(float),
147 vol.Inclusive(ATTR_TARGET_TEMP_LOW,
"temperature"): vol.Coerce(float),
148 vol.Optional(ATTR_HVAC_MODE): vol.Coerce(HVACMode),
156 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
157 """Set up climate entities."""
158 component = hass.data[DATA_COMPONENT] = EntityComponent[ClimateEntity](
159 _LOGGER, DOMAIN, hass, SCAN_INTERVAL
161 await component.async_setup(config)
163 component.async_register_entity_service(
167 [ClimateEntityFeature.TURN_ON],
169 component.async_register_entity_service(
173 [ClimateEntityFeature.TURN_OFF],
175 component.async_register_entity_service(
179 [ClimateEntityFeature.TURN_OFF, ClimateEntityFeature.TURN_ON],
181 component.async_register_entity_service(
182 SERVICE_SET_HVAC_MODE,
183 {vol.Required(ATTR_HVAC_MODE): vol.Coerce(HVACMode)},
184 "async_handle_set_hvac_mode_service",
186 component.async_register_entity_service(
187 SERVICE_SET_PRESET_MODE,
188 {vol.Required(ATTR_PRESET_MODE): cv.string},
189 "async_handle_set_preset_mode_service",
190 [ClimateEntityFeature.PRESET_MODE],
192 component.async_register_entity_service(
193 SERVICE_SET_AUX_HEAT,
194 {vol.Required(ATTR_AUX_HEAT): cv.boolean},
195 async_service_aux_heat,
196 [ClimateEntityFeature.AUX_HEAT],
198 component.async_register_entity_service(
199 SERVICE_SET_TEMPERATURE,
200 SET_TEMPERATURE_SCHEMA,
201 async_service_temperature_set,
203 ClimateEntityFeature.TARGET_TEMPERATURE,
204 ClimateEntityFeature.TARGET_TEMPERATURE_RANGE,
207 component.async_register_entity_service(
208 SERVICE_SET_HUMIDITY,
209 {vol.Required(ATTR_HUMIDITY): vol.Coerce(int)},
210 async_service_humidity_set,
211 [ClimateEntityFeature.TARGET_HUMIDITY],
213 component.async_register_entity_service(
214 SERVICE_SET_FAN_MODE,
215 {vol.Required(ATTR_FAN_MODE): cv.string},
216 "async_handle_set_fan_mode_service",
217 [ClimateEntityFeature.FAN_MODE],
219 component.async_register_entity_service(
220 SERVICE_SET_SWING_MODE,
221 {vol.Required(ATTR_SWING_MODE): cv.string},
222 "async_handle_set_swing_mode_service",
223 [ClimateEntityFeature.SWING_MODE],
225 component.async_register_entity_service(
226 SERVICE_SET_SWING_HORIZONTAL_MODE,
227 {vol.Required(ATTR_SWING_HORIZONTAL_MODE): cv.string},
228 "async_handle_set_swing_horizontal_mode_service",
229 [ClimateEntityFeature.SWING_HORIZONTAL_MODE],
236 """Set up a config entry."""
241 """Unload a config entry."""
246 """A class that describes climate entities."""
249 CACHED_PROPERTIES_WITH_ATTR_ = {
256 "current_temperature",
257 "target_temperature",
258 "target_temperature_step",
259 "target_temperature_high",
260 "target_temperature_low",
268 "swing_horizontal_mode",
269 "swing_horizontal_modes",
270 "supported_features",
279 """Base class for climate entities."""
281 _entity_component_unrecorded_attributes = frozenset(
290 ATTR_TARGET_TEMP_STEP,
295 entity_description: ClimateEntityDescription
296 _attr_current_humidity: int |
None =
None
297 _attr_current_temperature: float |
None =
None
298 _attr_fan_mode: str |
None
299 _attr_fan_modes: list[str] |
None
300 _attr_hvac_action: HVACAction |
None =
None
301 _attr_hvac_mode: HVACMode |
None
302 _attr_hvac_modes: list[HVACMode]
303 _attr_is_aux_heat: bool |
None
304 _attr_max_humidity: float = DEFAULT_MAX_HUMIDITY
305 _attr_max_temp: float
306 _attr_min_humidity: float = DEFAULT_MIN_HUMIDITY
307 _attr_min_temp: float
308 _attr_precision: float
309 _attr_preset_mode: str |
None
310 _attr_preset_modes: list[str] |
None
312 _attr_swing_mode: str |
None
313 _attr_swing_modes: list[str] |
None
314 _attr_swing_horizontal_mode: str |
None
315 _attr_swing_horizontal_modes: list[str] |
None
316 _attr_target_humidity: float |
None =
None
317 _attr_target_temperature_high: float |
None
318 _attr_target_temperature_low: float |
None
319 _attr_target_temperature_step: float |
None =
None
320 _attr_target_temperature: float |
None =
None
321 _attr_temperature_unit: str
323 __climate_reported_legacy_aux =
False
328 _enable_turn_on_off_backwards_compatibility: bool =
True
333 Modify return of `supported_features` to
334 include `_mod_supported_features` if attribute is set.
336 if name !=
"supported_features":
345 "_ClimateEntity__mod_supported_features"
347 if type(_supported_features)
is int:
351 _features = _supported_features
353 if not _mod_supported_features:
358 return _features | _mod_supported_features
364 platform: EntityPlatform,
365 parallel_updates: asyncio.Semaphore |
None,
367 """Start adding an entity to a platform."""
370 def _report_turn_on_off(feature: str, method: str) ->
None:
371 """Log warning not implemented turn on/off feature."""
373 if feature.startswith(
"TURN"):
375 "Entity %s (%s) does not set ClimateEntityFeature.%s"
376 " but implements the %s method. Please %s"
380 "Entity %s (%s) implements HVACMode(s): %s and therefore implicitly"
381 " supports the %s methods without setting the proper"
382 " ClimateEntityFeature. Please %s"
395 if self._enable_turn_on_off_backwards_compatibility
is False:
400 if supported_features & CHECK_TURN_ON_OFF_FEATURE_FLAG:
405 if not supported_features & ClimateEntityFeature.TURN_OFF
and (
406 type(self).async_turn_off
is not ClimateEntity.async_turn_off
407 or type(self).turn_off
is not ClimateEntity.turn_off
410 _report_turn_on_off(
"TURN_OFF",
"turn_off")
411 self.__mod_supported_features |= (
412 ClimateEntityFeature.TURN_OFF
415 if not supported_features & ClimateEntityFeature.TURN_ON
and (
416 type(self).async_turn_on
is not ClimateEntity.async_turn_on
417 or type(self).turn_on
is not ClimateEntity.turn_on
420 _report_turn_on_off(
"TURN_ON",
"turn_on")
421 self.__mod_supported_features |= (
422 ClimateEntityFeature.TURN_ON
425 if (modes := self.
hvac_modeshvac_modes)
and len(modes) >= 2
and HVACMode.OFF
in modes:
428 _modes = [_mode
for _mode
in modes
if _mode
is not None]
429 _report_turn_on_off(
", ".join(_modes
or []),
"turn_on/turn_off")
430 self.__mod_supported_features |= (
431 ClimateEntityFeature.TURN_ON | ClimateEntityFeature.TURN_OFF
435 """Log warning and create an issue if the entity implements legacy auxiliary heater."""
439 integration_domain=self.
platformplatform.platform_name,
440 module=type(self).__module__,
444 "%s::%s implements the `is_aux_heat` property or uses the auxiliary "
445 "heater methods in a subclass of ClimateEntity which is "
446 "deprecated and will be unsupported from Home Assistant 2025.4."
449 self.
platformplatform.platform_name,
450 self.__class__.__name__,
454 translation_placeholders = {
"platform": self.
platformplatform.platform_name}
455 translation_key =
"deprecated_climate_aux_no_url"
458 integration_domain=self.
platformplatform.platform_name,
459 module=type(self).__module__,
462 translation_placeholders[
"issue_tracker"] = issue_tracker
463 translation_key =
"deprecated_climate_aux_url_custom"
464 ir.async_create_issue(
467 f
"deprecated_climate_aux_{self.platform.platform_name}",
468 breaks_in_ha_version=
"2025.4.0",
471 issue_domain=self.
platformplatform.platform_name,
472 severity=ir.IssueSeverity.WARNING,
473 translation_key=translation_key,
474 translation_placeholders=translation_placeholders,
481 """Return the current state."""
483 if hvac_mode
is None:
486 if not isinstance(hvac_mode, HVACMode):
487 return HVACMode(hvac_mode).value
488 return hvac_mode.value
492 """Return the precision of the system."""
493 if hasattr(self,
"_attr_precision"):
494 return self._attr_precision
495 if self.
hasshass.config.units.temperature_unit == UnitOfTemperature.CELSIUS:
496 return PRECISION_TENTHS
497 return PRECISION_WHOLE
501 """Return the capability attributes."""
507 data: dict[str, Any] = {
509 ATTR_MIN_TEMP: show_temp(hass, self.
min_tempmin_temp, temperature_unit, precision),
510 ATTR_MAX_TEMP: show_temp(hass, self.
max_tempmax_temp, temperature_unit, precision),
514 data[ATTR_TARGET_TEMP_STEP] = target_temperature_step
516 if ClimateEntityFeature.TARGET_HUMIDITY
in supported_features:
520 if ClimateEntityFeature.FAN_MODE
in supported_features:
521 data[ATTR_FAN_MODES] = self.
fan_modesfan_modes
523 if ClimateEntityFeature.PRESET_MODE
in supported_features:
526 if ClimateEntityFeature.SWING_MODE
in supported_features:
527 data[ATTR_SWING_MODES] = self.
swing_modesswing_modes
529 if ClimateEntityFeature.SWING_HORIZONTAL_MODE
in supported_features:
537 """Return the optional state attributes."""
543 data: dict[str, str | float |
None] = {
544 ATTR_CURRENT_TEMPERATURE: show_temp(
549 if ClimateEntityFeature.TARGET_TEMPERATURE
in supported_features:
550 data[ATTR_TEMPERATURE] = show_temp(
557 if ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
in supported_features:
558 data[ATTR_TARGET_TEMP_HIGH] = show_temp(
561 data[ATTR_TARGET_TEMP_LOW] = show_temp(
566 data[ATTR_CURRENT_HUMIDITY] = current_humidity
568 if ClimateEntityFeature.TARGET_HUMIDITY
in supported_features:
571 if ClimateEntityFeature.FAN_MODE
in supported_features:
572 data[ATTR_FAN_MODE] = self.
fan_modefan_mode
575 data[ATTR_HVAC_ACTION] = hvac_action
577 if ClimateEntityFeature.PRESET_MODE
in supported_features:
578 data[ATTR_PRESET_MODE] = self.
preset_modepreset_mode
580 if ClimateEntityFeature.SWING_MODE
in supported_features:
581 data[ATTR_SWING_MODE] = self.
swing_modeswing_mode
583 if ClimateEntityFeature.SWING_HORIZONTAL_MODE
in supported_features:
586 if ClimateEntityFeature.AUX_HEAT
in supported_features:
587 data[ATTR_AUX_HEAT] = STATE_ON
if self.
is_aux_heatis_aux_heat
else STATE_OFF
590 and "custom_components" in type(self).__module__
598 """Return the unit of measurement used by the platform."""
599 return self._attr_temperature_unit
603 """Return the current humidity."""
604 return self._attr_current_humidity
608 """Return the humidity we try to reach."""
609 return self._attr_target_humidity
613 """Return hvac operation ie. heat, cool mode."""
614 return self._attr_hvac_mode
618 """Return the list of available hvac operation modes."""
619 return self._attr_hvac_modes
623 """Return the current running hvac operation if supported."""
624 return self._attr_hvac_action
628 """Return the current temperature."""
629 return self._attr_current_temperature
633 """Return the temperature we try to reach."""
634 return self._attr_target_temperature
638 """Return the supported step of target temperature."""
639 return self._attr_target_temperature_step
643 """Return the highbound target temperature we try to reach.
645 Requires ClimateEntityFeature.TARGET_TEMPERATURE_RANGE.
647 return self._attr_target_temperature_high
651 """Return the lowbound target temperature we try to reach.
653 Requires ClimateEntityFeature.TARGET_TEMPERATURE_RANGE.
655 return self._attr_target_temperature_low
659 """Return the current preset mode, e.g., home, away, temp.
661 Requires ClimateEntityFeature.PRESET_MODE.
663 return self._attr_preset_mode
667 """Return a list of available preset modes.
669 Requires ClimateEntityFeature.PRESET_MODE.
671 return self._attr_preset_modes
675 """Return true if aux heater.
677 Requires ClimateEntityFeature.AUX_HEAT.
679 return self._attr_is_aux_heat
683 """Return the fan setting.
685 Requires ClimateEntityFeature.FAN_MODE.
687 return self._attr_fan_mode
691 """Return the list of available fan modes.
693 Requires ClimateEntityFeature.FAN_MODE.
695 return self._attr_fan_modes
699 """Return the swing setting.
701 Requires ClimateEntityFeature.SWING_MODE.
703 return self._attr_swing_mode
707 """Return the list of available swing modes.
709 Requires ClimateEntityFeature.SWING_MODE.
711 return self._attr_swing_modes
715 """Return the horizontal swing setting.
717 Requires ClimateEntityFeature.SWING_HORIZONTAL_MODE.
719 return self._attr_swing_horizontal_mode
723 """Return the list of available horizontal swing modes.
725 Requires ClimateEntityFeature.SWING_HORIZONTAL_MODE.
727 return self._attr_swing_horizontal_modes
733 mode_type: Literal[
"preset",
"horizontal_swing",
"swing",
"fan",
"hvac"],
734 mode: str | HVACMode,
735 modes: list[str] | list[HVACMode] |
None,
737 """Raise ServiceValidationError on invalid modes."""
738 if modes
and mode
in modes:
740 modes_str: str =
", ".join(modes)
if modes
else ""
741 translation_key = f
"not_valid_{mode_type}_mode"
742 if mode_type ==
"hvac":
745 integration_domain=self.
platformplatform.platform_name,
746 module=type(self).__module__,
750 "%s::%s sets the hvac_mode %s which is not "
751 "valid for this entity with modes: %s. "
752 "This will stop working in 2025.4 and raise an error instead. "
755 self.
platformplatform.platform_name,
756 self.__class__.__name__,
763 translation_domain=DOMAIN,
764 translation_key=translation_key,
765 translation_placeholders={
772 """Set new target temperature."""
773 raise NotImplementedError
776 """Set new target temperature."""
777 await self.
hasshass.async_add_executor_job(
782 """Set new target humidity."""
783 raise NotImplementedError
786 """Set new target humidity."""
787 await self.
hasshass.async_add_executor_job(self.
set_humidityset_humidity, humidity)
791 """Validate and set new preset mode."""
796 """Set new target fan mode."""
797 raise NotImplementedError
800 """Set new target fan mode."""
801 await self.
hasshass.async_add_executor_job(self.
set_fan_modeset_fan_mode, fan_mode)
805 """Validate and set new preset mode."""
810 """Set new target hvac mode."""
811 raise NotImplementedError
814 """Set new target hvac mode."""
815 await self.
hasshass.async_add_executor_job(self.
set_hvac_modeset_hvac_mode, hvac_mode)
819 """Validate and set new preset mode."""
824 """Set new target swing operation."""
825 raise NotImplementedError
828 """Set new target swing operation."""
829 await self.
hasshass.async_add_executor_job(self.
set_swing_modeset_swing_mode, swing_mode)
833 self, swing_horizontal_mode: str
835 """Validate and set new horizontal swing mode."""
842 """Set new target horizontal swing operation."""
843 raise NotImplementedError
846 """Set new target horizontal swing operation."""
847 await self.
hasshass.async_add_executor_job(
853 """Validate and set new preset mode."""
858 """Set new preset mode."""
859 raise NotImplementedError
862 """Set new preset mode."""
863 await self.
hasshass.async_add_executor_job(self.
set_preset_modeset_preset_mode, preset_mode)
866 """Turn auxiliary heater on."""
867 raise NotImplementedError
870 """Turn auxiliary heater on."""
874 """Turn auxiliary heater off."""
875 raise NotImplementedError
878 """Turn auxiliary heater off."""
882 """Turn the entity on."""
883 raise NotImplementedError
886 """Turn the entity on."""
888 if type(self).turn_on
is not ClimateEntity.turn_on:
889 await self.
hasshass.async_add_executor_job(self.
turn_onturn_on)
896 if mode != HVACMode.OFF:
901 for mode
in (HVACMode.HEAT_COOL, HVACMode.HEAT, HVACMode.COOL):
907 raise NotImplementedError
910 """Turn the entity off."""
911 raise NotImplementedError
914 """Turn the entity off."""
916 if type(self).turn_off
is not ClimateEntity.turn_off:
917 await self.
hasshass.async_add_executor_job(self.
turn_offturn_off)
925 raise NotImplementedError
928 """Toggle the entity."""
929 raise NotImplementedError
932 """Toggle the entity."""
934 if type(self).toggle
is not ClimateEntity.toggle:
935 await self.
hasshass.async_add_executor_job(self.
toggletoggle)
946 """Return the list of supported features."""
947 return self._attr_supported_features
951 """Return the minimum temperature."""
952 if not hasattr(self,
"_attr_min_temp"):
953 return TemperatureConverter.convert(
954 DEFAULT_MIN_TEMP, UnitOfTemperature.CELSIUS, self.
temperature_unittemperature_unit
956 return self._attr_min_temp
960 """Return the maximum temperature."""
961 if not hasattr(self,
"_attr_max_temp"):
962 return TemperatureConverter.convert(
963 DEFAULT_MAX_TEMP, UnitOfTemperature.CELSIUS, self.
temperature_unittemperature_unit
965 return self._attr_max_temp
969 """Return the minimum humidity."""
970 return self._attr_min_humidity
974 """Return the maximum humidity."""
975 return self._attr_max_humidity
979 entity: ClimateEntity, service_call: ServiceCall
981 """Handle aux heat service."""
982 if service_call.data[ATTR_AUX_HEAT]:
983 await entity.async_turn_aux_heat_on()
985 await entity.async_turn_aux_heat_off()
989 entity: ClimateEntity, service_call: ServiceCall
991 """Handle set humidity service."""
992 humidity = service_call.data[ATTR_HUMIDITY]
993 min_humidity = entity.min_humidity
994 max_humidity = entity.max_humidity
996 "Check valid humidity %d in range %d - %d",
1001 if humidity < min_humidity
or humidity > max_humidity:
1003 translation_domain=DOMAIN,
1004 translation_key=
"humidity_out_of_range",
1005 translation_placeholders={
1006 "humidity":
str(humidity),
1007 "min_humidity":
str(min_humidity),
1008 "max_humidity":
str(max_humidity),
1012 await entity.async_set_humidity(humidity)
1016 entity: ClimateEntity, service_call: ServiceCall
1018 """Handle set temperature service."""
1020 ATTR_TEMPERATURE
in service_call.data
1021 and not entity.supported_features & ClimateEntityFeature.TARGET_TEMPERATURE
1024 translation_domain=DOMAIN,
1025 translation_key=
"missing_target_temperature_entity_feature",
1028 ATTR_TARGET_TEMP_LOW
in service_call.data
1029 and not entity.supported_features
1030 & ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
1033 translation_domain=DOMAIN,
1034 translation_key=
"missing_target_temperature_range_entity_feature",
1038 kwargs: dict[str, Any] = {}
1039 min_temp = entity.min_temp
1040 max_temp = entity.max_temp
1041 temp_unit = entity.temperature_unit
1044 (target_low_temp := service_call.data.get(ATTR_TARGET_TEMP_LOW))
1045 and (target_high_temp := service_call.data.get(ATTR_TARGET_TEMP_HIGH))
1046 and target_low_temp > target_high_temp
1050 translation_domain=DOMAIN,
1051 translation_key=
"low_temp_higher_than_high_temp",
1054 for value, temp
in service_call.data.items():
1055 if value
in CONVERTIBLE_ATTRIBUTE:
1056 kwargs[value] = check_temp = TemperatureConverter.convert(
1057 temp, hass.config.units.temperature_unit, temp_unit
1061 "Check valid temperature %d %s (%d %s) in range %d %s - %d %s",
1063 entity.temperature_unit,
1065 hass.config.units.temperature_unit,
1071 if check_temp < min_temp
or check_temp > max_temp:
1073 translation_domain=DOMAIN,
1074 translation_key=
"temp_out_of_range",
1075 translation_placeholders={
1076 "check_temp":
str(check_temp),
1077 "min_temp":
str(min_temp),
1078 "max_temp":
str(max_temp),
1082 kwargs[value] = temp
1084 await entity.async_set_temperature(**kwargs)
1090 __getattr__ = ft.partial(check_if_deprecated_constant, module_globals=globals())
1091 __dir__ = ft.partial(
1092 dir_with_deprecated_constants, module_globals_keys=[*globals().keys()]
str|None swing_horizontal_mode(self)
dict[str, Any] state_attributes(self)
None async_turn_aux_heat_on(self)
None set_swing_mode(self, str swing_mode)
None async_set_preset_mode(self, str preset_mode)
None set_fan_mode(self, str fan_mode)
None set_hvac_mode(self, HVACMode hvac_mode)
__climate_reported_legacy_aux
None async_set_fan_mode(self, str fan_mode)
list[str]|None fan_modes(self)
None set_temperature(self, **Any kwargs)
float|None target_humidity(self)
None async_set_humidity(self, int humidity)
None async_set_temperature(self, **Any kwargs)
None async_handle_set_swing_horizontal_mode_service(self, str swing_horizontal_mode)
None async_handle_set_swing_mode_service(self, str swing_mode)
str|None swing_mode(self)
None set_swing_horizontal_mode(self, str swing_horizontal_mode)
float|None target_temperature_low(self)
float|None current_humidity(self)
list[str]|None swing_horizontal_modes(self)
None set_humidity(self, int humidity)
None add_to_platform_start(self, HomeAssistant hass, EntityPlatform platform, asyncio.Semaphore|None parallel_updates)
str temperature_unit(self)
None turn_aux_heat_off(self)
Any __getattribute__(self, str name)
None async_set_swing_mode(self, str swing_mode)
ClimateEntityFeature supported_features(self)
None async_turn_aux_heat_off(self)
bool|None is_aux_heat(self)
None _valid_mode_or_raise(self, Literal["preset", "horizontal_swing", "swing", "fan", "hvac"] mode_type, str|HVACMode mode, list[str]|list[HVACMode]|None modes)
None async_handle_set_hvac_mode_service(self, HVACMode hvac_mode)
float|None target_temperature_high(self)
None async_set_hvac_mode(self, HVACMode hvac_mode)
float|None target_temperature(self)
None async_handle_set_preset_mode_service(self, str preset_mode)
None _report_legacy_aux(self)
HVACAction|None hvac_action(self)
None async_handle_set_fan_mode_service(self, str fan_mode)
HVACMode|None hvac_mode(self)
None turn_aux_heat_on(self)
None async_turn_off(self)
None async_set_swing_horizontal_mode(self, str swing_horizontal_mode)
list[str]|None preset_modes(self)
float|None current_temperature(self)
dict[str, Any]|None capability_attributes(self)
list[str]|None swing_modes(self)
None set_preset_mode(self, str preset_mode)
list[HVACMode] hvac_modes(self)
float|None target_temperature_step(self)
str|None preset_mode(self)
None _report_deprecated_supported_features_values(self, IntFlag replacement)
str _suggest_report_issue(self)
int|None supported_features(self)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
None async_service_temperature_set(ClimateEntity entity, ServiceCall service_call)
None async_service_aux_heat(ClimateEntity entity, ServiceCall service_call)
None async_service_humidity_set(ClimateEntity entity, ServiceCall service_call)
bool async_setup(HomeAssistant hass, ConfigType config)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
list[str] all_with_deprecated_constants(dict[str, Any] module_globals)
str|None async_get_issue_tracker(HomeAssistant|None hass, *Integration|None integration=None, str|None integration_domain=None, str|None module=None)
str async_suggest_report_issue(HomeAssistant|None hass, *Integration|None integration=None, str|None integration_domain=None, str|None module=None)