diff --git a/homeassistant/components/template/weather.py b/homeassistant/components/template/weather.py index 9c1680d1a5d..81a6badfc34 100644 --- a/homeassistant/components/template/weather.py +++ b/homeassistant/components/template/weather.py @@ -72,6 +72,10 @@ CONF_PRESSURE_UNIT = "pressure_unit" CONF_WIND_SPEED_UNIT = "wind_speed_unit" CONF_VISIBILITY_UNIT = "visibility_unit" CONF_PRECIPITATION_UNIT = "precipitation_unit" +CONF_WIND_GUST_SPEED_TEMPLATE = "wind_gust_speed_template" +CONF_CLOUD_COVERAGE_TEMPLATE = "cloud_coverage_template" +CONF_DEW_POINT_TEMPLATE = "dew_point_template" +CONF_APPARENT_TEMPERATURE_TEMPLATE = "apparent_temperature_template" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -92,6 +96,10 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( 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), + vol.Optional(CONF_WIND_GUST_SPEED_TEMPLATE): cv.template, + vol.Optional(CONF_CLOUD_COVERAGE_TEMPLATE): cv.template, + vol.Optional(CONF_DEW_POINT_TEMPLATE): cv.template, + vol.Optional(CONF_APPARENT_TEMPERATURE_TEMPLATE): cv.template, } ) @@ -143,6 +151,12 @@ class WeatherTemplate(TemplateEntity, WeatherEntity): self._ozone_template = config.get(CONF_OZONE_TEMPLATE) self._visibility_template = config.get(CONF_VISIBILITY_TEMPLATE) self._forecast_template = config.get(CONF_FORECAST_TEMPLATE) + self._wind_gust_speed_template = config.get(CONF_WIND_GUST_SPEED_TEMPLATE) + self._cloud_coverage_template = config.get(CONF_CLOUD_COVERAGE_TEMPLATE) + self._dew_point_template = config.get(CONF_DEW_POINT_TEMPLATE) + self._apparent_temperature_template = config.get( + CONF_APPARENT_TEMPERATURE_TEMPLATE + ) self._attr_native_precipitation_unit = config.get(CONF_PRECIPITATION_UNIT) self._attr_native_pressure_unit = config.get(CONF_PRESSURE_UNIT) @@ -161,6 +175,10 @@ class WeatherTemplate(TemplateEntity, WeatherEntity): self._wind_bearing = None self._ozone = None self._visibility = None + self._wind_gust_speed = None + self._cloud_coverage = None + self._dew_point = None + self._apparent_temperature = None self._forecast: list[Forecast] = [] @property @@ -203,6 +221,26 @@ class WeatherTemplate(TemplateEntity, WeatherEntity): """Return the air pressure.""" return self._pressure + @property + def native_wind_gust_speed(self) -> float | None: + """Return the wind gust speed.""" + return self._wind_gust_speed + + @property + def cloud_coverage(self) -> float | None: + """Return the cloud coverage.""" + return self._cloud_coverage + + @property + def native_dew_point(self) -> float | None: + """Return the dew point.""" + return self._dew_point + + @property + def native_apparent_temperature(self) -> float | None: + """Return the apparent temperature.""" + return self._apparent_temperature + @property def forecast(self) -> list[Forecast]: """Return the forecast.""" @@ -264,6 +302,26 @@ class WeatherTemplate(TemplateEntity, WeatherEntity): "_visibility", self._visibility_template, ) + if self._wind_gust_speed_template: + self.add_template_attribute( + "_wind_gust_speed", + self._wind_gust_speed_template, + ) + if self._cloud_coverage_template: + self.add_template_attribute( + "_cloud_coverage", + self._cloud_coverage_template, + ) + if self._dew_point_template: + self.add_template_attribute( + "_dew_point", + self._dew_point_template, + ) + if self._apparent_temperature_template: + self.add_template_attribute( + "_apparent_temperature", + self._apparent_temperature_template, + ) if self._forecast_template: self.add_template_attribute( "_forecast", diff --git a/tests/components/template/test_weather.py b/tests/components/template/test_weather.py index c987f7a2c30..38cf439987d 100644 --- a/tests/components/template/test_weather.py +++ b/tests/components/template/test_weather.py @@ -2,12 +2,16 @@ import pytest from homeassistant.components.weather import ( + ATTR_WEATHER_APPARENT_TEMPERATURE, + ATTR_WEATHER_CLOUD_COVERAGE, + ATTR_WEATHER_DEW_POINT, ATTR_WEATHER_HUMIDITY, ATTR_WEATHER_OZONE, ATTR_WEATHER_PRESSURE, ATTR_WEATHER_TEMPERATURE, ATTR_WEATHER_VISIBILITY, ATTR_WEATHER_WIND_BEARING, + ATTR_WEATHER_WIND_GUST_SPEED, ATTR_WEATHER_WIND_SPEED, DOMAIN, ) @@ -35,6 +39,10 @@ from homeassistant.core import HomeAssistant "wind_bearing_template": "{{ states('sensor.windbearing') }}", "ozone_template": "{{ states('sensor.ozone') }}", "visibility_template": "{{ states('sensor.visibility') }}", + "wind_gust_speed_template": "{{ states('sensor.wind_gust_speed') }}", + "cloud_coverage_template": "{{ states('sensor.cloud_coverage') }}", + "dew_point_template": "{{ states('sensor.dew_point') }}", + "apparent_temperature_template": "{{ states('sensor.apparent_temperature') }}", }, ] }, @@ -55,6 +63,10 @@ async def test_template_state_text(hass: HomeAssistant, start_ha) -> None: ("sensor.windbearing", ATTR_WEATHER_WIND_BEARING, 180), ("sensor.ozone", ATTR_WEATHER_OZONE, 25), ("sensor.visibility", ATTR_WEATHER_VISIBILITY, 4.6), + ("sensor.wind_gust_speed", ATTR_WEATHER_WIND_GUST_SPEED, 30), + ("sensor.cloud_coverage", ATTR_WEATHER_CLOUD_COVERAGE, 75), + ("sensor.dew_point", ATTR_WEATHER_DEW_POINT, 2.2), + ("sensor.apparent_temperature", ATTR_WEATHER_APPARENT_TEMPERATURE, 25), ]: hass.states.async_set(attr, value) await hass.async_block_till_done()