1 """Climate entities for the Overkiz (by Somfy) integration."""
3 from __future__
import annotations
5 from enum
import StrEnum, unique
7 from pyoverkiz.enums
import Protocol
8 from pyoverkiz.enums.ui
import UIWidget
16 from ..
import HomeAssistantOverkizData
17 from ..const
import DOMAIN
18 from .atlantic_electrical_heater
import AtlanticElectricalHeater
19 from .atlantic_electrical_heater_with_adjustable_temperature_setpoint
import (
20 AtlanticElectricalHeaterWithAdjustableTemperatureSetpoint,
22 from .atlantic_electrical_towel_dryer
import AtlanticElectricalTowelDryer
23 from .atlantic_heat_recovery_ventilation
import AtlanticHeatRecoveryVentilation
24 from .atlantic_pass_apc_heat_pump_main_component
import (
25 AtlanticPassAPCHeatPumpMainComponent,
27 from .atlantic_pass_apc_heating_zone
import AtlanticPassAPCHeatingZone
28 from .atlantic_pass_apc_zone_control
import AtlanticPassAPCZoneControl
29 from .atlantic_pass_apc_zone_control_zone
import AtlanticPassAPCZoneControlZone
30 from .hitachi_air_to_air_heat_pump_hlrrwifi
import HitachiAirToAirHeatPumpHLRRWIFI
31 from .hitachi_air_to_air_heat_pump_ovp
import HitachiAirToAirHeatPumpOVP
32 from .somfy_heating_temperature_interface
import SomfyHeatingTemperatureInterface
33 from .somfy_thermostat
import SomfyThermostat
34 from .valve_heating_temperature_interface
import ValveHeatingTemperatureInterface
39 """Enum for widget controllables."""
41 IO_ATLANTIC_PASS_APC_HEATING_AND_COOLING_ZONE = (
42 "io:AtlanticPassAPCHeatingAndCoolingZoneComponent"
44 IO_ATLANTIC_PASS_APC_ZONE_CONTROL_ZONE = (
45 "io:AtlanticPassAPCZoneControlZoneComponent"
49 WIDGET_TO_CLIMATE_ENTITY = {
50 UIWidget.ATLANTIC_ELECTRICAL_HEATER: AtlanticElectricalHeater,
51 UIWidget.ATLANTIC_ELECTRICAL_HEATER_WITH_ADJUSTABLE_TEMPERATURE_SETPOINT: AtlanticElectricalHeaterWithAdjustableTemperatureSetpoint,
52 UIWidget.ATLANTIC_ELECTRICAL_TOWEL_DRYER: AtlanticElectricalTowelDryer,
53 UIWidget.ATLANTIC_HEAT_RECOVERY_VENTILATION: AtlanticHeatRecoveryVentilation,
54 UIWidget.ATLANTIC_PASS_APC_HEATING_ZONE: AtlanticPassAPCHeatingZone,
55 UIWidget.ATLANTIC_PASS_APC_ZONE_CONTROL: AtlanticPassAPCZoneControl,
56 UIWidget.SOMFY_HEATING_TEMPERATURE_INTERFACE: SomfyHeatingTemperatureInterface,
57 UIWidget.SOMFY_THERMOSTAT: SomfyThermostat,
58 UIWidget.VALVE_HEATING_TEMPERATURE_INTERFACE: ValveHeatingTemperatureInterface,
59 UIWidget.ATLANTIC_PASS_APC_HEAT_PUMP: AtlanticPassAPCHeatPumpMainComponent,
64 WIDGET_AND_CONTROLLABLE_TO_CLIMATE_ENTITY = {
65 UIWidget.ATLANTIC_PASS_APC_HEATING_AND_COOLING_ZONE: {
66 Controllable.IO_ATLANTIC_PASS_APC_HEATING_AND_COOLING_ZONE: AtlanticPassAPCHeatingZone,
67 Controllable.IO_ATLANTIC_PASS_APC_ZONE_CONTROL_ZONE: AtlanticPassAPCZoneControlZone,
72 WIDGET_AND_PROTOCOL_TO_CLIMATE_ENTITY = {
73 UIWidget.HITACHI_AIR_TO_AIR_HEAT_PUMP: {
74 Protocol.HLRR_WIFI: HitachiAirToAirHeatPumpHLRRWIFI,
75 Protocol.OVP: HitachiAirToAirHeatPumpOVP,
83 async_add_entities: AddEntitiesCallback,
85 """Set up the Overkiz climate from a config entry."""
86 data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
89 entities_based_on_widget: list[Entity] = [
90 WIDGET_TO_CLIMATE_ENTITY[device.widget](device.device_url, data.coordinator)
91 for device
in data.platforms[Platform.CLIMATE]
92 if device.widget
in WIDGET_TO_CLIMATE_ENTITY
97 entities_based_on_widget_and_controllable: list[Entity] = [
98 WIDGET_AND_CONTROLLABLE_TO_CLIMATE_ENTITY[device.widget][
99 device.controllable_name
100 ](device.device_url, data.coordinator)
101 for device
in data.platforms[Platform.CLIMATE]
102 if device.widget
in WIDGET_AND_CONTROLLABLE_TO_CLIMATE_ENTITY
103 and device.controllable_name
104 in WIDGET_AND_CONTROLLABLE_TO_CLIMATE_ENTITY[device.widget]
109 entities_based_on_widget_and_protocol: list[Entity] = [
110 WIDGET_AND_PROTOCOL_TO_CLIMATE_ENTITY[device.widget][device.protocol](
111 device.device_url, data.coordinator
113 for device
in data.platforms[Platform.CLIMATE]
114 if device.widget
in WIDGET_AND_PROTOCOL_TO_CLIMATE_ENTITY
115 and device.protocol
in WIDGET_AND_PROTOCOL_TO_CLIMATE_ENTITY[device.widget]
119 entities_based_on_widget
120 + entities_based_on_widget_and_controllable
121 + entities_based_on_widget_and_protocol
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)