From 362e7226e93f7f91199b8fa82b02c64607140430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hans=20Kr=C3=B6ner?= Date: Fri, 12 Mar 2021 21:55:13 +0100 Subject: [PATCH] Additional sensors for OpenWeatherMap (#47806) --- .../components/openweathermap/const.py | 19 ++++++++++++++++++- .../weather_update_coordinator.py | 6 +++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/openweathermap/const.py b/homeassistant/components/openweathermap/const.py index 8457ceb65e9..4ab61b486f1 100644 --- a/homeassistant/components/openweathermap/const.py +++ b/homeassistant/components/openweathermap/const.py @@ -35,6 +35,7 @@ from homeassistant.const import ( PRESSURE_HPA, SPEED_METERS_PER_SECOND, TEMP_CELSIUS, + UV_INDEX, ) DOMAIN = "openweathermap" @@ -47,6 +48,7 @@ ENTRY_NAME = "name" ENTRY_WEATHER_COORDINATOR = "weather_coordinator" ATTR_API_PRECIPITATION = "precipitation" ATTR_API_DATETIME = "datetime" +ATTR_API_DEW_POINT = "dew_point" ATTR_API_WEATHER = "weather" ATTR_API_TEMPERATURE = "temperature" ATTR_API_FEELS_LIKE_TEMPERATURE = "feels_like_temperature" @@ -58,6 +60,7 @@ ATTR_API_CONDITION = "condition" ATTR_API_CLOUDS = "clouds" ATTR_API_RAIN = "rain" ATTR_API_SNOW = "snow" +ATTR_API_UV_INDEX = "uv_index" ATTR_API_WEATHER_CODE = "weather_code" ATTR_API_FORECAST = "forecast" SENSOR_NAME = "sensor_name" @@ -81,6 +84,7 @@ DEFAULT_FORECAST_MODE = FORECAST_MODE_ONECALL_DAILY MONITORED_CONDITIONS = [ ATTR_API_WEATHER, + ATTR_API_DEW_POINT, ATTR_API_TEMPERATURE, ATTR_API_FEELS_LIKE_TEMPERATURE, ATTR_API_WIND_SPEED, @@ -90,6 +94,7 @@ MONITORED_CONDITIONS = [ ATTR_API_CLOUDS, ATTR_API_RAIN, ATTR_API_SNOW, + ATTR_API_UV_INDEX, ATTR_API_CONDITION, ATTR_API_WEATHER_CODE, ] @@ -187,6 +192,11 @@ CONDITION_CLASSES = { } WEATHER_SENSOR_TYPES = { ATTR_API_WEATHER: {SENSOR_NAME: "Weather"}, + ATTR_API_DEW_POINT: { + SENSOR_NAME: "Dew Point", + SENSOR_UNIT: TEMP_CELSIUS, + SENSOR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE, + }, ATTR_API_TEMPERATURE: { SENSOR_NAME: "Temperature", SENSOR_UNIT: TEMP_CELSIUS, @@ -215,13 +225,20 @@ WEATHER_SENSOR_TYPES = { ATTR_API_CLOUDS: {SENSOR_NAME: "Cloud coverage", SENSOR_UNIT: PERCENTAGE}, ATTR_API_RAIN: {SENSOR_NAME: "Rain", SENSOR_UNIT: LENGTH_MILLIMETERS}, ATTR_API_SNOW: {SENSOR_NAME: "Snow", SENSOR_UNIT: LENGTH_MILLIMETERS}, + ATTR_API_UV_INDEX: { + SENSOR_NAME: "UV Index", + SENSOR_UNIT: UV_INDEX, + }, ATTR_API_CONDITION: {SENSOR_NAME: "Condition"}, ATTR_API_WEATHER_CODE: {SENSOR_NAME: "Weather Code"}, } FORECAST_SENSOR_TYPES = { ATTR_FORECAST_CONDITION: {SENSOR_NAME: "Condition"}, ATTR_FORECAST_PRECIPITATION: {SENSOR_NAME: "Precipitation"}, - ATTR_FORECAST_PRECIPITATION_PROBABILITY: {SENSOR_NAME: "Precipitation probability"}, + ATTR_FORECAST_PRECIPITATION_PROBABILITY: { + SENSOR_NAME: "Precipitation probability", + SENSOR_UNIT: PERCENTAGE, + }, ATTR_FORECAST_PRESSURE: {SENSOR_NAME: "Pressure"}, ATTR_FORECAST_TEMP: { SENSOR_NAME: "Temperature", diff --git a/homeassistant/components/openweathermap/weather_update_coordinator.py b/homeassistant/components/openweathermap/weather_update_coordinator.py index 07b8c507c87..26ada47bef6 100644 --- a/homeassistant/components/openweathermap/weather_update_coordinator.py +++ b/homeassistant/components/openweathermap/weather_update_coordinator.py @@ -25,6 +25,7 @@ from homeassistant.util import dt from .const import ( ATTR_API_CLOUDS, ATTR_API_CONDITION, + ATTR_API_DEW_POINT, ATTR_API_FEELS_LIKE_TEMPERATURE, ATTR_API_FORECAST, ATTR_API_HUMIDITY, @@ -32,6 +33,7 @@ from .const import ( ATTR_API_RAIN, ATTR_API_SNOW, ATTR_API_TEMPERATURE, + ATTR_API_UV_INDEX, ATTR_API_WEATHER, ATTR_API_WEATHER_CODE, ATTR_API_WIND_BEARING, @@ -119,6 +121,7 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator): ATTR_API_FEELS_LIKE_TEMPERATURE: current_weather.temperature("celsius").get( "feels_like" ), + ATTR_API_DEW_POINT: (round(current_weather.dewpoint / 100, 1)), ATTR_API_PRESSURE: current_weather.pressure.get("press"), ATTR_API_HUMIDITY: current_weather.humidity, ATTR_API_WIND_BEARING: current_weather.wind().get("deg"), @@ -128,6 +131,7 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator): ATTR_API_SNOW: self._get_snow(current_weather.snow), ATTR_API_WEATHER: current_weather.detailed_status, ATTR_API_CONDITION: self._get_condition(current_weather.weather_code), + ATTR_API_UV_INDEX: current_weather.uvi, ATTR_API_WEATHER_CODE: current_weather.weather_code, ATTR_API_FORECAST: forecast_weather, } @@ -151,7 +155,7 @@ class WeatherUpdateCoordinator(DataUpdateCoordinator): entry.rain, entry.snow ), ATTR_FORECAST_PRECIPITATION_PROBABILITY: ( - entry.precipitation_probability * 100 + round(entry.precipitation_probability * 100) ), ATTR_FORECAST_PRESSURE: entry.pressure.get("press"), ATTR_FORECAST_WIND_SPEED: entry.wind().get("speed"),