mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Add support for Atlantic Electrical Heater in Overkiz integration (#67045)
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
a54e3ca1f8
commit
2a697bdf41
@ -870,6 +870,8 @@ omit =
|
|||||||
homeassistant/components/overkiz/__init__.py
|
homeassistant/components/overkiz/__init__.py
|
||||||
homeassistant/components/overkiz/binary_sensor.py
|
homeassistant/components/overkiz/binary_sensor.py
|
||||||
homeassistant/components/overkiz/button.py
|
homeassistant/components/overkiz/button.py
|
||||||
|
homeassistant/components/overkiz/climate.py
|
||||||
|
homeassistant/components/overkiz/climate_entities/*
|
||||||
homeassistant/components/overkiz/cover.py
|
homeassistant/components/overkiz/cover.py
|
||||||
homeassistant/components/overkiz/cover_entities/*
|
homeassistant/components/overkiz/cover_entities/*
|
||||||
homeassistant/components/overkiz/coordinator.py
|
homeassistant/components/overkiz/coordinator.py
|
||||||
|
26
homeassistant/components/overkiz/climate.py
Normal file
26
homeassistant/components/overkiz/climate.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
"""Support for Overkiz climate devices."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.const import Platform
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
|
from . import HomeAssistantOverkizData
|
||||||
|
from .climate_entities import WIDGET_TO_CLIMATE_ENTITY
|
||||||
|
from .const import DOMAIN
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup_entry(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
entry: ConfigEntry,
|
||||||
|
async_add_entities: AddEntitiesCallback,
|
||||||
|
) -> None:
|
||||||
|
"""Set up the Overkiz climate from a config entry."""
|
||||||
|
data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
|
||||||
|
async_add_entities(
|
||||||
|
WIDGET_TO_CLIMATE_ENTITY[device.widget](device.device_url, data.coordinator)
|
||||||
|
for device in data.platforms[Platform.CLIMATE]
|
||||||
|
if device.widget in WIDGET_TO_CLIMATE_ENTITY
|
||||||
|
)
|
@ -0,0 +1,8 @@
|
|||||||
|
"""Climate entities for the Overkiz (by Somfy) integration."""
|
||||||
|
from pyoverkiz.enums.ui import UIWidget
|
||||||
|
|
||||||
|
from .atlantic_electrical_heater import AtlanticElectricalHeater
|
||||||
|
|
||||||
|
WIDGET_TO_CLIMATE_ENTITY = {
|
||||||
|
UIWidget.ATLANTIC_ELECTRICAL_HEATER: AtlanticElectricalHeater,
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
"""Support for Atlantic Electrical Heater."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import cast
|
||||||
|
|
||||||
|
from pyoverkiz.enums import OverkizCommand, OverkizCommandParam, OverkizState
|
||||||
|
|
||||||
|
from homeassistant.components.climate import (
|
||||||
|
HVAC_MODE_OFF,
|
||||||
|
SUPPORT_PRESET_MODE,
|
||||||
|
ClimateEntity,
|
||||||
|
)
|
||||||
|
from homeassistant.components.climate.const import (
|
||||||
|
HVAC_MODE_HEAT,
|
||||||
|
PRESET_COMFORT,
|
||||||
|
PRESET_ECO,
|
||||||
|
PRESET_NONE,
|
||||||
|
)
|
||||||
|
from homeassistant.components.overkiz.entity import OverkizEntity
|
||||||
|
from homeassistant.const import TEMP_CELSIUS
|
||||||
|
|
||||||
|
PRESET_FROST_PROTECTION = "frost_protection"
|
||||||
|
|
||||||
|
OVERKIZ_TO_HVAC_MODES: dict[str, str] = {
|
||||||
|
OverkizCommandParam.ON: HVAC_MODE_HEAT,
|
||||||
|
OverkizCommandParam.COMFORT: HVAC_MODE_HEAT,
|
||||||
|
OverkizCommandParam.OFF: HVAC_MODE_OFF,
|
||||||
|
}
|
||||||
|
HVAC_MODES_TO_OVERKIZ = {v: k for k, v in OVERKIZ_TO_HVAC_MODES.items()}
|
||||||
|
|
||||||
|
OVERKIZ_TO_PRESET_MODES: dict[str, str] = {
|
||||||
|
OverkizCommandParam.OFF: PRESET_NONE,
|
||||||
|
OverkizCommandParam.FROSTPROTECTION: PRESET_FROST_PROTECTION,
|
||||||
|
OverkizCommandParam.ECO: PRESET_ECO,
|
||||||
|
OverkizCommandParam.COMFORT: PRESET_COMFORT,
|
||||||
|
}
|
||||||
|
|
||||||
|
PRESET_MODES_TO_OVERKIZ = {v: k for k, v in OVERKIZ_TO_PRESET_MODES.items()}
|
||||||
|
|
||||||
|
|
||||||
|
class AtlanticElectricalHeater(OverkizEntity, ClimateEntity):
|
||||||
|
"""Representation of Atlantic Electrical Heater."""
|
||||||
|
|
||||||
|
_attr_hvac_modes = [*HVAC_MODES_TO_OVERKIZ]
|
||||||
|
_attr_preset_modes = [*PRESET_MODES_TO_OVERKIZ]
|
||||||
|
_attr_supported_features = SUPPORT_PRESET_MODE
|
||||||
|
_attr_temperature_unit = TEMP_CELSIUS
|
||||||
|
|
||||||
|
@property
|
||||||
|
def hvac_mode(self) -> str:
|
||||||
|
"""Return hvac operation ie. heat, cool mode."""
|
||||||
|
return OVERKIZ_TO_HVAC_MODES[
|
||||||
|
cast(str, self.executor.select_state(OverkizState.CORE_ON_OFF))
|
||||||
|
]
|
||||||
|
|
||||||
|
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
|
||||||
|
"""Set new target hvac mode."""
|
||||||
|
await self.executor.async_execute_command(
|
||||||
|
OverkizCommand.SET_HEATING_LEVEL, HVAC_MODES_TO_OVERKIZ[hvac_mode]
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def preset_mode(self) -> str | None:
|
||||||
|
"""Return the current preset mode, e.g., home, away, temp."""
|
||||||
|
return OVERKIZ_TO_PRESET_MODES[
|
||||||
|
cast(str, self.executor.select_state(OverkizState.IO_TARGET_HEATING_LEVEL))
|
||||||
|
]
|
||||||
|
|
||||||
|
async def async_set_preset_mode(self, preset_mode: str) -> None:
|
||||||
|
"""Set new preset mode."""
|
||||||
|
await self.executor.async_execute_command(
|
||||||
|
OverkizCommand.SET_HEATING_LEVEL, PRESET_MODES_TO_OVERKIZ[preset_mode]
|
||||||
|
)
|
@ -21,6 +21,7 @@ UPDATE_INTERVAL_ALL_ASSUMED_STATE: Final = timedelta(minutes=60)
|
|||||||
PLATFORMS: list[Platform] = [
|
PLATFORMS: list[Platform] = [
|
||||||
Platform.BINARY_SENSOR,
|
Platform.BINARY_SENSOR,
|
||||||
Platform.BUTTON,
|
Platform.BUTTON,
|
||||||
|
Platform.CLIMATE,
|
||||||
Platform.COVER,
|
Platform.COVER,
|
||||||
Platform.LIGHT,
|
Platform.LIGHT,
|
||||||
Platform.LOCK,
|
Platform.LOCK,
|
||||||
@ -57,6 +58,7 @@ OVERKIZ_DEVICE_TO_PLATFORM: dict[UIClass | UIWidget, Platform | None] = {
|
|||||||
UIClass.SWINGING_SHUTTER: Platform.COVER,
|
UIClass.SWINGING_SHUTTER: Platform.COVER,
|
||||||
UIClass.VENETIAN_BLIND: Platform.COVER,
|
UIClass.VENETIAN_BLIND: Platform.COVER,
|
||||||
UIClass.WINDOW: Platform.COVER,
|
UIClass.WINDOW: Platform.COVER,
|
||||||
|
UIWidget.ATLANTIC_ELECTRICAL_HEATER: Platform.CLIMATE, # widgetName, uiClass is HeatingSystem (not supported)
|
||||||
UIWidget.DOMESTIC_HOT_WATER_TANK: Platform.SWITCH, # widgetName, uiClass is WaterHeatingSystem (not supported)
|
UIWidget.DOMESTIC_HOT_WATER_TANK: Platform.SWITCH, # widgetName, uiClass is WaterHeatingSystem (not supported)
|
||||||
UIWidget.MY_FOX_SECURITY_CAMERA: Platform.SWITCH, # widgetName, uiClass is Camera (not supported)
|
UIWidget.MY_FOX_SECURITY_CAMERA: Platform.SWITCH, # widgetName, uiClass is Camera (not supported)
|
||||||
UIWidget.RTD_INDOOR_SIREN: Platform.SWITCH, # widgetName, uiClass is Siren (not supported)
|
UIWidget.RTD_INDOOR_SIREN: Platform.SWITCH, # widgetName, uiClass is Siren (not supported)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user