From dd7a06b9dca8a04152f6c4ef4828c8e214260393 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 23 Sep 2022 17:33:32 +0200 Subject: [PATCH] Use unit_conversion in components (#78991) --- .../components/google_assistant/trait.py | 23 +++++++++++-------- homeassistant/components/homekit/util.py | 6 ++--- homeassistant/components/smhi/weather.py | 5 ++-- homeassistant/components/template/weather.py | 20 ++++++++-------- homeassistant/components/weather/__init__.py | 20 ++++++++-------- 5 files changed, 39 insertions(+), 35 deletions(-) diff --git a/homeassistant/components/google_assistant/trait.py b/homeassistant/components/google_assistant/trait.py index d7b6b45de87..a76b0a7d687 100644 --- a/homeassistant/components/google_assistant/trait.py +++ b/homeassistant/components/google_assistant/trait.py @@ -68,11 +68,12 @@ from homeassistant.const import ( ) from homeassistant.core import DOMAIN as HA_DOMAIN from homeassistant.helpers.network import get_url -from homeassistant.util import color as color_util, dt, temperature as temp_util +from homeassistant.util import color as color_util, dt from homeassistant.util.percentage import ( ordered_list_item_to_percentage, percentage_to_ordered_list_item, ) +from homeassistant.util.unit_conversion import TemperatureConverter from .const import ( CHALLENGE_ACK_NEEDED, @@ -843,7 +844,9 @@ class TemperatureControlTrait(_Trait): unit = self.hass.config.units.temperature_unit current_temp = self.state.state if current_temp not in (STATE_UNKNOWN, STATE_UNAVAILABLE): - temp = round(temp_util.convert(float(current_temp), unit, TEMP_CELSIUS), 1) + temp = round( + TemperatureConverter.convert(float(current_temp), unit, TEMP_CELSIUS), 1 + ) response["temperatureSetpointCelsius"] = temp response["temperatureAmbientCelsius"] = temp @@ -948,7 +951,7 @@ class TemperatureSettingTrait(_Trait): current_temp = attrs.get(climate.ATTR_CURRENT_TEMPERATURE) if current_temp is not None: response["thermostatTemperatureAmbient"] = round( - temp_util.convert(current_temp, unit, TEMP_CELSIUS), 1 + TemperatureConverter.convert(current_temp, unit, TEMP_CELSIUS), 1 ) current_humidity = attrs.get(climate.ATTR_CURRENT_HUMIDITY) @@ -958,13 +961,13 @@ class TemperatureSettingTrait(_Trait): if operation in (climate.HVACMode.AUTO, climate.HVACMode.HEAT_COOL): if supported & climate.SUPPORT_TARGET_TEMPERATURE_RANGE: response["thermostatTemperatureSetpointHigh"] = round( - temp_util.convert( + TemperatureConverter.convert( attrs[climate.ATTR_TARGET_TEMP_HIGH], unit, TEMP_CELSIUS ), 1, ) response["thermostatTemperatureSetpointLow"] = round( - temp_util.convert( + TemperatureConverter.convert( attrs[climate.ATTR_TARGET_TEMP_LOW], unit, TEMP_CELSIUS ), 1, @@ -972,14 +975,14 @@ class TemperatureSettingTrait(_Trait): else: if (target_temp := attrs.get(ATTR_TEMPERATURE)) is not None: target_temp = round( - temp_util.convert(target_temp, unit, TEMP_CELSIUS), 1 + TemperatureConverter.convert(target_temp, unit, TEMP_CELSIUS), 1 ) response["thermostatTemperatureSetpointHigh"] = target_temp response["thermostatTemperatureSetpointLow"] = target_temp else: if (target_temp := attrs.get(ATTR_TEMPERATURE)) is not None: response["thermostatTemperatureSetpoint"] = round( - temp_util.convert(target_temp, unit, TEMP_CELSIUS), 1 + TemperatureConverter.convert(target_temp, unit, TEMP_CELSIUS), 1 ) return response @@ -992,7 +995,7 @@ class TemperatureSettingTrait(_Trait): max_temp = self.state.attributes[climate.ATTR_MAX_TEMP] if command == COMMAND_THERMOSTAT_TEMPERATURE_SETPOINT: - temp = temp_util.convert( + temp = TemperatureConverter.convert( params["thermostatTemperatureSetpoint"], TEMP_CELSIUS, unit ) if unit == TEMP_FAHRENHEIT: @@ -1013,7 +1016,7 @@ class TemperatureSettingTrait(_Trait): ) elif command == COMMAND_THERMOSTAT_TEMPERATURE_SET_RANGE: - temp_high = temp_util.convert( + temp_high = TemperatureConverter.convert( params["thermostatTemperatureSetpointHigh"], TEMP_CELSIUS, unit ) if unit == TEMP_FAHRENHEIT: @@ -1028,7 +1031,7 @@ class TemperatureSettingTrait(_Trait): ), ) - temp_low = temp_util.convert( + temp_low = TemperatureConverter.convert( params["thermostatTemperatureSetpointLow"], TEMP_CELSIUS, unit ) if unit == TEMP_FAHRENHEIT: diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index b7af7d516dd..445b73cccbe 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -40,7 +40,7 @@ from homeassistant.const import ( from homeassistant.core import Event, HomeAssistant, State, callback, split_entity_id import homeassistant.helpers.config_validation as cv from homeassistant.helpers.storage import STORAGE_DIR -import homeassistant.util.temperature as temp_util +from homeassistant.util.unit_conversion import TemperatureConverter from .const import ( AUDIO_CODEC_COPY, @@ -391,12 +391,12 @@ def cleanup_name_for_homekit(name: str | None) -> str: def temperature_to_homekit(temperature: float | int, unit: str) -> float: """Convert temperature to Celsius for HomeKit.""" - return round(temp_util.convert(temperature, unit, TEMP_CELSIUS), 1) + return round(TemperatureConverter.convert(temperature, unit, TEMP_CELSIUS), 1) def temperature_to_states(temperature: float | int, unit: str) -> float: """Convert temperature back from Celsius to Home Assistant unit.""" - return round(temp_util.convert(temperature, TEMP_CELSIUS, unit) * 2) / 2 + return round(TemperatureConverter.convert(temperature, TEMP_CELSIUS, unit) * 2) / 2 def density_to_air_quality(density: float) -> int: diff --git a/homeassistant/components/smhi/weather.py b/homeassistant/components/smhi/weather.py index f8afcb7b59a..a02a627b7f2 100644 --- a/homeassistant/components/smhi/weather.py +++ b/homeassistant/components/smhi/weather.py @@ -57,7 +57,8 @@ from homeassistant.helpers.device_registry import DeviceEntryType from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.event import async_call_later -from homeassistant.util import Throttle, slugify, speed as speed_util +from homeassistant.util import Throttle, slugify +from homeassistant.util.unit_conversion import SpeedConverter from .const import ( ATTR_SMHI_CLOUDINESS, @@ -155,7 +156,7 @@ class SmhiWeather(WeatherEntity): def extra_state_attributes(self) -> Mapping[str, Any] | None: """Return additional attributes.""" if self._forecasts: - wind_gust = speed_util.convert( + wind_gust = SpeedConverter.convert( self._forecasts[0].wind_gust, SPEED_METERS_PER_SECOND, self._wind_speed_unit, diff --git a/homeassistant/components/template/weather.py b/homeassistant/components/template/weather.py index d65e03b9656..9c1680d1a5d 100644 --- a/homeassistant/components/template/weather.py +++ b/homeassistant/components/template/weather.py @@ -30,11 +30,11 @@ from homeassistant.helpers.config_validation import PLATFORM_SCHEMA from homeassistant.helpers.entity import async_generate_entity_id from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -from homeassistant.util import ( - distance as distance_util, - pressure as pressure_util, - speed as speed_util, - temperature as temp_util, +from homeassistant.util.unit_conversion import ( + DistanceConverter, + PressureConverter, + SpeedConverter, + TemperatureConverter, ) from .template_entity import TemplateEntity, rewrite_common_legacy_to_modern_conf @@ -87,11 +87,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( vol.Optional(CONF_VISIBILITY_TEMPLATE): cv.template, vol.Optional(CONF_FORECAST_TEMPLATE): cv.template, vol.Optional(CONF_UNIQUE_ID): cv.string, - vol.Optional(CONF_TEMPERATURE_UNIT): vol.In(temp_util.VALID_UNITS), - vol.Optional(CONF_PRESSURE_UNIT): vol.In(pressure_util.VALID_UNITS), - vol.Optional(CONF_WIND_SPEED_UNIT): vol.In(speed_util.VALID_UNITS), - vol.Optional(CONF_VISIBILITY_UNIT): vol.In(distance_util.VALID_UNITS), - vol.Optional(CONF_PRECIPITATION_UNIT): vol.In(distance_util.VALID_UNITS), + vol.Optional(CONF_TEMPERATURE_UNIT): vol.In(TemperatureConverter.VALID_UNITS), + vol.Optional(CONF_PRESSURE_UNIT): vol.In(PressureConverter.VALID_UNITS), + vol.Optional(CONF_WIND_SPEED_UNIT): vol.In(SpeedConverter.VALID_UNITS), + vol.Optional(CONF_VISIBILITY_UNIT): vol.In(DistanceConverter.VALID_UNITS), + vol.Optional(CONF_PRECIPITATION_UNIT): vol.In(DistanceConverter.VALID_UNITS), } ) diff --git a/homeassistant/components/weather/__init__.py b/homeassistant/components/weather/__init__.py index b28cd143b20..bb358e8d980 100644 --- a/homeassistant/components/weather/__init__.py +++ b/homeassistant/components/weather/__init__.py @@ -38,11 +38,11 @@ from homeassistant.helpers.config_validation import ( # noqa: F401 from homeassistant.helpers.entity import Entity, EntityDescription from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.typing import ConfigType -from homeassistant.util import ( - distance as distance_util, - pressure as pressure_util, - speed as speed_util, - temperature as temperature_util, +from homeassistant.util.unit_conversion import ( + DistanceConverter, + PressureConverter, + SpeedConverter, + TemperatureConverter, ) _LOGGER = logging.getLogger(__name__) @@ -126,11 +126,11 @@ VALID_UNITS_WIND_SPEED: tuple[str, ...] = ( ) UNIT_CONVERSIONS: dict[str, Callable[[float, str, str], float]] = { - ATTR_WEATHER_PRESSURE_UNIT: pressure_util.convert, - ATTR_WEATHER_TEMPERATURE_UNIT: temperature_util.convert, - ATTR_WEATHER_VISIBILITY_UNIT: distance_util.convert, - ATTR_WEATHER_PRECIPITATION_UNIT: distance_util.convert, - ATTR_WEATHER_WIND_SPEED_UNIT: speed_util.convert, + ATTR_WEATHER_PRESSURE_UNIT: PressureConverter.convert, + ATTR_WEATHER_TEMPERATURE_UNIT: TemperatureConverter.convert, + ATTR_WEATHER_VISIBILITY_UNIT: DistanceConverter.convert, + ATTR_WEATHER_PRECIPITATION_UNIT: DistanceConverter.convert, + ATTR_WEATHER_WIND_SPEED_UNIT: SpeedConverter.convert, } VALID_UNITS: dict[str, tuple[str, ...]] = {