Add new attributes into Template Weather (#95100)

This commit is contained in:
G Johansson 2023-06-27 11:19:51 +02:00 committed by GitHub
parent b62080cb78
commit 30d22fe49b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 70 additions and 0 deletions

View File

@ -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",

View File

@ -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()