mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 12:59:34 +00:00
Add support for multiple entity_ids in conditions (#36817)
This commit is contained in:
@@ -266,6 +266,123 @@ async def test_if_numeric_state_not_raise_on_unavailable(hass):
|
||||
assert len(logwarn.mock_calls) == 0
|
||||
|
||||
|
||||
async def test_state_multiple_entities(hass):
|
||||
"""Test with multiple entities in condition."""
|
||||
test = await condition.async_from_config(
|
||||
hass,
|
||||
{
|
||||
"condition": "and",
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "state",
|
||||
"entity_id": ["sensor.temperature_1", "sensor.temperature_2"],
|
||||
"state": "100",
|
||||
},
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
hass.states.async_set("sensor.temperature_1", 100)
|
||||
hass.states.async_set("sensor.temperature_2", 100)
|
||||
assert test(hass)
|
||||
|
||||
hass.states.async_set("sensor.temperature_1", 101)
|
||||
hass.states.async_set("sensor.temperature_2", 100)
|
||||
assert not test(hass)
|
||||
|
||||
hass.states.async_set("sensor.temperature_1", 100)
|
||||
hass.states.async_set("sensor.temperature_2", 101)
|
||||
assert not test(hass)
|
||||
|
||||
|
||||
async def test_numeric_state_multiple_entities(hass):
|
||||
"""Test with multiple entities in condition."""
|
||||
test = await condition.async_from_config(
|
||||
hass,
|
||||
{
|
||||
"condition": "and",
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "numeric_state",
|
||||
"entity_id": ["sensor.temperature_1", "sensor.temperature_2"],
|
||||
"below": 50,
|
||||
},
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
hass.states.async_set("sensor.temperature_1", 49)
|
||||
hass.states.async_set("sensor.temperature_2", 49)
|
||||
assert test(hass)
|
||||
|
||||
hass.states.async_set("sensor.temperature_1", 50)
|
||||
hass.states.async_set("sensor.temperature_2", 49)
|
||||
assert not test(hass)
|
||||
|
||||
hass.states.async_set("sensor.temperature_1", 49)
|
||||
hass.states.async_set("sensor.temperature_2", 50)
|
||||
assert not test(hass)
|
||||
|
||||
|
||||
async def test_zone_multiple_entities(hass):
|
||||
"""Test with multiple entities in condition."""
|
||||
test = await condition.async_from_config(
|
||||
hass,
|
||||
{
|
||||
"condition": "and",
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "zone",
|
||||
"entity_id": ["device_tracker.person_1", "device_tracker.person_2"],
|
||||
"zone": "zone.home",
|
||||
},
|
||||
],
|
||||
},
|
||||
)
|
||||
|
||||
hass.states.async_set(
|
||||
"zone.home",
|
||||
"zoning",
|
||||
{"name": "home", "latitude": 2.1, "longitude": 1.1, "radius": 10},
|
||||
)
|
||||
|
||||
hass.states.async_set(
|
||||
"device_tracker.person_1",
|
||||
"home",
|
||||
{"friendly_name": "person_1", "latitude": 2.1, "longitude": 1.1},
|
||||
)
|
||||
hass.states.async_set(
|
||||
"device_tracker.person_2",
|
||||
"home",
|
||||
{"friendly_name": "person_2", "latitude": 2.1, "longitude": 1.1},
|
||||
)
|
||||
assert test(hass)
|
||||
|
||||
hass.states.async_set(
|
||||
"device_tracker.person_1",
|
||||
"home",
|
||||
{"friendly_name": "person_1", "latitude": 20.1, "longitude": 10.1},
|
||||
)
|
||||
hass.states.async_set(
|
||||
"device_tracker.person_2",
|
||||
"home",
|
||||
{"friendly_name": "person_2", "latitude": 2.1, "longitude": 1.1},
|
||||
)
|
||||
assert not test(hass)
|
||||
|
||||
hass.states.async_set(
|
||||
"device_tracker.person_1",
|
||||
"home",
|
||||
{"friendly_name": "person_1", "latitude": 2.1, "longitude": 1.1},
|
||||
)
|
||||
hass.states.async_set(
|
||||
"device_tracker.person_2",
|
||||
"home",
|
||||
{"friendly_name": "person_2", "latitude": 20.1, "longitude": 10.1},
|
||||
)
|
||||
assert not test(hass)
|
||||
|
||||
|
||||
async def test_extract_entities():
|
||||
"""Test extracting entities."""
|
||||
assert condition.async_extract_entities(
|
||||
@@ -312,6 +429,16 @@ async def test_extract_entities():
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"condition": "state",
|
||||
"entity_id": ["sensor.temperature_7", "sensor.temperature_8"],
|
||||
"state": "100",
|
||||
},
|
||||
{
|
||||
"condition": "numeric_state",
|
||||
"entity_id": ["sensor.temperature_9", "sensor.temperature_10"],
|
||||
"below": 110,
|
||||
},
|
||||
],
|
||||
}
|
||||
) == {
|
||||
@@ -321,6 +448,10 @@ async def test_extract_entities():
|
||||
"sensor.temperature_4",
|
||||
"sensor.temperature_5",
|
||||
"sensor.temperature_6",
|
||||
"sensor.temperature_7",
|
||||
"sensor.temperature_8",
|
||||
"sensor.temperature_9",
|
||||
"sensor.temperature_10",
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user