mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Fix weather templates using new style configuration (#136677)
This commit is contained in:
parent
8432b6a790
commit
36857b4b20
@ -135,6 +135,33 @@ WEATHER_SCHEMA = vol.Schema(
|
||||
PLATFORM_SCHEMA = WEATHER_PLATFORM_SCHEMA.extend(WEATHER_SCHEMA.schema)
|
||||
|
||||
|
||||
@callback
|
||||
def _async_create_template_tracking_entities(
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
hass: HomeAssistant,
|
||||
definitions: list[dict],
|
||||
unique_id_prefix: str | None,
|
||||
) -> None:
|
||||
"""Create the weather entities."""
|
||||
entities = []
|
||||
|
||||
for entity_conf in definitions:
|
||||
unique_id = entity_conf.get(CONF_UNIQUE_ID)
|
||||
|
||||
if unique_id and unique_id_prefix:
|
||||
unique_id = f"{unique_id_prefix}-{unique_id}"
|
||||
|
||||
entities.append(
|
||||
WeatherTemplate(
|
||||
hass,
|
||||
entity_conf,
|
||||
unique_id,
|
||||
)
|
||||
)
|
||||
|
||||
async_add_entities(entities)
|
||||
|
||||
|
||||
async def async_setup_platform(
|
||||
hass: HomeAssistant,
|
||||
config: ConfigType,
|
||||
@ -142,24 +169,32 @@ async def async_setup_platform(
|
||||
discovery_info: DiscoveryInfoType | None = None,
|
||||
) -> None:
|
||||
"""Set up the Template weather."""
|
||||
if discovery_info and "coordinator" in discovery_info:
|
||||
if discovery_info is None:
|
||||
config = rewrite_common_legacy_to_modern_conf(hass, config)
|
||||
unique_id = config.get(CONF_UNIQUE_ID)
|
||||
async_add_entities(
|
||||
[
|
||||
WeatherTemplate(
|
||||
hass,
|
||||
config,
|
||||
unique_id,
|
||||
)
|
||||
]
|
||||
)
|
||||
return
|
||||
|
||||
if "coordinator" in discovery_info:
|
||||
async_add_entities(
|
||||
TriggerWeatherEntity(hass, discovery_info["coordinator"], config)
|
||||
for config in discovery_info["entities"]
|
||||
)
|
||||
return
|
||||
|
||||
config = rewrite_common_legacy_to_modern_conf(hass, config)
|
||||
unique_id = config.get(CONF_UNIQUE_ID)
|
||||
|
||||
async_add_entities(
|
||||
[
|
||||
WeatherTemplate(
|
||||
hass,
|
||||
config,
|
||||
unique_id,
|
||||
)
|
||||
]
|
||||
_async_create_template_tracking_entities(
|
||||
async_add_entities,
|
||||
hass,
|
||||
discovery_info["entities"],
|
||||
discovery_info["unique_id"],
|
||||
)
|
||||
|
||||
|
||||
|
@ -928,3 +928,65 @@ async def test_trigger_entity_restore_state_fail(
|
||||
state = hass.states.get("weather.test")
|
||||
assert state.state == STATE_UNKNOWN
|
||||
assert state.attributes.get("temperature") is None
|
||||
|
||||
|
||||
async def test_new_style_template_state_text(hass: HomeAssistant) -> None:
|
||||
"""Test the state text of a template."""
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
"weather",
|
||||
{
|
||||
"weather": [
|
||||
{"weather": {"platform": "demo"}},
|
||||
]
|
||||
},
|
||||
)
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
"template",
|
||||
{
|
||||
"template": {
|
||||
"weather": {
|
||||
"name": "test",
|
||||
"attribution_template": "{{ states('sensor.attribution') }}",
|
||||
"condition_template": "sunny",
|
||||
"temperature_template": "{{ states('sensor.temperature') | float }}",
|
||||
"humidity_template": "{{ states('sensor.humidity') | int }}",
|
||||
"pressure_template": "{{ states('sensor.pressure') }}",
|
||||
"wind_speed_template": "{{ states('sensor.windspeed') }}",
|
||||
"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') }}",
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
for attr, v_attr, value in (
|
||||
(
|
||||
"sensor.attribution",
|
||||
ATTR_ATTRIBUTION,
|
||||
"The custom attribution",
|
||||
),
|
||||
("sensor.temperature", ATTR_WEATHER_TEMPERATURE, 22.3),
|
||||
("sensor.humidity", ATTR_WEATHER_HUMIDITY, 60),
|
||||
("sensor.pressure", ATTR_WEATHER_PRESSURE, 1000),
|
||||
("sensor.windspeed", ATTR_WEATHER_WIND_SPEED, 20),
|
||||
("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()
|
||||
state = hass.states.get("weather.test")
|
||||
assert state is not None
|
||||
assert state.state == "sunny"
|
||||
assert state.attributes.get(v_attr) == value
|
||||
|
Loading…
x
Reference in New Issue
Block a user