1 """Support for Atlantic Electrical Towel Dryer."""
3 from __future__
import annotations
5 from typing
import Any, cast
7 from pyoverkiz.enums
import OverkizCommand, OverkizCommandParam, OverkizState
18 from ..const
import DOMAIN
19 from ..coordinator
import OverkizDataUpdateCoordinator
20 from ..entity
import OverkizEntity
22 PRESET_DRYING =
"drying"
24 OVERKIZ_TO_HVAC_MODE: dict[str, HVACMode] = {
25 OverkizCommandParam.EXTERNAL: HVACMode.HEAT,
26 OverkizCommandParam.INTERNAL: HVACMode.AUTO,
27 OverkizCommandParam.STANDBY: HVACMode.OFF,
29 HVAC_MODE_TO_OVERKIZ = {v: k
for k, v
in OVERKIZ_TO_HVAC_MODE.items()}
31 OVERKIZ_TO_PRESET_MODE: dict[str, str] = {
32 OverkizCommandParam.PERMANENT_HEATING: PRESET_NONE,
33 OverkizCommandParam.BOOST: PRESET_BOOST,
34 OverkizCommandParam.DRYING: PRESET_DRYING,
37 PRESET_MODE_TO_OVERKIZ = {v: k
for k, v
in OVERKIZ_TO_PRESET_MODE.items()}
39 TEMPERATURE_SENSOR_DEVICE_INDEX = 7
43 """Representation of Atlantic Electrical Towel Dryer."""
45 _attr_hvac_modes = [*HVAC_MODE_TO_OVERKIZ]
46 _attr_preset_modes = [*PRESET_MODE_TO_OVERKIZ]
47 _attr_temperature_unit = UnitOfTemperature.CELSIUS
48 _attr_translation_key = DOMAIN
49 _enable_turn_on_off_backwards_compatibility =
False
52 self, device_url: str, coordinator: OverkizDataUpdateCoordinator
55 super().
__init__(device_url, coordinator)
57 TEMPERATURE_SENSOR_DEVICE_INDEX
61 ClimateEntityFeature.TARGET_TEMPERATURE
62 | ClimateEntityFeature.TURN_OFF
63 | ClimateEntityFeature.TURN_ON
67 if self.
executorexecutor.has_command(OverkizCommand.SET_TOWEL_DRYER_TEMPORARY_STATE):
72 """Return hvac operation ie. heat, cool mode."""
73 if OverkizState.CORE_OPERATING_MODE
in self.
devicedevice.states:
74 return OVERKIZ_TO_HVAC_MODE[
75 cast(str, self.
executorexecutor.select_state(OverkizState.CORE_OPERATING_MODE))
81 """Set new target hvac mode."""
82 await self.
executorexecutor.async_execute_command(
83 OverkizCommand.SET_TOWEL_DRYER_OPERATING_MODE,
84 HVAC_MODE_TO_OVERKIZ[hvac_mode],
89 """Return the temperature."""
91 self.
executorexecutor.select_state(OverkizState.IO_EFFECTIVE_TEMPERATURE_SETPOINT)
93 self.
executorexecutor.select_state(OverkizState.CORE_TARGET_TEMPERATURE)
97 """Return the current temperature."""
99 temperature := self.
temperature_devicetemperature_device.states[OverkizState.CORE_TEMPERATURE]
101 return cast(float, temperature.value)
106 """Set new temperature."""
107 temperature = kwargs[ATTR_TEMPERATURE]
110 await self.
executorexecutor.async_execute_command(
111 OverkizCommand.SET_DEROGATED_TARGET_TEMPERATURE, temperature
114 await self.
executorexecutor.async_execute_command(
115 OverkizCommand.SET_TARGET_TEMPERATURE, temperature
120 """Return the current preset mode, e.g., home, away, temp."""
121 return OVERKIZ_TO_PRESET_MODE[
124 self.
executorexecutor.select_state(OverkizState.IO_TOWEL_DRYER_TEMPORARY_STATE),
129 """Set new preset mode."""
130 await self.
executorexecutor.async_execute_command(
131 OverkizCommand.SET_TOWEL_DRYER_TEMPORARY_STATE,
132 PRESET_MODE_TO_OVERKIZ[preset_mode],
HVACMode|None hvac_mode(self)
None async_set_temperature(self, **Any kwargs)
None target_temperature(self)
float|None current_temperature(self)
None async_set_preset_mode(self, str preset_mode)
str|None preset_mode(self)
None __init__(self, str device_url, OverkizDataUpdateCoordinator coordinator)
None async_set_hvac_mode(self, HVACMode hvac_mode)