From 6a1dc11bc660f07a769715254a40bf5d562f01e5 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Wed, 31 Jul 2024 20:54:38 +0200 Subject: [PATCH] Add blog post about new min/max validation in Climate entity (#2259) --- ...07-24-climate-min-max-temperature-check.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 blog/2024-07-24-climate-min-max-temperature-check.md diff --git a/blog/2024-07-24-climate-min-max-temperature-check.md b/blog/2024-07-24-climate-min-max-temperature-check.md new file mode 100644 index 00000000000..4c377c96f2c --- /dev/null +++ b/blog/2024-07-24-climate-min-max-temperature-check.md @@ -0,0 +1,40 @@ +--- +author: G Johansson +authorURL: https://github.com/gjohansson-ST +authorImageURL: https://avatars.githubusercontent.com/u/62932417?v=4 +authorTwitter: GJohansson +title: "Climate entity now validates temperature provided in action calls" +--- + +As of Home Assistant Core 2024.8, we have implemented validation for the temperature action call provided by the `ClimateEntity`. + +Integrations no longer need to check this within their own set temperature methods (`async_set_temperature`/`set_temperature`). + +However, it's important that integrations specify the `min_temp` and `max_temp` properties correctly, or the user might not be able to set their correct temperature if validation fails. +Likewise, integrations that handle devices which can operate on both `Celsius` and `Fahrenheit` need to convert their respective `min_temp` and `max_temp` values accordingly. + + +### Example + +Converts a device's native min/max value into the temperature_unit specified by the integration. + +```python + +class MyClimateEntity(ClimateEntity): + """Implementation of my climate entity.""" + + @property + def min_temp(self) -> float: + """Return the minimum temperature.""" + return TemperatureConverter.convert( + self.device.min_temp, UnitOfTemperature.CELSIUS, self.temperature_unit + ) + + @property + def max_temp(self) -> float: + """Return the maximum temperature.""" + return TemperatureConverter.convert( + self.device.max_temp, UnitOfTemperature.CELSIUS, self.temperature_unit + ) + +```