Use climate enums in homematicip_cloud (#70668)

pull/70764/head
epenet 2022-04-26 09:41:02 +02:00 committed by GitHub
parent eeecdf213d
commit 4827fe5280
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 55 deletions

View File

@ -9,18 +9,15 @@ from homematicip.base.enums import AbsenceType
from homematicip.device import Switch from homematicip.device import Switch
from homematicip.functionalHomes import IndoorClimateHome from homematicip.functionalHomes import IndoorClimateHome
from homeassistant.components.climate import ClimateEntity, ClimateEntityFeature from homeassistant.components.climate import ClimateEntity
from homeassistant.components.climate.const import ( from homeassistant.components.climate.const import (
CURRENT_HVAC_HEAT,
CURRENT_HVAC_IDLE,
HVAC_MODE_AUTO,
HVAC_MODE_COOL,
HVAC_MODE_HEAT,
HVAC_MODE_OFF,
PRESET_AWAY, PRESET_AWAY,
PRESET_BOOST, PRESET_BOOST,
PRESET_ECO, PRESET_ECO,
PRESET_NONE, PRESET_NONE,
ClimateEntityFeature,
HVACAction,
HVACMode,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS
@ -112,31 +109,29 @@ class HomematicipHeatingGroup(HomematicipGenericEntity, ClimateEntity):
return self._device.humidity return self._device.humidity
@property @property
def hvac_mode(self) -> str: def hvac_mode(self) -> HVACMode:
"""Return hvac operation ie.""" """Return hvac operation ie."""
if self._disabled_by_cooling_mode and not self._has_switch: if self._disabled_by_cooling_mode and not self._has_switch:
return HVAC_MODE_OFF return HVACMode.OFF
if self._device.boostMode: if self._device.boostMode:
return HVAC_MODE_HEAT return HVACMode.HEAT
if self._device.controlMode == HMIP_MANUAL_CM: if self._device.controlMode == HMIP_MANUAL_CM:
return HVAC_MODE_HEAT if self._heat_mode_enabled else HVAC_MODE_COOL return HVACMode.HEAT if self._heat_mode_enabled else HVACMode.COOL
return HVAC_MODE_AUTO return HVACMode.AUTO
@property @property
def hvac_modes(self) -> list[str]: def hvac_modes(self) -> list[HVACMode]:
"""Return the list of available hvac operation modes.""" """Return the list of available hvac operation modes."""
if self._disabled_by_cooling_mode and not self._has_switch: if self._disabled_by_cooling_mode and not self._has_switch:
return [HVAC_MODE_OFF] return [HVACMode.OFF]
return ( if self._heat_mode_enabled:
[HVAC_MODE_AUTO, HVAC_MODE_HEAT] return [HVACMode.AUTO, HVACMode.HEAT]
if self._heat_mode_enabled return [HVACMode.AUTO, HVACMode.COOL]
else [HVAC_MODE_AUTO, HVAC_MODE_COOL]
)
@property @property
def hvac_action(self) -> str | None: def hvac_action(self) -> HVACAction | None:
""" """
Return the current hvac_action. Return the current hvac_action.
@ -147,9 +142,7 @@ class HomematicipHeatingGroup(HomematicipGenericEntity, ClimateEntity):
and self._has_radiator_thermostat and self._has_radiator_thermostat
and self._heat_mode_enabled and self._heat_mode_enabled
): ):
return ( return HVACAction.HEATING if self._device.valvePosition else HVACAction.IDLE
CURRENT_HVAC_HEAT if self._device.valvePosition else CURRENT_HVAC_IDLE
)
return None return None
@ -158,7 +151,7 @@ class HomematicipHeatingGroup(HomematicipGenericEntity, ClimateEntity):
"""Return the current preset mode.""" """Return the current preset mode."""
if self._device.boostMode: if self._device.boostMode:
return PRESET_BOOST return PRESET_BOOST
if self.hvac_mode in (HVAC_MODE_COOL, HVAC_MODE_HEAT, HVAC_MODE_OFF): if self.hvac_mode in (HVACMode.COOL, HVACMode.HEAT, HVACMode.OFF):
return PRESET_NONE return PRESET_NONE
if self._device.controlMode == HMIP_ECO_CM: if self._device.controlMode == HMIP_ECO_CM:
if self._indoor_climate.absenceType == AbsenceType.VACATION: if self._indoor_climate.absenceType == AbsenceType.VACATION:
@ -213,12 +206,12 @@ class HomematicipHeatingGroup(HomematicipGenericEntity, ClimateEntity):
if self.min_temp <= temperature <= self.max_temp: if self.min_temp <= temperature <= self.max_temp:
await self._device.set_point_temperature(temperature) await self._device.set_point_temperature(temperature)
async def async_set_hvac_mode(self, hvac_mode: str) -> None: async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set new target hvac mode.""" """Set new target hvac mode."""
if hvac_mode not in self.hvac_modes: if hvac_mode not in self.hvac_modes:
return return
if hvac_mode == HVAC_MODE_AUTO: if hvac_mode == HVACMode.AUTO:
await self._device.set_control_mode(HMIP_AUTOMATIC_CM) await self._device.set_control_mode(HMIP_AUTOMATIC_CM)
else: else:
await self._device.set_control_mode(HMIP_MANUAL_CM) await self._device.set_control_mode(HMIP_MANUAL_CM)
@ -235,7 +228,7 @@ class HomematicipHeatingGroup(HomematicipGenericEntity, ClimateEntity):
if preset_mode in self._device_profile_names: if preset_mode in self._device_profile_names:
profile_idx = self._get_profile_idx_by_name(preset_mode) profile_idx = self._get_profile_idx_by_name(preset_mode)
if self._device.controlMode != HMIP_AUTOMATIC_CM: if self._device.controlMode != HMIP_AUTOMATIC_CM:
await self.async_set_hvac_mode(HVAC_MODE_AUTO) await self.async_set_hvac_mode(HVACMode.AUTO)
await self._device.set_active_profile(profile_idx) await self._device.set_active_profile(profile_idx)
@property @property

View File

@ -10,16 +10,12 @@ from homeassistant.components.climate.const import (
ATTR_HVAC_ACTION, ATTR_HVAC_ACTION,
ATTR_PRESET_MODE, ATTR_PRESET_MODE,
ATTR_PRESET_MODES, ATTR_PRESET_MODES,
CURRENT_HVAC_HEAT,
CURRENT_HVAC_IDLE,
HVAC_MODE_AUTO,
HVAC_MODE_COOL,
HVAC_MODE_HEAT,
HVAC_MODE_OFF,
PRESET_AWAY, PRESET_AWAY,
PRESET_BOOST, PRESET_BOOST,
PRESET_ECO, PRESET_ECO,
PRESET_NONE, PRESET_NONE,
HVACAction,
HVACMode,
) )
from homeassistant.components.homematicip_cloud import DOMAIN as HMIPC_DOMAIN from homeassistant.components.homematicip_cloud import DOMAIN as HMIPC_DOMAIN
from homeassistant.components.homematicip_cloud.climate import ( from homeassistant.components.homematicip_cloud.climate import (
@ -53,7 +49,7 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
hass, mock_hap, entity_id, entity_name, device_model hass, mock_hap, entity_id, entity_name, device_model
) )
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes["current_temperature"] == 23.8 assert ha_state.attributes["current_temperature"] == 23.8
assert ha_state.attributes["min_temp"] == 5.0 assert ha_state.attributes["min_temp"] == 5.0
assert ha_state.attributes["max_temp"] == 30.0 assert ha_state.attributes["max_temp"] == 30.0
@ -80,7 +76,7 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
"set_hvac_mode", "set_hvac_mode",
{"entity_id": entity_id, "hvac_mode": HVAC_MODE_HEAT}, {"entity_id": entity_id, "hvac_mode": HVACMode.HEAT},
blocking=True, blocking=True,
) )
assert len(hmip_device.mock_calls) == service_call_counter + 3 assert len(hmip_device.mock_calls) == service_call_counter + 3
@ -88,12 +84,12 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
assert hmip_device.mock_calls[-1][1] == ("MANUAL",) assert hmip_device.mock_calls[-1][1] == ("MANUAL",)
await async_manipulate_test_data(hass, hmip_device, "controlMode", "MANUAL") await async_manipulate_test_data(hass, hmip_device, "controlMode", "MANUAL")
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_HEAT assert ha_state.state == HVACMode.HEAT
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
"set_hvac_mode", "set_hvac_mode",
{"entity_id": entity_id, "hvac_mode": HVAC_MODE_AUTO}, {"entity_id": entity_id, "hvac_mode": HVACMode.AUTO},
blocking=True, blocking=True,
) )
assert len(hmip_device.mock_calls) == service_call_counter + 5 assert len(hmip_device.mock_calls) == service_call_counter + 5
@ -101,7 +97,7 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
assert hmip_device.mock_calls[-1][1] == ("AUTOMATIC",) assert hmip_device.mock_calls[-1][1] == ("AUTOMATIC",)
await async_manipulate_test_data(hass, hmip_device, "controlMode", "AUTO") await async_manipulate_test_data(hass, hmip_device, "controlMode", "AUTO")
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
@ -185,7 +181,7 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
"set_hvac_mode", "set_hvac_mode",
{"entity_id": entity_id, "hvac_mode": HVAC_MODE_HEAT}, {"entity_id": entity_id, "hvac_mode": HVACMode.HEAT},
blocking=True, blocking=True,
) )
assert len(hmip_device.mock_calls) == service_call_counter + 20 assert len(hmip_device.mock_calls) == service_call_counter + 20
@ -193,7 +189,7 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
assert hmip_device.mock_calls[-1][1] == ("MANUAL",) assert hmip_device.mock_calls[-1][1] == ("MANUAL",)
await async_manipulate_test_data(hass, hmip_device, "controlMode", "MANUAL") await async_manipulate_test_data(hass, hmip_device, "controlMode", "MANUAL")
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_HEAT assert ha_state.state == HVACMode.HEAT
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
@ -208,7 +204,7 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
hmip_device.activeProfile = hmip_device.profiles[0] hmip_device.activeProfile = hmip_device.profiles[0]
await async_manipulate_test_data(hass, hmip_device, "controlMode", "AUTOMATIC") await async_manipulate_test_data(hass, hmip_device, "controlMode", "AUTOMATIC")
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
@ -223,13 +219,13 @@ async def test_hmip_heating_group_heat(hass, default_mock_hap_factory):
await async_manipulate_test_data(hass, hmip_device, "floorHeatingMode", "RADIATOR") await async_manipulate_test_data(hass, hmip_device, "floorHeatingMode", "RADIATOR")
await async_manipulate_test_data(hass, hmip_device, "valvePosition", 0.1) await async_manipulate_test_data(hass, hmip_device, "valvePosition", 0.1)
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes[ATTR_HVAC_ACTION] == CURRENT_HVAC_HEAT assert ha_state.attributes[ATTR_HVAC_ACTION] == HVACAction.HEATING
await async_manipulate_test_data(hass, hmip_device, "floorHeatingMode", "RADIATOR") await async_manipulate_test_data(hass, hmip_device, "floorHeatingMode", "RADIATOR")
await async_manipulate_test_data(hass, hmip_device, "valvePosition", 0.0) await async_manipulate_test_data(hass, hmip_device, "valvePosition", 0.0)
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes[ATTR_HVAC_ACTION] == CURRENT_HVAC_IDLE assert ha_state.attributes[ATTR_HVAC_ACTION] == HVACAction.IDLE
async def test_hmip_heating_group_cool(hass, default_mock_hap_factory): async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
@ -251,7 +247,7 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", False) await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", False)
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes["current_temperature"] == 23.8 assert ha_state.attributes["current_temperature"] == 23.8
assert ha_state.attributes["min_temp"] == 5.0 assert ha_state.attributes["min_temp"] == 5.0
assert ha_state.attributes["max_temp"] == 30.0 assert ha_state.attributes["max_temp"] == 30.0
@ -265,7 +261,7 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
"set_hvac_mode", "set_hvac_mode",
{"entity_id": entity_id, "hvac_mode": HVAC_MODE_COOL}, {"entity_id": entity_id, "hvac_mode": HVACMode.COOL},
blocking=True, blocking=True,
) )
assert len(hmip_device.mock_calls) == service_call_counter + 1 assert len(hmip_device.mock_calls) == service_call_counter + 1
@ -273,12 +269,12 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
assert hmip_device.mock_calls[-1][1] == ("MANUAL",) assert hmip_device.mock_calls[-1][1] == ("MANUAL",)
await async_manipulate_test_data(hass, hmip_device, "controlMode", "MANUAL") await async_manipulate_test_data(hass, hmip_device, "controlMode", "MANUAL")
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_COOL assert ha_state.state == HVACMode.COOL
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
"set_hvac_mode", "set_hvac_mode",
{"entity_id": entity_id, "hvac_mode": HVAC_MODE_AUTO}, {"entity_id": entity_id, "hvac_mode": HVACMode.AUTO},
blocking=True, blocking=True,
) )
assert len(hmip_device.mock_calls) == service_call_counter + 3 assert len(hmip_device.mock_calls) == service_call_counter + 3
@ -286,7 +282,7 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
assert hmip_device.mock_calls[-1][1] == ("AUTOMATIC",) assert hmip_device.mock_calls[-1][1] == ("AUTOMATIC",)
await async_manipulate_test_data(hass, hmip_device, "controlMode", "AUTO") await async_manipulate_test_data(hass, hmip_device, "controlMode", "AUTO")
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
await hass.services.async_call( await hass.services.async_call(
"climate", "climate",
@ -305,7 +301,7 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", False) await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", False)
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_OFF assert ha_state.state == HVACMode.OFF
assert ha_state.attributes[ATTR_PRESET_MODE] == "none" assert ha_state.attributes[ATTR_PRESET_MODE] == "none"
assert ha_state.attributes[ATTR_PRESET_MODES] == [] assert ha_state.attributes[ATTR_PRESET_MODES] == []
@ -315,7 +311,7 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", True) await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", True)
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_OFF assert ha_state.state == HVACMode.OFF
assert ha_state.attributes[ATTR_PRESET_MODE] == "none" assert ha_state.attributes[ATTR_PRESET_MODE] == "none"
assert ha_state.attributes[ATTR_PRESET_MODES] == [] assert ha_state.attributes[ATTR_PRESET_MODES] == []
@ -336,7 +332,7 @@ async def test_hmip_heating_group_cool(hass, default_mock_hap_factory):
await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", False) await async_manipulate_test_data(hass, hmip_device, "coolingIgnored", False)
ha_state = hass.states.get(entity_id) ha_state = hass.states.get(entity_id)
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes[ATTR_PRESET_MODE] == "Cool2" assert ha_state.attributes[ATTR_PRESET_MODE] == "Cool2"
assert ha_state.attributes[ATTR_PRESET_MODES] == ["Cool1", "Cool2"] assert ha_state.attributes[ATTR_PRESET_MODES] == ["Cool1", "Cool2"]
@ -366,7 +362,7 @@ async def test_hmip_heating_group_heat_with_switch(hass, default_mock_hap_factor
) )
assert hmip_device assert hmip_device
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes["current_temperature"] == 24.7 assert ha_state.attributes["current_temperature"] == 24.7
assert ha_state.attributes["min_temp"] == 5.0 assert ha_state.attributes["min_temp"] == 5.0
assert ha_state.attributes["max_temp"] == 30.0 assert ha_state.attributes["max_temp"] == 30.0
@ -390,7 +386,7 @@ async def test_hmip_heating_group_heat_with_radiator(hass, default_mock_hap_fact
) )
assert hmip_device assert hmip_device
assert ha_state.state == HVAC_MODE_AUTO assert ha_state.state == HVACMode.AUTO
assert ha_state.attributes["current_temperature"] == 20 assert ha_state.attributes["current_temperature"] == 20
assert ha_state.attributes["min_temp"] == 5.0 assert ha_state.attributes["min_temp"] == 5.0
assert ha_state.attributes["max_temp"] == 30.0 assert ha_state.attributes["max_temp"] == 30.0