Support hvac mode in melcloud climate.set_temperature service (#56082)

Setting the HVAC_MODE via the set_temperature service has not been
possible before this change.
This commit is contained in:
Vilppu Vuorinen 2021-09-13 15:14:47 +03:00 committed by GitHub
parent 5ccc3c17d9
commit ee616ed992
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -16,6 +16,7 @@ import voluptuous as vol
from homeassistant.components.climate import ClimateEntity
from homeassistant.components.climate.const import (
ATTR_HVAC_MODE,
DEFAULT_MAX_TEMP,
DEFAULT_MIN_TEMP,
HVAC_MODE_COOL,
@ -29,7 +30,7 @@ from homeassistant.components.climate.const import (
SUPPORT_TARGET_TEMPERATURE,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TEMP_CELSIUS
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv, entity_platform
@ -169,20 +170,25 @@ class AtaDeviceClimate(MelCloudClimate):
return HVAC_MODE_OFF
return ATA_HVAC_MODE_LOOKUP.get(mode)
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
"""Set new target hvac mode."""
def _apply_set_hvac_mode(self, hvac_mode: str, set_dict: dict[str, Any]) -> None:
"""Apply hvac mode changes to a dict used to call _device.set."""
if hvac_mode == HVAC_MODE_OFF:
await self._device.set({"power": False})
set_dict["power"] = False
return
operation_mode = ATA_HVAC_MODE_REVERSE_LOOKUP.get(hvac_mode)
if operation_mode is None:
raise ValueError(f"Invalid hvac_mode [{hvac_mode}]")
props = {"operation_mode": operation_mode}
set_dict["operation_mode"] = operation_mode
if self.hvac_mode == HVAC_MODE_OFF:
props["power"] = True
await self._device.set(props)
set_dict["power"] = True
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
"""Set new target hvac mode."""
set_dict = {}
self._apply_set_hvac_mode(hvac_mode, set_dict)
await self._device.set(set_dict)
@property
def hvac_modes(self) -> list[str]:
@ -203,9 +209,17 @@ class AtaDeviceClimate(MelCloudClimate):
async def async_set_temperature(self, **kwargs) -> None:
"""Set new target temperature."""
await self._device.set(
{"target_temperature": kwargs.get("temperature", self.target_temperature)}
)
set_dict = {}
if ATTR_HVAC_MODE in kwargs:
self._apply_set_hvac_mode(
kwargs.get(ATTR_HVAC_MODE, self.hvac_mode), set_dict
)
if ATTR_TEMPERATURE in kwargs:
set_dict["target_temperature"] = kwargs.get(ATTR_TEMPERATURE)
if set_dict:
await self._device.set(set_dict)
@property
def fan_mode(self) -> str | None: