Issue 444 ha 2024.04.3 (#452)

* HA 2024.4.3 and release

* [#444] - fix initial temp values with standalone presets

---------

Co-authored-by: Jean-Marc Collin <jean-marc.collin-extern@renault.com>
This commit is contained in:
Jean-Marc Collin
2024-04-23 07:58:22 +02:00
committed by GitHub
parent acd22d1fc4
commit 7b657ffabf
2 changed files with 44 additions and 6 deletions

View File

@@ -14,6 +14,6 @@
"quality_scale": "silver", "quality_scale": "silver",
"requirements": [], "requirements": [],
"ssdp": [], "ssdp": [],
"version": "6.2.2", "version": "6.2.3",
"zeroconf": [] "zeroconf": []
} }

View File

@@ -11,6 +11,9 @@ from homeassistant.components.number import (
NumberMode, NumberMode,
NumberDeviceClass, NumberDeviceClass,
DOMAIN as NUMBER_DOMAIN, DOMAIN as NUMBER_DOMAIN,
DEFAULT_MAX_VALUE,
DEFAULT_MIN_VALUE,
DEFAULT_STEP,
) )
from homeassistant.components.climate import ( from homeassistant.components.climate import (
PRESET_BOOST, PRESET_BOOST,
@@ -53,6 +56,7 @@ from .const import (
CONF_USE_PRESENCE_FEATURE, CONF_USE_PRESENCE_FEATURE,
CONF_USE_CENTRAL_BOILER_FEATURE, CONF_USE_CENTRAL_BOILER_FEATURE,
overrides, overrides,
CONF_USE_MAIN_CENTRAL_CONFIG,
) )
PRESET_ICON_MAPPING = { PRESET_ICON_MAPPING = {
@@ -341,7 +345,10 @@ class CentralConfigTemperatureNumber(
async def async_set_native_value(self, value: float) -> None: async def async_set_native_value(self, value: float) -> None:
"""The value have change from the Number Entity in UI""" """The value have change from the Number Entity in UI"""
float_value = float(value) float_value = float(value)
old_value = float(self._attr_native_value) old_value = (
None if self._attr_native_value is None else float(self._attr_native_value)
)
if float_value == old_value: if float_value == old_value:
return return
@@ -395,9 +402,11 @@ class TemperatureNumber( # pylint: disable=abstract-method
self._attr_device_class = NumberDeviceClass.TEMPERATURE self._attr_device_class = NumberDeviceClass.TEMPERATURE
self._attr_native_unit_of_measurement = UnitOfTemperature.CELSIUS self._attr_native_unit_of_measurement = UnitOfTemperature.CELSIUS
self._attr_native_step = entry_infos.get(CONF_STEP_TEMPERATURE, 0.5) self._has_central_main_attributes = entry_infos.get(
self._attr_native_min_value = entry_infos.get(CONF_TEMP_MIN) CONF_USE_MAIN_CENTRAL_CONFIG, False
self._attr_native_max_value = entry_infos.get(CONF_TEMP_MAX) )
self.init_min_max_step(entry_infos)
# Initialize the values if included into the entry_infos. This will do # Initialize the values if included into the entry_infos. This will do
# the temperature migration. # the temperature migration.
@@ -459,7 +468,9 @@ class TemperatureNumber( # pylint: disable=abstract-method
return return
float_value = float(value) float_value = float(value)
old_value = float(self._attr_native_value) old_value = (
None if self._attr_native_value is None else float(self._attr_native_value)
)
if float_value == old_value: if float_value == old_value:
return return
@@ -476,6 +487,10 @@ class TemperatureNumber( # pylint: disable=abstract-method
) )
) )
# We set the min, max and step from central config if relevant because it is possible that central config
# was not loaded at startup
self.init_min_max_step()
def __str__(self): def __str__(self):
return f"VersatileThermostat-{self.name}" return f"VersatileThermostat-{self.name}"
@@ -485,3 +500,26 @@ class TemperatureNumber( # pylint: disable=abstract-method
if not self.my_climate: if not self.my_climate:
return UnitOfTemperature.CELSIUS return UnitOfTemperature.CELSIUS
return self.my_climate.temperature_unit return self.my_climate.temperature_unit
def init_min_max_step(self, entry_infos=None):
"""Initialize min, max and step value from config or from central config"""
if self._has_central_main_attributes:
vthermapi: VersatileThermostatAPI = VersatileThermostatAPI.get_vtherm_api()
central_config = vthermapi.find_central_configuration()
if central_config:
self._attr_native_step = central_config.data.get(CONF_STEP_TEMPERATURE)
self._attr_native_min_value = central_config.data.get(CONF_TEMP_MIN)
self._attr_native_max_value = central_config.data.get(CONF_TEMP_MAX)
return
if entry_infos:
self._attr_native_step = entry_infos.get(
CONF_STEP_TEMPERATURE, DEFAULT_STEP
)
self._attr_native_min_value = entry_infos.get(
CONF_TEMP_MIN, DEFAULT_MIN_VALUE
)
self._attr_native_max_value = entry_infos.get(
CONF_TEMP_MAX, DEFAULT_MAX_VALUE
)