Home Assistant Unofficial Reference 2024.12.1
atlantic_electrical_heater.py
Go to the documentation of this file.
1 """Support for Atlantic Electrical Heater."""
2 
3 from __future__ import annotations
4 
5 from typing import cast
6 
7 from pyoverkiz.enums import OverkizCommand, OverkizCommandParam, OverkizState
8 
10  PRESET_COMFORT,
11  PRESET_ECO,
12  PRESET_NONE,
13  ClimateEntity,
14  ClimateEntityFeature,
15  HVACMode,
16 )
17 from homeassistant.const import UnitOfTemperature
18 
19 from ..const import DOMAIN
20 from ..entity import OverkizEntity
21 
22 PRESET_COMFORT1 = "comfort-1"
23 PRESET_COMFORT2 = "comfort-2"
24 PRESET_FROST_PROTECTION = "frost_protection"
25 
26 OVERKIZ_TO_HVAC_MODES: dict[str, HVACMode] = {
27  OverkizCommandParam.ON: HVACMode.HEAT,
28  OverkizCommandParam.COMFORT: HVACMode.HEAT,
29  OverkizCommandParam.OFF: HVACMode.OFF,
30 }
31 HVAC_MODES_TO_OVERKIZ = {v: k for k, v in OVERKIZ_TO_HVAC_MODES.items()}
32 
33 OVERKIZ_TO_PRESET_MODES: dict[str, str] = {
34  OverkizCommandParam.OFF: PRESET_NONE,
35  OverkizCommandParam.FROSTPROTECTION: PRESET_FROST_PROTECTION,
36  OverkizCommandParam.ECO: PRESET_ECO,
37  OverkizCommandParam.COMFORT: PRESET_COMFORT,
38  OverkizCommandParam.COMFORT_1: PRESET_COMFORT1,
39  OverkizCommandParam.COMFORT_2: PRESET_COMFORT2,
40 }
41 
42 PRESET_MODES_TO_OVERKIZ = {v: k for k, v in OVERKIZ_TO_PRESET_MODES.items()}
43 
44 
46  """Representation of Atlantic Electrical Heater."""
47 
48  _attr_hvac_modes = [*HVAC_MODES_TO_OVERKIZ]
49  _attr_preset_modes = [*PRESET_MODES_TO_OVERKIZ]
50  _attr_supported_features = (
51  ClimateEntityFeature.PRESET_MODE
52  | ClimateEntityFeature.TURN_OFF
53  | ClimateEntityFeature.TURN_ON
54  )
55  _attr_temperature_unit = UnitOfTemperature.CELSIUS
56  _attr_translation_key = DOMAIN
57  _enable_turn_on_off_backwards_compatibility = False
58 
59  @property
60  def hvac_mode(self) -> HVACMode:
61  """Return hvac operation ie. heat, cool mode."""
62  return OVERKIZ_TO_HVAC_MODES[
63  cast(str, self.executorexecutor.select_state(OverkizState.CORE_ON_OFF))
64  ]
65 
66  async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
67  """Set new target hvac mode."""
68  await self.executorexecutor.async_execute_command(
69  OverkizCommand.SET_HEATING_LEVEL, HVAC_MODES_TO_OVERKIZ[hvac_mode]
70  )
71 
72  @property
73  def preset_mode(self) -> str | None:
74  """Return the current preset mode, e.g., home, away, temp."""
75  return OVERKIZ_TO_PRESET_MODES[
76  cast(str, self.executorexecutor.select_state(OverkizState.IO_TARGET_HEATING_LEVEL))
77  ]
78 
79  async def async_set_preset_mode(self, preset_mode: str) -> None:
80  """Set new preset mode."""
81  await self.executorexecutor.async_execute_command(
82  OverkizCommand.SET_HEATING_LEVEL, PRESET_MODES_TO_OVERKIZ[preset_mode]
83  )