diff --git a/homeassistant/components/vicare/climate.py b/homeassistant/components/vicare/climate.py index 8cb0efbecd4a..5a73894a9770 100644 --- a/homeassistant/components/vicare/climate.py +++ b/homeassistant/components/vicare/climate.py @@ -220,12 +220,12 @@ class ViCareClimate(ViCareEntity, ClimateEntity): phase = None with suppress(PyViCareNotSupportedFeatureError): phase = compressor.getPhase() + # Devices do not agree on how to spell the phase, and + # some do not expose one at all, so a running compressor + # heats unless it says it is cooling. if phase == "cooling": cooling_active = True - elif phase == "heating" or phase is None: - # Phase is unset on hybrid devices that do not - # expose it: fall back to HEATING to match the - # pre-cooling-support behaviour. + else: heating_active = True if cooling_active: diff --git a/tests/components/vicare/test_climate.py b/tests/components/vicare/test_climate.py index 28ae7ae62554..6b903cfe3398 100644 --- a/tests/components/vicare/test_climate.py +++ b/tests/components/vicare/test_climate.py @@ -55,6 +55,9 @@ async def test_all_entities( ("cooling", True, HVACAction.COOLING), ("off", False, HVACAction.IDLE), ("ready", False, HVACAction.IDLE), + # Heat pumps that phrase their phase differently ("ready" while the + # compressor runs) are heating, not idle. + ("ready", True, HVACAction.HEATING), # Active compressor without a recognisable phase falls back to # HEATING (matches the pre-cooling-support behaviour for hybrid # devices that may not expose the phase property).