1 """Support for AtlanticHeatRecoveryVentilation."""
3 from __future__
import annotations
5 from typing
import cast
7 from pyoverkiz.enums
import OverkizCommand, OverkizCommandParam, OverkizState
17 from ..const
import DOMAIN
18 from ..coordinator
import OverkizDataUpdateCoordinator
19 from ..entity
import OverkizEntity
21 FAN_BOOST =
"home_boost"
22 FAN_KITCHEN =
"kitchen_boost"
24 FAN_BYPASS =
"bypass_boost"
28 PRESET_MANUAL =
"manual"
30 OVERKIZ_TO_FAN_MODES: dict[str, str] = {
31 OverkizCommandParam.AUTO: FAN_AUTO,
32 OverkizCommandParam.AWAY: FAN_AWAY,
33 OverkizCommandParam.BOOST: FAN_BOOST,
34 OverkizCommandParam.HIGH: FAN_KITCHEN,
38 FAN_MODES_TO_OVERKIZ = {v: k
for k, v
in OVERKIZ_TO_FAN_MODES.items()}
40 TEMPERATURE_SENSOR_DEVICE_INDEX = 4
44 """Representation of a AtlanticHeatRecoveryVentilation device."""
46 _attr_fan_modes = [*FAN_MODES_TO_OVERKIZ]
47 _attr_hvac_mode = HVACMode.FAN_ONLY
48 _attr_hvac_modes = [HVACMode.FAN_ONLY]
49 _attr_preset_modes = [PRESET_AUTO, PRESET_PROG, PRESET_MANUAL]
50 _attr_temperature_unit = UnitOfTemperature.CELSIUS
51 _attr_supported_features = (
52 ClimateEntityFeature.PRESET_MODE
53 | ClimateEntityFeature.FAN_MODE
54 | ClimateEntityFeature.TURN_OFF
55 | ClimateEntityFeature.TURN_ON
57 _attr_translation_key = DOMAIN
58 _enable_turn_on_off_backwards_compatibility =
False
61 self, device_url: str, coordinator: OverkizDataUpdateCoordinator
64 super().
__init__(device_url, coordinator)
66 TEMPERATURE_SENSOR_DEVICE_INDEX
71 """Return the current temperature."""
73 temperature := self.
temperature_devicetemperature_device.states[OverkizState.CORE_TEMPERATURE]
75 return cast(float, temperature.value)
80 """Not implemented since there is only one hvac_mode."""
84 """Return the current preset mode."""
85 ventilation_configuration = self.
executorexecutor.select_state(
86 OverkizState.IO_VENTILATION_CONFIGURATION_MODE
89 if ventilation_configuration == OverkizCommandParam.COMFORT:
92 if ventilation_configuration == OverkizCommandParam.STANDARD:
95 ventilation_mode = cast(
96 dict, self.
executorexecutor.select_state(OverkizState.IO_VENTILATION_MODE)
98 prog = ventilation_mode.get(OverkizCommandParam.PROG)
100 if prog == OverkizCommandParam.ON:
106 """Set the preset mode of the fan."""
107 if preset_mode == PRESET_AUTO:
108 await self.
executorexecutor.async_execute_command(
109 OverkizCommand.SET_VENTILATION_CONFIGURATION_MODE,
110 OverkizCommandParam.COMFORT,
114 if preset_mode == PRESET_PROG:
115 await self.
executorexecutor.async_execute_command(
116 OverkizCommand.SET_VENTILATION_CONFIGURATION_MODE,
117 OverkizCommandParam.STANDARD,
121 if preset_mode == PRESET_MANUAL:
122 await self.
executorexecutor.async_execute_command(
123 OverkizCommand.SET_VENTILATION_CONFIGURATION_MODE,
124 OverkizCommandParam.STANDARD,
128 await self.
executorexecutor.async_execute_command(
129 OverkizCommand.REFRESH_VENTILATION_STATE,
131 await self.
executorexecutor.async_execute_command(
132 OverkizCommand.REFRESH_VENTILATION_CONFIGURATION_MODE,
137 """Return the fan setting."""
138 ventilation_mode = cast(
139 dict, self.
executorexecutor.select_state(OverkizState.IO_VENTILATION_MODE)
141 cooling = ventilation_mode.get(OverkizCommandParam.COOLING)
143 if cooling == OverkizCommandParam.ON:
146 return OVERKIZ_TO_FAN_MODES[
147 cast(str, self.
executorexecutor.select_state(OverkizState.IO_AIR_DEMAND_MODE))
151 """Set new target fan mode."""
152 if fan_mode == FAN_BYPASS:
153 await self.
executorexecutor.async_execute_command(
154 OverkizCommand.SET_AIR_DEMAND_MODE, OverkizCommandParam.AUTO
159 await self.
executorexecutor.async_execute_command(
160 OverkizCommand.SET_AIR_DEMAND_MODE, FAN_MODES_TO_OVERKIZ[fan_mode]
163 await self.
executorexecutor.async_execute_command(
164 OverkizCommand.REFRESH_VENTILATION_STATE,
169 cooling: str |
None =
None,
170 prog: str |
None =
None,
172 """Execute ventilation mode command with all parameters."""
173 ventilation_mode = cast(
174 dict, self.
executorexecutor.select_state(OverkizState.IO_VENTILATION_MODE)
178 ventilation_mode[OverkizCommandParam.COOLING] = cooling
181 ventilation_mode[OverkizCommandParam.PROG] = prog
183 await self.
executorexecutor.async_execute_command(
184 OverkizCommand.SET_VENTILATION_MODE, ventilation_mode
None _set_ventilation_mode(self, str|None cooling=None, str|None prog=None)
None async_set_preset_mode(self, str preset_mode)
None __init__(self, str device_url, OverkizDataUpdateCoordinator coordinator)
str|None preset_mode(self)
None async_set_hvac_mode(self, str hvac_mode)
None async_set_fan_mode(self, str fan_mode)
float|None current_temperature(self)