mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 06:07:17 +00:00
Add person to device_sun_light_trigger (#25877)
* Add person to device_sun_light_trigger * tests * fix test
This commit is contained in:
parent
3714cdaa6d
commit
5994f82fc5
@ -63,12 +63,14 @@ async def async_setup(hass, config):
|
|||||||
device_tracker = hass.components.device_tracker
|
device_tracker = hass.components.device_tracker
|
||||||
group = hass.components.group
|
group = hass.components.group
|
||||||
light = hass.components.light
|
light = hass.components.light
|
||||||
|
person = hass.components.person
|
||||||
conf = config[DOMAIN]
|
conf = config[DOMAIN]
|
||||||
disable_turn_off = conf.get(CONF_DISABLE_TURN_OFF)
|
disable_turn_off = conf.get(CONF_DISABLE_TURN_OFF)
|
||||||
light_group = conf.get(CONF_LIGHT_GROUP, light.ENTITY_ID_ALL_LIGHTS)
|
light_group = conf.get(CONF_LIGHT_GROUP, light.ENTITY_ID_ALL_LIGHTS)
|
||||||
light_profile = conf.get(CONF_LIGHT_PROFILE)
|
light_profile = conf.get(CONF_LIGHT_PROFILE)
|
||||||
device_group = conf.get(CONF_DEVICE_GROUP, device_tracker.ENTITY_ID_ALL_DEVICES)
|
device_group = conf.get(CONF_DEVICE_GROUP, device_tracker.ENTITY_ID_ALL_DEVICES)
|
||||||
device_entity_ids = group.get_entity_ids(device_group, device_tracker.DOMAIN)
|
device_entity_ids = group.get_entity_ids(device_group, device_tracker.DOMAIN)
|
||||||
|
device_entity_ids.extend(group.get_entity_ids(device_group, person.DOMAIN))
|
||||||
|
|
||||||
if not device_entity_ids:
|
if not device_entity_ids:
|
||||||
logger.error("No devices found to track")
|
logger.error("No devices found to track")
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
"dependencies": [
|
"dependencies": [
|
||||||
"device_tracker",
|
"device_tracker",
|
||||||
"group",
|
"group",
|
||||||
"light"
|
"light",
|
||||||
|
"person"
|
||||||
],
|
],
|
||||||
"codeowners": []
|
"codeowners": []
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,12 @@ import pytest
|
|||||||
|
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
from homeassistant.const import CONF_PLATFORM, STATE_HOME, STATE_NOT_HOME
|
from homeassistant.const import CONF_PLATFORM, STATE_HOME, STATE_NOT_HOME
|
||||||
from homeassistant.components import device_tracker, light, device_sun_light_trigger
|
from homeassistant.components import (
|
||||||
|
device_tracker,
|
||||||
|
light,
|
||||||
|
device_sun_light_trigger,
|
||||||
|
group,
|
||||||
|
)
|
||||||
from homeassistant.components.device_tracker.const import (
|
from homeassistant.components.device_tracker.const import (
|
||||||
ENTITY_ID_FORMAT as DT_ENTITY_ID_FORMAT,
|
ENTITY_ID_FORMAT as DT_ENTITY_ID_FORMAT,
|
||||||
)
|
)
|
||||||
@ -90,6 +95,8 @@ async def test_lights_turn_off_when_everyone_leaves(hass, scanner):
|
|||||||
hass, device_sun_light_trigger.DOMAIN, {device_sun_light_trigger.DOMAIN: {}}
|
hass, device_sun_light_trigger.DOMAIN, {device_sun_light_trigger.DOMAIN: {}}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
assert light.is_on(hass)
|
||||||
|
|
||||||
hass.states.async_set(device_tracker.ENTITY_ID_ALL_DEVICES, STATE_NOT_HOME)
|
hass.states.async_set(device_tracker.ENTITY_ID_ALL_DEVICES, STATE_NOT_HOME)
|
||||||
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@ -111,3 +118,58 @@ async def test_lights_turn_on_when_coming_home_after_sun_set(hass, scanner):
|
|||||||
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert light.is_on(hass)
|
assert light.is_on(hass)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_lights_turn_on_when_coming_home_after_sun_set_person(hass, scanner):
|
||||||
|
"""Test lights turn on when coming home after sun set."""
|
||||||
|
device_1 = DT_ENTITY_ID_FORMAT.format("device_1")
|
||||||
|
device_2 = DT_ENTITY_ID_FORMAT.format("device_2")
|
||||||
|
|
||||||
|
test_time = datetime(2017, 4, 5, 3, 2, 3, tzinfo=dt_util.UTC)
|
||||||
|
with patch("homeassistant.util.dt.utcnow", return_value=test_time):
|
||||||
|
await common_light.async_turn_off(hass)
|
||||||
|
hass.states.async_set(device_1, STATE_NOT_HOME)
|
||||||
|
hass.states.async_set(device_2, STATE_NOT_HOME)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert not light.is_on(hass)
|
||||||
|
assert hass.states.get(device_tracker.ENTITY_ID_ALL_DEVICES).state == "not_home"
|
||||||
|
assert hass.states.get(device_1).state == "not_home"
|
||||||
|
assert hass.states.get(device_2).state == "not_home"
|
||||||
|
|
||||||
|
assert await async_setup_component(
|
||||||
|
hass,
|
||||||
|
"person",
|
||||||
|
{"person": [{"id": "me", "name": "Me", "device_trackers": [device_1]}]},
|
||||||
|
)
|
||||||
|
|
||||||
|
await group.Group.async_create_group(hass, "person_me", ["person.me"])
|
||||||
|
|
||||||
|
assert await async_setup_component(
|
||||||
|
hass,
|
||||||
|
device_sun_light_trigger.DOMAIN,
|
||||||
|
{device_sun_light_trigger.DOMAIN: {"device_group": "group.person_me"}},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert not light.is_on(hass)
|
||||||
|
assert hass.states.get(device_1).state == "not_home"
|
||||||
|
assert hass.states.get(device_2).state == "not_home"
|
||||||
|
assert hass.states.get("person.me").state == "not_home"
|
||||||
|
|
||||||
|
# Unrelated device has no impact
|
||||||
|
hass.states.async_set(device_2, STATE_HOME)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert not light.is_on(hass)
|
||||||
|
assert hass.states.get(device_1).state == "not_home"
|
||||||
|
assert hass.states.get(device_2).state == "home"
|
||||||
|
assert hass.states.get("person.me").state == "not_home"
|
||||||
|
|
||||||
|
# person home switches on
|
||||||
|
hass.states.async_set(device_1, STATE_HOME)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert light.is_on(hass)
|
||||||
|
assert hass.states.get(device_1).state == "home"
|
||||||
|
assert hass.states.get(device_2).state == "home"
|
||||||
|
assert hass.states.get("person.me").state == "home"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user