From 4ac020c460866dfa4c8bf655889ab82607e3b27d Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Sun, 21 Nov 2021 02:51:27 -0800 Subject: [PATCH 1/8] nws units --- homeassistant/components/nws/weather.py | 69 ++++++------------------- 1 file changed, 16 insertions(+), 53 deletions(-) diff --git a/homeassistant/components/nws/weather.py b/homeassistant/components/nws/weather.py index 44e1ed2d2c4b1..49fc198db3f7c 100644 --- a/homeassistant/components/nws/weather.py +++ b/homeassistant/components/nws/weather.py @@ -14,25 +14,17 @@ from homeassistant.const import ( CONF_LATITUDE, CONF_LONGITUDE, - LENGTH_KILOMETERS, LENGTH_METERS, - LENGTH_MILES, - PRESSURE_HPA, - PRESSURE_INHG, PRESSURE_PA, SPEED_KILOMETERS_PER_HOUR, SPEED_MILES_PER_HOUR, TEMP_CELSIUS, - TEMP_FAHRENHEIT, ) from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.util.distance import convert as convert_distance from homeassistant.util.dt import utcnow -from homeassistant.util.pressure import convert as convert_pressure from homeassistant.util.speed import convert as convert_speed -from homeassistant.util.temperature import convert as convert_temperature from . import base_unique_id, device_info from .const import ( @@ -100,6 +92,11 @@ async def async_setup_entry( class NWSWeather(WeatherEntity): """Representation of a weather condition.""" + _attr_temperature_unit = TEMP_CELSIUS + _attr_pressure_unit = PRESSURE_PA + _attr_wind_speed_unit = SPEED_KILOMETERS_PER_HOUR + _attr_visibility_unit = LENGTH_METERS + def __init__(self, entry_data, hass_data, mode, units): """Initialise the platform with a data instance and station name.""" self.nws = hass_data[NWS_DATA] @@ -156,29 +153,19 @@ def name(self): @property def temperature(self): - """Return the current temperature.""" + """Return the current temperature in degrees C.""" temp_c = None if self.observation: temp_c = self.observation.get("temperature") - if temp_c is not None: - return convert_temperature(temp_c, TEMP_CELSIUS, TEMP_FAHRENHEIT) - return None + return temp_c @property def pressure(self): - """Return the current pressure.""" + """Return the current pressure in Pa.""" pressure_pa = None if self.observation: pressure_pa = self.observation.get("seaLevelPressure") - if pressure_pa is None: - return None - if self.is_metric: - pressure = convert_pressure(pressure_pa, PRESSURE_PA, PRESSURE_HPA) - pressure = round(pressure) - else: - pressure = convert_pressure(pressure_pa, PRESSURE_PA, PRESSURE_INHG) - pressure = round(pressure, 2) - return pressure + return pressure_pa @property def humidity(self): @@ -194,16 +181,7 @@ def wind_speed(self): wind_km_hr = None if self.observation: wind_km_hr = self.observation.get("windSpeed") - if wind_km_hr is None: - return None - - if self.is_metric: - wind = wind_km_hr - else: - wind = convert_speed( - wind_km_hr, SPEED_KILOMETERS_PER_HOUR, SPEED_MILES_PER_HOUR - ) - return round(wind) + return wind_km_hr @property def wind_bearing(self): @@ -213,11 +191,6 @@ def wind_bearing(self): wind_bearing = self.observation.get("windDirection") return wind_bearing - @property - def temperature_unit(self): - """Return the unit of measurement.""" - return TEMP_FAHRENHEIT - @property def condition(self): """Return current condition.""" @@ -233,18 +206,11 @@ def condition(self): @property def visibility(self): - """Return visibility.""" + """Return visibility in meters.""" vis_m = None if self.observation: vis_m = self.observation.get("visibility") - if vis_m is None: - return None - - if self.is_metric: - vis = convert_distance(vis_m, LENGTH_METERS, LENGTH_KILOMETERS) - else: - vis = convert_distance(vis_m, LENGTH_METERS, LENGTH_MILES) - return round(vis, 0) + return vis_m @property def forecast(self): @@ -275,14 +241,11 @@ def forecast(self): data[ATTR_FORECAST_WIND_BEARING] = forecast_entry.get("windBearing") wind_speed = forecast_entry.get("windSpeedAvg") if wind_speed is not None: - if self.is_metric: - data[ATTR_FORECAST_WIND_SPEED] = round( - convert_speed( - wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR - ) + data[ATTR_FORECAST_WIND_SPEED] = round( + convert_speed( + wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR ) - else: - data[ATTR_FORECAST_WIND_SPEED] = round(wind_speed) + ) else: data[ATTR_FORECAST_WIND_SPEED] = None forecast.append(data) From 06137c597e9ec68b1e7264e238b8f5e08cb1776f Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Sun, 21 Nov 2021 02:54:58 -0800 Subject: [PATCH 2/8] openweathermap units --- .../components/openweathermap/weather.py | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/openweathermap/weather.py b/homeassistant/components/openweathermap/weather.py index d4ab99bc30be9..045f27d0f4692 100644 --- a/homeassistant/components/openweathermap/weather.py +++ b/homeassistant/components/openweathermap/weather.py @@ -3,12 +3,16 @@ 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, @@ -50,6 +54,9 @@ class OpenWeatherMapWeather(WeatherEntity): _attr_attribution = ATTRIBUTION _attr_should_poll = False _attr_temperature_unit = TEMP_CELSIUS + _attr_pressure_unit = PRESSURE_HPA + _attr_wind_speed_unit = SPEED_METERS_PER_SECOND + _attr_precipitation_unit = LENGTH_MILLIMETERS def __init__( self, @@ -80,13 +87,8 @@ def temperature(self) -> float | None: @property def 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 the pressure in hPA.""" + return self._weather_coordinator.data[ATTR_API_PRESSURE] @property def humidity(self) -> float | None: @@ -95,11 +97,8 @@ def humidity(self) -> float | None: @property def 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 the wind speed in m/s.""" + return self._weather_coordinator.data[ATTR_API_WIND_SPEED] @property def wind_bearing(self) -> float | str | None: From 71813eda574dfb210b8598a8af6fb5b3c64a7206 Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Sun, 21 Nov 2021 02:59:29 -0800 Subject: [PATCH 3/8] smhi units --- homeassistant/components/smhi/weather.py | 27 ++++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/smhi/weather.py b/homeassistant/components/smhi/weather.py index ac1ec53f67cb1..a3bcbe24a6a2a 100644 --- a/homeassistant/components/smhi/weather.py +++ b/homeassistant/components/smhi/weather.py @@ -35,7 +35,16 @@ WeatherEntity, ) from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, TEMP_CELSIUS +from homeassistant.const import ( + CONF_LATITUDE, + CONF_LONGITUDE, + CONF_NAME, + LENGTH_KILOMETERS, + LENGTH_MILLIMETERS, + PRESSURE_HPA, + SPEED_METERS_PER_SECOND, + TEMP_CELSIUS, +) from homeassistant.core import HomeAssistant from homeassistant.helpers import aiohttp_client from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -100,6 +109,12 @@ async def async_setup_entry( class SmhiWeather(WeatherEntity): """Representation of a weather entity.""" + _attr_temperature_unit = TEMP_CELSIUS + _attr_pressure_unit = PRESSURE_HPA + _attr_wind_speed_unit = SPEED_METERS_PER_SECOND + _attr_visibility_unit = LENGTH_KILOMETERS + _attr_precipitation_unit = LENGTH_MILLIMETERS + def __init__( self, name: str, @@ -157,11 +172,6 @@ def temperature(self) -> int | None: return self._forecasts[0].temperature return None - @property - def temperature_unit(self) -> str: - """Return the unit of measurement.""" - return TEMP_CELSIUS - @property def humidity(self) -> int | None: """Return the humidity.""" @@ -171,10 +181,9 @@ def humidity(self) -> int | None: @property def wind_speed(self) -> float | None: - """Return the wind speed.""" + """Return the wind speed in m/s.""" if self._forecasts is not None: - # Convert from m/s to km/h - return round(self._forecasts[0].wind_speed * 18 / 5) + return self._forecasts[0].wind_speed return None @property From 6033ce0b6acb0662130db610881ffa2b59fd1157 Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Sun, 21 Nov 2021 03:06:19 -0800 Subject: [PATCH 4/8] zamg units --- homeassistant/components/zamg/weather.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/zamg/weather.py b/homeassistant/components/zamg/weather.py index 6a5d7ccdf8170..c3e0d28020769 100644 --- a/homeassistant/components/zamg/weather.py +++ b/homeassistant/components/zamg/weather.py @@ -14,7 +14,14 @@ PLATFORM_SCHEMA, WeatherEntity, ) -from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, TEMP_CELSIUS +from homeassistant.const import ( + CONF_LATITUDE, + CONF_LONGITUDE, + CONF_NAME, + PRESSURE_HPA, + SPEED_KILOMETERS_PER_HOUR, + TEMP_CELSIUS, +) from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -80,6 +87,10 @@ def setup_platform( class ZamgWeather(WeatherEntity): """Representation of a weather condition.""" + _attr_temperature_unit = TEMP_CELSIUS + _attr_pressure_unit = PRESSURE_HPA + _attr_wind_speed_unit = SPEED_KILOMETERS_PER_HOUR + def __init__(self, zamg_data, stationname=None): """Initialise the platform with a data instance and station name.""" self.zamg_data = zamg_data @@ -108,11 +119,6 @@ def temperature(self): """Return the platform temperature.""" return self.zamg_data.get_data(ATTR_WEATHER_TEMPERATURE) - @property - def temperature_unit(self): - """Return the unit of measurement.""" - return TEMP_CELSIUS - @property def pressure(self): """Return the pressure.""" From 3622cebf452e76323af7b2027f48e879fb343bbb Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Fri, 10 Dec 2021 21:32:24 -0800 Subject: [PATCH 5/8] Fix NWS tests --- homeassistant/components/nws/weather.py | 8 ++----- tests/components/nws/const.py | 31 +++++++++++-------------- tests/components/nws/test_weather.py | 8 +++---- 3 files changed, 20 insertions(+), 27 deletions(-) diff --git a/homeassistant/components/nws/weather.py b/homeassistant/components/nws/weather.py index 49fc198db3f7c..2de66a5e00342 100644 --- a/homeassistant/components/nws/weather.py +++ b/homeassistant/components/nws/weather.py @@ -241,13 +241,9 @@ def forecast(self): data[ATTR_FORECAST_WIND_BEARING] = forecast_entry.get("windBearing") wind_speed = forecast_entry.get("windSpeedAvg") if wind_speed is not None: - data[ATTR_FORECAST_WIND_SPEED] = round( - convert_speed( - wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR - ) + data[ATTR_FORECAST_WIND_SPEED] = convert_speed( + wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR ) - else: - data[ATTR_FORECAST_WIND_SPEED] = None forecast.append(data) return forecast diff --git a/tests/components/nws/const.py b/tests/components/nws/const.py index c7387d4bf8cbb..a5e95b61e4e67 100644 --- a/tests/components/nws/const.py +++ b/tests/components/nws/const.py @@ -22,10 +22,11 @@ LENGTH_KILOMETERS, LENGTH_METERS, LENGTH_MILES, - PRESSURE_HPA, PRESSURE_INHG, PRESSURE_PA, + PRESSURE_PSI, SPEED_KILOMETERS_PER_HOUR, + SPEED_METERS_PER_SECOND, SPEED_MILES_PER_HOUR, TEMP_CELSIUS, TEMP_FAHRENHEIT, @@ -104,26 +105,22 @@ convert_temperature(10, TEMP_CELSIUS, TEMP_FAHRENHEIT) ), ATTR_WEATHER_WIND_BEARING: 180, - ATTR_WEATHER_WIND_SPEED: round( - convert_speed(10, SPEED_KILOMETERS_PER_HOUR, SPEED_MILES_PER_HOUR) - ), - ATTR_WEATHER_PRESSURE: round( - convert_pressure(100000, PRESSURE_PA, PRESSURE_INHG), 2 - ), - ATTR_WEATHER_VISIBILITY: round( - convert_distance(10000, LENGTH_METERS, LENGTH_MILES) + ATTR_WEATHER_WIND_SPEED: convert_speed( + 10, SPEED_KILOMETERS_PER_HOUR, SPEED_MILES_PER_HOUR ), + ATTR_WEATHER_PRESSURE: convert_pressure(100000, PRESSURE_PA, PRESSURE_PSI), + ATTR_WEATHER_VISIBILITY: convert_distance(10000, LENGTH_METERS, LENGTH_MILES), ATTR_WEATHER_HUMIDITY: 10, } WEATHER_EXPECTED_OBSERVATION_METRIC = { ATTR_WEATHER_TEMPERATURE: 10, ATTR_WEATHER_WIND_BEARING: 180, - ATTR_WEATHER_WIND_SPEED: 10, - ATTR_WEATHER_PRESSURE: round(convert_pressure(100000, PRESSURE_PA, PRESSURE_HPA)), - ATTR_WEATHER_VISIBILITY: round( - convert_distance(10000, LENGTH_METERS, LENGTH_KILOMETERS) + ATTR_WEATHER_WIND_SPEED: convert_speed( + 10, SPEED_KILOMETERS_PER_HOUR, SPEED_METERS_PER_SECOND ), + ATTR_WEATHER_PRESSURE: convert_pressure(100000, PRESSURE_PA, PRESSURE_PA), + ATTR_WEATHER_VISIBILITY: convert_distance(10000, LENGTH_METERS, LENGTH_KILOMETERS), ATTR_WEATHER_HUMIDITY: 10, } @@ -148,7 +145,7 @@ EXPECTED_FORECAST_IMPERIAL = { ATTR_FORECAST_CONDITION: ATTR_CONDITION_LIGHTNING_RAINY, ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00", - ATTR_FORECAST_TEMP: 10, + ATTR_FORECAST_TEMP: round(convert_temperature(10, TEMP_CELSIUS, TEMP_FAHRENHEIT)), ATTR_FORECAST_WIND_SPEED: 10, ATTR_FORECAST_WIND_BEARING: 180, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 90, @@ -157,9 +154,9 @@ EXPECTED_FORECAST_METRIC = { ATTR_FORECAST_CONDITION: ATTR_CONDITION_LIGHTNING_RAINY, ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00", - ATTR_FORECAST_TEMP: round(convert_temperature(10, TEMP_FAHRENHEIT, TEMP_CELSIUS)), - ATTR_FORECAST_WIND_SPEED: round( - convert_speed(10, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR) + ATTR_FORECAST_TEMP: 10, + ATTR_FORECAST_WIND_SPEED: convert_speed( + 10, SPEED_MILES_PER_HOUR, SPEED_METERS_PER_SECOND ), ATTR_FORECAST_WIND_BEARING: 180, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 90, diff --git a/tests/components/nws/test_weather.py b/tests/components/nws/test_weather.py index 78ab7eb4ac58e..86e07cb7f5590 100644 --- a/tests/components/nws/test_weather.py +++ b/tests/components/nws/test_weather.py @@ -70,11 +70,11 @@ async def test_imperial_metric( data = state.attributes for key, value in result_observation.items(): - assert data.get(key) == value + assert data.get(key) == pytest.approx(value, abs=0.01) forecast = data.get(ATTR_FORECAST) for key, value in result_forecast.items(): - assert forecast[0].get(key) == value + assert forecast[0].get(key) == pytest.approx(value, abs=0.01) state = hass.states.get("weather.abc_daynight") @@ -83,11 +83,11 @@ async def test_imperial_metric( data = state.attributes for key, value in result_observation.items(): - assert data.get(key) == value + assert data.get(key) == pytest.approx(value, abs=0.01) forecast = data.get(ATTR_FORECAST) for key, value in result_forecast.items(): - assert forecast[0].get(key) == value + assert forecast[0].get(key) == pytest.approx(value, abs=0.01) async def test_none_values(hass, mock_simple_nws, no_sensor): From b22bccdd1d4e866cc590baaab3ca4b0deb005736 Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Thu, 16 Dec 2021 22:09:39 -0800 Subject: [PATCH 6/8] Fix smhi test --- tests/components/smhi/test_weather.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/components/smhi/test_weather.py b/tests/components/smhi/test_weather.py index c890ad62216da..48b531e409c48 100644 --- a/tests/components/smhi/test_weather.py +++ b/tests/components/smhi/test_weather.py @@ -26,7 +26,12 @@ ATTR_WEATHER_WIND_BEARING, ATTR_WEATHER_WIND_SPEED, ) -from homeassistant.const import ATTR_ATTRIBUTION, STATE_UNKNOWN +from homeassistant.const import ( + ATTR_ATTRIBUTION, + PRESSURE_HPA, + SPEED_KILOMETERS_PER_HOUR, + STATE_UNKNOWN, +) from homeassistant.core import HomeAssistant from homeassistant.util.dt import utcnow @@ -40,6 +45,8 @@ async def test_setup_hass( hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, api_response: str ) -> None: """Test for successfully setting up the smhi integration.""" + hass.config.units.pressure_unit = PRESSURE_HPA + hass.config.units.wind_speed_unit = SPEED_KILOMETERS_PER_HOUR uri = APIURL_TEMPLATE.format(TEST_CONFIG["longitude"], TEST_CONFIG["latitude"]) aioclient_mock.get(uri, text=api_response) @@ -64,7 +71,7 @@ async def test_setup_hass( assert state.attributes[ATTR_WEATHER_PRESSURE] == 1024 assert state.attributes[ATTR_WEATHER_TEMPERATURE] == 17 assert state.attributes[ATTR_WEATHER_VISIBILITY] == 50 - assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 7 + assert state.attributes[ATTR_WEATHER_WIND_SPEED] == 6.84 assert state.attributes[ATTR_WEATHER_WIND_BEARING] == 134 assert len(state.attributes["forecast"]) == 4 From d7b975e13169e536f3e9f3023d5a57a172994652 Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Thu, 16 Dec 2021 22:09:49 -0800 Subject: [PATCH 7/8] Convert nws forecast temperature from to celsius to match fixed units --- homeassistant/components/nws/weather.py | 14 +++++++++++--- tests/components/nws/const.py | 6 ++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/nws/weather.py b/homeassistant/components/nws/weather.py index 2de66a5e00342..b3597edb2d4d7 100644 --- a/homeassistant/components/nws/weather.py +++ b/homeassistant/components/nws/weather.py @@ -19,12 +19,14 @@ SPEED_KILOMETERS_PER_HOUR, SPEED_MILES_PER_HOUR, TEMP_CELSIUS, + TEMP_FAHRENHEIT, ) from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util.dt import utcnow from homeassistant.util.speed import convert as convert_speed +from homeassistant.util.temperature import convert as convert_temperature from . import base_unique_id, device_info from .const import ( @@ -223,7 +225,6 @@ def forecast(self): ATTR_FORECAST_DETAILED_DESCRIPTION: forecast_entry.get( "detailedForecast" ), - ATTR_FORECAST_TEMP: forecast_entry.get("temperature"), ATTR_FORECAST_TIME: forecast_entry.get("startTime"), } @@ -239,8 +240,15 @@ def forecast(self): data[ATTR_FORECAST_PRECIPITATION_PROBABILITY] = precip data[ATTR_FORECAST_WIND_BEARING] = forecast_entry.get("windBearing") - wind_speed = forecast_entry.get("windSpeedAvg") - if wind_speed is not None: + if (temperature := forecast_entry.get("temperature")) is not None: + data[ATTR_FORECAST_TEMP] = convert_temperature( + temperature, TEMP_FAHRENHEIT, TEMP_CELSIUS + ) + else: + data[ + ATTR_FORECAST_TEMP + ] = None # data[ATTR_FORECAST_TEMP] must be defined + if (wind_speed := forecast_entry.get("windSpeedAvg")) is not None: data[ATTR_FORECAST_WIND_SPEED] = convert_speed( wind_speed, SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR ) diff --git a/tests/components/nws/const.py b/tests/components/nws/const.py index a5e95b61e4e67..a1b6e0f8a87d9 100644 --- a/tests/components/nws/const.py +++ b/tests/components/nws/const.py @@ -145,7 +145,7 @@ EXPECTED_FORECAST_IMPERIAL = { ATTR_FORECAST_CONDITION: ATTR_CONDITION_LIGHTNING_RAINY, ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00", - ATTR_FORECAST_TEMP: round(convert_temperature(10, TEMP_CELSIUS, TEMP_FAHRENHEIT)), + ATTR_FORECAST_TEMP: 10, ATTR_FORECAST_WIND_SPEED: 10, ATTR_FORECAST_WIND_BEARING: 180, ATTR_FORECAST_PRECIPITATION_PROBABILITY: 90, @@ -154,7 +154,9 @@ EXPECTED_FORECAST_METRIC = { ATTR_FORECAST_CONDITION: ATTR_CONDITION_LIGHTNING_RAINY, ATTR_FORECAST_TIME: "2019-08-12T20:00:00-04:00", - ATTR_FORECAST_TEMP: 10, + ATTR_FORECAST_TEMP: round( + convert_temperature(10, TEMP_FAHRENHEIT, TEMP_CELSIUS), 1 + ), ATTR_FORECAST_WIND_SPEED: convert_speed( 10, SPEED_MILES_PER_HOUR, SPEED_METERS_PER_SECOND ), From 4b8f1c02185ec0229033891ded401afc49797854 Mon Sep 17 00:00:00 2001 From: Ryan Adolf Date: Fri, 17 Dec 2021 11:05:43 -0800 Subject: [PATCH 8/8] Simplify nws methods and amend docstrings --- homeassistant/components/nws/weather.py | 34 ++++++++++--------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/nws/weather.py b/homeassistant/components/nws/weather.py index b3597edb2d4d7..12ae8574fa35a 100644 --- a/homeassistant/components/nws/weather.py +++ b/homeassistant/components/nws/weather.py @@ -156,42 +156,37 @@ def name(self): @property def temperature(self): """Return the current temperature in degrees C.""" - temp_c = None if self.observation: - temp_c = self.observation.get("temperature") - return temp_c + return self.observation.get("temperature") + return None @property def pressure(self): """Return the current pressure in Pa.""" - pressure_pa = None if self.observation: - pressure_pa = self.observation.get("seaLevelPressure") - return pressure_pa + return self.observation.get("seaLevelPressure") + return None @property def humidity(self): - """Return the name of the sensor.""" - humidity = None + """Return the current humidity as a percentage.""" if self.observation: - humidity = self.observation.get("relativeHumidity") - return humidity + return self.observation.get("relativeHumidity") + return None @property def wind_speed(self): - """Return the current windspeed.""" - wind_km_hr = None + """Return the current windspeed in km/h.""" if self.observation: - wind_km_hr = self.observation.get("windSpeed") - return wind_km_hr + return self.observation.get("windSpeed") + return None @property def wind_bearing(self): """Return the current wind bearing (degrees).""" - wind_bearing = None if self.observation: - wind_bearing = self.observation.get("windDirection") - return wind_bearing + return self.observation.get("windDirection") + return None @property def condition(self): @@ -209,10 +204,9 @@ def condition(self): @property def visibility(self): """Return visibility in meters.""" - vis_m = None if self.observation: - vis_m = self.observation.get("visibility") - return vis_m + return self.observation.get("visibility") + return None @property def forecast(self):