Fix current temperature calculation for incomfort boiler (#129496)

This commit is contained in:
Jan Bouwhuis 2024-10-31 14:57:09 +01:00 committed by Bram Kragten
parent d10553d624
commit 2ac0ff03fc
2 changed files with 49 additions and 1 deletions

View File

@ -54,12 +54,16 @@ class IncomfortWaterHeater(IncomfortBoilerEntity, WaterHeaterEntity):
return {k: v for k, v in self._heater.status.items() if k in HEATER_ATTRS}
@property
def current_temperature(self) -> float:
def current_temperature(self) -> float | None:
"""Return the current temperature."""
if self._heater.is_tapping:
return self._heater.tap_temp
if self._heater.is_pumping:
return self._heater.heater_temp
if self._heater.heater_temp is None:
return self._heater.tap_temp
if self._heater.tap_temp is None:
return self._heater.heater_temp
return max(self._heater.heater_temp, self._heater.tap_temp)
@property

View File

@ -2,6 +2,7 @@
from unittest.mock import MagicMock, patch
import pytest
from syrupy import SnapshotAssertion
from homeassistant.config_entries import ConfigEntry
@ -9,6 +10,8 @@ from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from .conftest import MOCK_HEATER_STATUS
from tests.common import snapshot_platform
@ -23,3 +26,44 @@ async def test_setup_platform(
"""Test the incomfort entities are set up correctly."""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
@pytest.mark.parametrize(
("mock_heater_status", "current_temperature"),
[
(MOCK_HEATER_STATUS, 35.3),
(MOCK_HEATER_STATUS | {"is_tapping": True}, 30.2),
(MOCK_HEATER_STATUS | {"is_pumping": True}, 35.3),
(MOCK_HEATER_STATUS | {"heater_temp": None}, 30.2),
(MOCK_HEATER_STATUS | {"tap_temp": None}, 35.3),
(MOCK_HEATER_STATUS | {"heater_temp": None, "tap_temp": None}, None),
],
ids=[
"both_temps_available_choose_highest",
"is_tapping_choose_tapping_temp",
"is_pumping_choose_heater_temp",
"heater_temp_not_available_choose_tapping_temp",
"tapping_temp_not_available_choose_heater_temp",
"tapping_and_heater_temp_not_available_unknown",
],
)
@patch("homeassistant.components.incomfort.PLATFORMS", [Platform.WATER_HEATER])
async def test_current_temperature_cases(
hass: HomeAssistant,
mock_incomfort: MagicMock,
entity_registry: er.EntityRegistry,
mock_config_entry: ConfigEntry,
current_temperature: float | None,
) -> None:
"""Test incomfort entities with alternate current temperature calculation.
The boilers current temperature is calculated from the testdata:
heater_temp: 35.34
tap_temp: 30.21
It is based on the operating mode as the boiler can heat tap water or
the house.
"""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
assert (state := hass.states.get("water_heater.boiler")) is not None
assert state.attributes.get("current_temperature") == current_temperature