mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Support integrated ventilation on heating devices in ViCare integration (#130356)
This commit is contained in:
parent
3ac062453f
commit
f14f7936eb
@ -13,9 +13,6 @@ from PyViCare.PyViCareUtils import (
|
||||
PyViCareNotSupportedFeatureError,
|
||||
PyViCareRateLimitError,
|
||||
)
|
||||
from PyViCare.PyViCareVentilationDevice import (
|
||||
VentilationDevice as PyViCareVentilationDevice,
|
||||
)
|
||||
from requests.exceptions import ConnectionError as RequestConnectionError
|
||||
|
||||
from homeassistant.components.fan import FanEntity, FanEntityFeature
|
||||
@ -50,6 +47,8 @@ class VentilationMode(enum.StrEnum):
|
||||
|
||||
PERMANENT = "permanent" # on, speed controlled by program (levelOne-levelFour)
|
||||
VENTILATION = "ventilation" # activated by schedule
|
||||
STANDBY = "standby" # activated by schedule
|
||||
STANDARD = "standard" # activated by schedule
|
||||
SENSOR_DRIVEN = "sensor_driven" # activated by schedule, override by sensor
|
||||
SENSOR_OVERRIDE = "sensor_override" # activated by sensor
|
||||
|
||||
@ -77,6 +76,8 @@ class VentilationMode(enum.StrEnum):
|
||||
HA_TO_VICARE_MODE_VENTILATION = {
|
||||
VentilationMode.PERMANENT: "permanent",
|
||||
VentilationMode.VENTILATION: "ventilation",
|
||||
VentilationMode.STANDBY: "standby",
|
||||
VentilationMode.STANDARD: "standard",
|
||||
VentilationMode.SENSOR_DRIVEN: "sensorDriven",
|
||||
VentilationMode.SENSOR_OVERRIDE: "sensorOverride",
|
||||
}
|
||||
@ -96,7 +97,7 @@ def _build_entities(
|
||||
return [
|
||||
ViCareFan(get_device_serial(device.api), device.config, device.api)
|
||||
for device in device_list
|
||||
if isinstance(device.api, PyViCareVentilationDevice)
|
||||
if device.api.isVentilationDevice()
|
||||
]
|
||||
|
||||
|
||||
@ -118,7 +119,6 @@ class ViCareFan(ViCareEntity, FanEntity):
|
||||
"""Representation of the ViCare ventilation device."""
|
||||
|
||||
_attr_speed_count = len(ORDERED_NAMED_FAN_SPEEDS)
|
||||
_attr_supported_features = FanEntityFeature.SET_SPEED
|
||||
_attr_translation_key = "ventilation"
|
||||
|
||||
def __init__(
|
||||
@ -131,8 +131,8 @@ class ViCareFan(ViCareEntity, FanEntity):
|
||||
super().__init__(
|
||||
self._attr_translation_key, device_serial, device_config, device
|
||||
)
|
||||
# init presets
|
||||
supported_modes = list[str](self._api.getAvailableModes())
|
||||
# init preset_mode
|
||||
supported_modes = list[str](self._api.getVentilationModes())
|
||||
self._attr_preset_modes = [
|
||||
mode
|
||||
for mode in VentilationMode
|
||||
@ -140,6 +140,12 @@ class ViCareFan(ViCareEntity, FanEntity):
|
||||
]
|
||||
if len(self._attr_preset_modes) > 0:
|
||||
self._attr_supported_features |= FanEntityFeature.PRESET_MODE
|
||||
# init set_speed
|
||||
supported_levels: list[str] | None = None
|
||||
with suppress(PyViCareNotSupportedFeatureError):
|
||||
supported_levels = self._api.getVentilationLevels()
|
||||
if supported_levels is not None and len(supported_levels) > 0:
|
||||
self._attr_supported_features |= FanEntityFeature.SET_SPEED
|
||||
|
||||
def update(self) -> None:
|
||||
"""Update state of fan."""
|
||||
@ -147,7 +153,7 @@ class ViCareFan(ViCareEntity, FanEntity):
|
||||
try:
|
||||
with suppress(PyViCareNotSupportedFeatureError):
|
||||
self._attr_preset_mode = VentilationMode.from_vicare_mode(
|
||||
self._api.getActiveMode()
|
||||
self._api.getActiveVentilationMode()
|
||||
)
|
||||
with suppress(PyViCareNotSupportedFeatureError):
|
||||
level = filter_state(self._api.getVentilationLevel())
|
||||
@ -203,10 +209,10 @@ class ViCareFan(ViCareEntity, FanEntity):
|
||||
|
||||
level = percentage_to_ordered_list_item(ORDERED_NAMED_FAN_SPEEDS, percentage)
|
||||
_LOGGER.debug("changing ventilation level to %s", level)
|
||||
self._api.setPermanentLevel(level)
|
||||
self._api.setVentilationLevel(level)
|
||||
|
||||
def set_preset_mode(self, preset_mode: str) -> None:
|
||||
"""Set new preset mode."""
|
||||
target_mode = VentilationMode.to_vicare_mode(preset_mode)
|
||||
_LOGGER.debug("changing ventilation mode to %s", target_mode)
|
||||
self._api.setActiveMode(target_mode)
|
||||
self._api.activateVentilationMode(target_mode)
|
||||
|
@ -81,10 +81,12 @@
|
||||
"state_attributes": {
|
||||
"preset_mode": {
|
||||
"state": {
|
||||
"permanent": "permanent",
|
||||
"ventilation": "schedule",
|
||||
"sensor_driven": "sensor",
|
||||
"sensor_override": "schedule with sensor-override"
|
||||
"standby": "[%key:common::state::standby%]",
|
||||
"permanent": "Permanent",
|
||||
"ventilation": "Schedule",
|
||||
"sensor_driven": "Sensor-driven",
|
||||
"sensor_override": "Schedule with sensor-override",
|
||||
"standard": "Minimal"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user