Home Assistant Unofficial Reference 2024.12.1
climate.py
Go to the documentation of this file.
1 """BleBox climate entity."""
2 
3 from datetime import timedelta
4 from typing import Any
5 
7 
9  ClimateEntity,
10  ClimateEntityFeature,
11  HVACAction,
12  HVACMode,
13 )
14 from homeassistant.const import ATTR_TEMPERATURE, UnitOfTemperature
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from . import BleBoxConfigEntry
19 from .entity import BleBoxEntity
20 
21 SCAN_INTERVAL = timedelta(seconds=5)
22 
23 BLEBOX_TO_HVACMODE = {
24  None: None,
25  0: HVACMode.OFF,
26  1: HVACMode.HEAT,
27  2: HVACMode.COOL,
28 }
29 
30 BLEBOX_TO_HVACACTION = {
31  0: HVACAction.IDLE,
32  1: HVACAction.HEATING,
33  2: HVACAction.COOLING,
34  3: HVACAction.IDLE,
35 }
36 
37 
39  hass: HomeAssistant,
40  config_entry: BleBoxConfigEntry,
41  async_add_entities: AddEntitiesCallback,
42 ) -> None:
43  """Set up a BleBox climate entity."""
44  entities = [
45  BleBoxClimateEntity(feature)
46  for feature in config_entry.runtime_data.features.get("climates", [])
47  ]
48  async_add_entities(entities, True)
49 
50 
51 class BleBoxClimateEntity(BleBoxEntity[blebox_uniapi.climate.Climate], ClimateEntity):
52  """Representation of a BleBox climate feature (saunaBox)."""
53 
54  _attr_supported_features = (
55  ClimateEntityFeature.TARGET_TEMPERATURE
56  | ClimateEntityFeature.TURN_OFF
57  | ClimateEntityFeature.TURN_ON
58  )
59  _attr_temperature_unit = UnitOfTemperature.CELSIUS
60  _enable_turn_on_off_backwards_compatibility = False
61 
62  @property
63  def hvac_modes(self):
64  """Return list of supported HVAC modes."""
65  return [HVACMode.OFF, BLEBOX_TO_HVACMODE[self._feature.mode]]
66 
67  @property
68  def hvac_mode(self):
69  """Return the desired HVAC mode."""
70  if self._feature.is_on is None:
71  return None
72  if not self._feature.is_on:
73  return HVACMode.OFF
74  if self._feature.mode is not None:
75  return BLEBOX_TO_HVACMODE[self._feature.mode]
76  return HVACMode.HEAT if self._feature.is_on else HVACMode.OFF
77 
78  @property
79  def hvac_action(self):
80  """Return the actual current HVAC action."""
81  if self._feature.hvac_action is not None:
82  if not self._feature.is_on:
83  return HVACAction.OFF
84  return BLEBOX_TO_HVACACTION[self._feature.hvac_action]
85  if not (is_on := self._feature.is_on):
86  return None if is_on is None else HVACAction.OFF
87 
88  # NOTE: In practice, there's no need to handle case when is_heating is None
89  return HVACAction.HEATING if self._feature.is_heating else HVACAction.IDLE
90 
91  @property
92  def max_temp(self):
93  """Return the maximum temperature supported."""
94  return self._feature.max_temp
95 
96  @property
97  def min_temp(self):
98  """Return the maximum temperature supported."""
99  return self._feature.min_temp
100 
101  @property
103  """Return the current temperature."""
104  return self._feature.current
105 
106  @property
108  """Return the desired thermostat temperature."""
109  return self._feature.desired
110 
111  async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
112  """Set the climate entity mode."""
113  if hvac_mode in [HVACMode.HEAT, HVACMode.COOL]:
114  await self._feature.async_on()
115  return
116 
117  await self._feature.async_off()
118 
119  async def async_set_temperature(self, **kwargs: Any) -> None:
120  """Set the thermostat temperature."""
121  value = kwargs[ATTR_TEMPERATURE]
122  await self._feature.async_set_temperature(value)
None async_set_hvac_mode(self, HVACMode hvac_mode)
Definition: climate.py:111
None async_setup_entry(HomeAssistant hass, BleBoxConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: climate.py:42