From e57f34f0f2249aa97d3f93339bfe54e88ab4b2bf Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 23 Jun 2022 21:01:08 +0200 Subject: [PATCH] Migrate openweathermap to native_* (#73913) --- .../components/openweathermap/const.py | 16 +++++----- .../components/openweathermap/weather.py | 32 +++++++++---------- .../weather_update_coordinator.py | 28 +++++++++------- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/homeassistant/components/openweathermap/const.py b/homeassistant/components/openweathermap/const.py index 8d673507929..027c08fd84b 100644 --- a/homeassistant/components/openweathermap/const.py +++ b/homeassistant/components/openweathermap/const.py @@ -22,11 +22,11 @@ from homeassistant.components.weather import ( ATTR_CONDITION_WINDY, ATTR_CONDITION_WINDY_VARIANT, ATTR_FORECAST_CONDITION, - ATTR_FORECAST_PRECIPITATION, + ATTR_FORECAST_NATIVE_PRECIPITATION, + ATTR_FORECAST_NATIVE_PRESSURE, + ATTR_FORECAST_NATIVE_TEMP, + ATTR_FORECAST_NATIVE_TEMP_LOW, ATTR_FORECAST_PRECIPITATION_PROBABILITY, - ATTR_FORECAST_PRESSURE, - ATTR_FORECAST_TEMP, - ATTR_FORECAST_TEMP_LOW, ATTR_FORECAST_TIME, ) from homeassistant.const import ( @@ -266,7 +266,7 @@ FORECAST_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( name="Condition", ), SensorEntityDescription( - key=ATTR_FORECAST_PRECIPITATION, + key=ATTR_FORECAST_NATIVE_PRECIPITATION, name="Precipitation", native_unit_of_measurement=LENGTH_MILLIMETERS, ), @@ -276,19 +276,19 @@ FORECAST_SENSOR_TYPES: tuple[SensorEntityDescription, ...] = ( native_unit_of_measurement=PERCENTAGE, ), SensorEntityDescription( - key=ATTR_FORECAST_PRESSURE, + key=ATTR_FORECAST_NATIVE_PRESSURE, name="Pressure", native_unit_of_measurement=PRESSURE_HPA, device_class=SensorDeviceClass.PRESSURE, ), SensorEntityDescription( - key=ATTR_FORECAST_TEMP, + key=ATTR_FORECAST_NATIVE_TEMP, name="Temperature", native_unit_of_measurement=TEMP_CELSIUS, device_class=SensorDeviceClass.TEMPERATURE, ), SensorEntityDescription( - key=ATTR_FORECAST_TEMP_LOW, + key=ATTR_FORECAST_NATIVE_TEMP_LOW, name="Temperature Low", native_unit_of_measurement=TEMP_CELSIUS, device_class=SensorDeviceClass.TEMPERATURE, diff --git a/homeassistant/components/openweathermap/weather.py b/homeassistant/components/openweathermap/weather.py index d4ab99bc30b..fce6efdf3c5 100644 --- a/homeassistant/components/openweathermap/weather.py +++ b/homeassistant/components/openweathermap/weather.py @@ -3,12 +3,16 @@ from __future__ import annotations from homeassistant.components.weather import Forecast, WeatherEntity from homeassistant.config_entries import ConfigEntry -from homeassistant.const import PRESSURE_HPA, PRESSURE_INHG, TEMP_CELSIUS +from homeassistant.const import ( + LENGTH_MILLIMETERS, + PRESSURE_HPA, + SPEED_METERS_PER_SECOND, + TEMP_CELSIUS, +) from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceEntryType from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.util.pressure import convert as pressure_convert from .const import ( ATTR_API_CONDITION, @@ -49,7 +53,11 @@ class OpenWeatherMapWeather(WeatherEntity): _attr_attribution = ATTRIBUTION _attr_should_poll = False - _attr_temperature_unit = TEMP_CELSIUS + + _attr_native_precipitation_unit = LENGTH_MILLIMETERS + _attr_native_pressure_unit = PRESSURE_HPA + _attr_native_temperature_unit = TEMP_CELSIUS + _attr_native_wind_speed_unit = SPEED_METERS_PER_SECOND def __init__( self, @@ -74,19 +82,14 @@ class OpenWeatherMapWeather(WeatherEntity): return self._weather_coordinator.data[ATTR_API_CONDITION] @property - def temperature(self) -> float | None: + def native_temperature(self) -> float | None: """Return the temperature.""" return self._weather_coordinator.data[ATTR_API_TEMPERATURE] @property - def pressure(self) -> float | None: + def native_pressure(self) -> float | None: """Return the pressure.""" - pressure = self._weather_coordinator.data[ATTR_API_PRESSURE] - # OpenWeatherMap returns pressure in hPA, so convert to - # inHg if we aren't using metric. - if not self.hass.config.units.is_metric and pressure: - return pressure_convert(pressure, PRESSURE_HPA, PRESSURE_INHG) - return pressure + return self._weather_coordinator.data[ATTR_API_PRESSURE] @property def humidity(self) -> float | None: @@ -94,12 +97,9 @@ class OpenWeatherMapWeather(WeatherEntity): return self._weather_coordinator.data[ATTR_API_HUMIDITY] @property - def wind_speed(self) -> float | None: + def native_wind_speed(self) -> float | None: """Return the wind speed.""" - wind_speed = self._weather_coordinator.data[ATTR_API_WIND_SPEED] - if self.hass.config.units.name == "imperial": - return round(wind_speed * 2.24, 2) - return round(wind_speed * 3.6, 2) + return self._weather_coordinator.data[ATTR_API_WIND_SPEED] @property def wind_bearing(self) -> float | str | None: diff --git a/homeassistant/components/openweathermap/weather_update_coordinator.py b/homeassistant/components/openweathermap/weather_update_coordinator.py index 26341621051..36511424737 100644 --- a/homeassistant/components/openweathermap/weather_update_coordinator.py +++ b/homeassistant/components/openweathermap/weather_update_coordinator.py @@ -9,14 +9,14 @@ from homeassistant.components.weather import ( ATTR_CONDITION_CLEAR_NIGHT, ATTR_CONDITION_SUNNY, ATTR_FORECAST_CONDITION, - ATTR_FORECAST_PRECIPITATION, + ATTR_FORECAST_NATIVE_PRECIPITATION, + ATTR_FORECAST_NATIVE_PRESSURE, + ATTR_FORECAST_NATIVE_TEMP, + ATTR_FORECAST_NATIVE_TEMP_LOW, + ATTR_FORECAST_NATIVE_WIND_SPEED, ATTR_FORECAST_PRECIPITATION_PROBABILITY, - ATTR_FORECAST_PRESSURE, - ATTR_FORECAST_TEMP, - ATTR_FORECAST_TEMP_LOW, ATTR_FORECAST_TIME, ATTR_FORECAST_WIND_BEARING, - ATTR_FORECAST_WIND_SPEED, ) from homeassistant.helpers import sun from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed @@ -161,14 +161,14 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator): ATTR_FORECAST_TIME: dt.utc_from_timestamp( entry.reference_time("unix") ).isoformat(), - ATTR_FORECAST_PRECIPITATION: self._calc_precipitation( + ATTR_FORECAST_NATIVE_PRECIPITATION: self._calc_precipitation( entry.rain, entry.snow ), ATTR_FORECAST_PRECIPITATION_PROBABILITY: ( round(entry.precipitation_probability * 100) ), - ATTR_FORECAST_PRESSURE: entry.pressure.get("press"), - ATTR_FORECAST_WIND_SPEED: entry.wind().get("speed"), + ATTR_FORECAST_NATIVE_PRESSURE: entry.pressure.get("press"), + ATTR_FORECAST_NATIVE_WIND_SPEED: entry.wind().get("speed"), ATTR_FORECAST_WIND_BEARING: entry.wind().get("deg"), ATTR_FORECAST_CONDITION: self._get_condition( entry.weather_code, entry.reference_time("unix") @@ -178,10 +178,16 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator): temperature_dict = entry.temperature("celsius") if "max" in temperature_dict and "min" in temperature_dict: - forecast[ATTR_FORECAST_TEMP] = entry.temperature("celsius").get("max") - forecast[ATTR_FORECAST_TEMP_LOW] = entry.temperature("celsius").get("min") + forecast[ATTR_FORECAST_NATIVE_TEMP] = entry.temperature("celsius").get( + "max" + ) + forecast[ATTR_FORECAST_NATIVE_TEMP_LOW] = entry.temperature("celsius").get( + "min" + ) else: - forecast[ATTR_FORECAST_TEMP] = entry.temperature("celsius").get("temp") + forecast[ATTR_FORECAST_NATIVE_TEMP] = entry.temperature("celsius").get( + "temp" + ) return forecast