1 """Support for Atlantic Pass APC Heating Control."""
3 from __future__
import annotations
5 from typing
import Any, cast
7 from pyoverkiz.enums
import OverkizCommand, OverkizCommandParam, OverkizState
21 from ..const
import DOMAIN
22 from ..coordinator
import OverkizDataUpdateCoordinator
23 from ..entity
import OverkizEntity
25 OVERKIZ_TO_HVAC_MODE: dict[str, HVACMode] = {
26 OverkizCommandParam.AUTO: HVACMode.AUTO,
27 OverkizCommandParam.ECO: HVACMode.AUTO,
28 OverkizCommandParam.MANU: HVACMode.HEAT,
29 OverkizCommandParam.HEATING: HVACMode.HEAT,
30 OverkizCommandParam.STOP: HVACMode.OFF,
31 OverkizCommandParam.EXTERNAL_SCHEDULING: HVACMode.AUTO,
32 OverkizCommandParam.INTERNAL_SCHEDULING: HVACMode.AUTO,
33 OverkizCommandParam.COMFORT: HVACMode.HEAT,
36 HVAC_MODE_TO_OVERKIZ = {v: k
for k, v
in OVERKIZ_TO_HVAC_MODE.items()}
38 PRESET_EXTERNAL =
"external"
39 PRESET_FROST_PROTECTION =
"frost_protection"
41 OVERKIZ_TO_PRESET_MODES: dict[str, str] = {
42 OverkizCommandParam.OFF: PRESET_ECO,
43 OverkizCommandParam.STOP: PRESET_ECO,
44 OverkizCommandParam.MANU: PRESET_COMFORT,
45 OverkizCommandParam.COMFORT: PRESET_COMFORT,
46 OverkizCommandParam.ABSENCE: PRESET_AWAY,
47 OverkizCommandParam.ECO: PRESET_ECO,
48 OverkizCommandParam.FROSTPROTECTION: PRESET_FROST_PROTECTION,
49 OverkizCommandParam.EXTERNAL_SCHEDULING: PRESET_EXTERNAL,
50 OverkizCommandParam.INTERNAL_SCHEDULING: PRESET_HOME,
53 PRESET_MODES_TO_OVERKIZ: dict[str, str] = {
54 PRESET_COMFORT: OverkizCommandParam.COMFORT,
55 PRESET_AWAY: OverkizCommandParam.ABSENCE,
56 PRESET_ECO: OverkizCommandParam.ECO,
57 PRESET_FROST_PROTECTION: OverkizCommandParam.FROSTPROTECTION,
58 PRESET_EXTERNAL: OverkizCommandParam.EXTERNAL_SCHEDULING,
59 PRESET_HOME: OverkizCommandParam.INTERNAL_SCHEDULING,
63 OVERKIZ_TO_PROFILE_MODES: dict[str, str] = {
64 OverkizCommandParam.OFF: PRESET_SLEEP,
65 OverkizCommandParam.STOP: PRESET_SLEEP,
66 OverkizCommandParam.ECO: PRESET_ECO,
67 OverkizCommandParam.ABSENCE: PRESET_AWAY,
68 OverkizCommandParam.MANU: PRESET_COMFORT,
69 OverkizCommandParam.DEROGATION: PRESET_COMFORT,
70 OverkizCommandParam.EXTERNAL_SETPOINT: PRESET_EXTERNAL,
71 OverkizCommandParam.FROSTPROTECTION: PRESET_FROST_PROTECTION,
72 OverkizCommandParam.COMFORT: PRESET_COMFORT,
75 OVERKIZ_TEMPERATURE_STATE_BY_PROFILE: dict[str, str] = {
76 OverkizCommandParam.ECO: OverkizState.CORE_ECO_HEATING_TARGET_TEMPERATURE,
77 OverkizCommandParam.COMFORT: OverkizState.CORE_COMFORT_HEATING_TARGET_TEMPERATURE,
78 OverkizCommandParam.DEROGATION: OverkizState.CORE_DEROGATED_TARGET_TEMPERATURE,
83 """Representation of Atlantic Pass APC Heating Zone Control."""
85 _attr_hvac_modes = [*HVAC_MODE_TO_OVERKIZ]
86 _attr_preset_modes = [*PRESET_MODES_TO_OVERKIZ]
87 _attr_supported_features = (
88 ClimateEntityFeature.TARGET_TEMPERATURE
89 | ClimateEntityFeature.PRESET_MODE
90 | ClimateEntityFeature.TURN_OFF
91 | ClimateEntityFeature.TURN_ON
93 _attr_temperature_unit = UnitOfTemperature.CELSIUS
94 _attr_translation_key = DOMAIN
95 _enable_turn_on_off_backwards_compatibility =
False
98 self, device_url: str, coordinator: OverkizDataUpdateCoordinator
101 super().
__init__(device_url, coordinator)
110 """Return the current temperature."""
112 temperature := self.
temperature_devicetemperature_device.states[OverkizState.CORE_TEMPERATURE]
114 return cast(float, temperature.value)
120 """Return hvac operation ie. heat, cool mode."""
121 return OVERKIZ_TO_HVAC_MODE[
122 cast(str, self.
executorexecutor.select_state(OverkizState.IO_PASS_APC_HEATING_MODE))
127 """Return current heating profile."""
130 self.
executorexecutor.select_state(OverkizState.IO_PASS_APC_HEATING_PROFILE),
134 """Set new heating mode and refresh states."""
135 await self.
executorexecutor.async_execute_command(
136 OverkizCommand.SET_PASS_APC_HEATING_MODE, mode
141 await self.
executorexecutor.async_execute_command(
142 OverkizCommand.SET_DEROGATION_ON_OFF_STATE, OverkizCommandParam.OFF
146 await self.
executorexecutor.async_execute_command(
147 OverkizCommand.REFRESH_PASS_APC_HEATING_MODE
149 await self.
executorexecutor.async_execute_command(
150 OverkizCommand.REFRESH_PASS_APC_HEATING_PROFILE
154 """Set new target hvac mode."""
158 """Set new preset mode."""
163 """Return the current preset mode, e.g., home, away, temp."""
165 str, self.
executorexecutor.select_state(OverkizState.IO_PASS_APC_HEATING_MODE)
168 if heating_mode == OverkizCommandParam.INTERNAL_SCHEDULING:
170 return OVERKIZ_TO_PROFILE_MODES[
174 OverkizState.IO_PASS_APC_HEATING_PROFILE
179 return OVERKIZ_TO_PRESET_MODES[heating_mode]
183 """Return hvac target temperature."""
185 if current_heating_profile
in OVERKIZ_TEMPERATURE_STATE_BY_PROFILE:
189 OVERKIZ_TEMPERATURE_STATE_BY_PROFILE[current_heating_profile]
193 float, self.
executorexecutor.select_state(OverkizState.CORE_TARGET_TEMPERATURE)
197 """Set new temperature."""
198 temperature = kwargs[ATTR_TEMPERATURE]
201 await self.
executorexecutor.async_execute_command(
202 OverkizCommand.SET_COMFORT_HEATING_TARGET_TEMPERATURE,
205 await self.
executorexecutor.async_execute_command(
206 OverkizCommand.REFRESH_COMFORT_HEATING_TARGET_TEMPERATURE
208 await self.
executorexecutor.async_execute_command(
209 OverkizCommand.REFRESH_TARGET_TEMPERATURE
212 await self.
executorexecutor.async_execute_command(
213 OverkizCommand.SET_DEROGATED_TARGET_TEMPERATURE,
216 await self.
executorexecutor.async_execute_command(
217 OverkizCommand.SET_DEROGATION_ON_OFF_STATE,
218 OverkizCommandParam.ON,
220 await self.
executorexecutor.async_execute_command(
221 OverkizCommand.REFRESH_TARGET_TEMPERATURE
223 await self.
executorexecutor.async_execute_command(
224 OverkizCommand.REFRESH_PASS_APC_HEATING_MODE
226 await self.
executorexecutor.async_execute_command(
227 OverkizCommand.REFRESH_PASS_APC_HEATING_PROFILE
HVACMode|None hvac_mode(self)
float|None current_temperature(self)
str|None preset_mode(self)
None async_set_temperature(self, **Any kwargs)
float|None target_temperature(self)
None async_set_heating_mode(self, str mode)
None async_set_hvac_mode(self, HVACMode hvac_mode)
str current_heating_profile(self)
None __init__(self, str device_url, OverkizDataUpdateCoordinator coordinator)
None async_set_preset_mode(self, str preset_mode)