Add zone related sensors in proximity (#109630)

* move legacy needed convertions into legacy entity

* add zone related sensors

* fix test coverage

* fix typing

* fix entity name translations

* rename placeholder to tracked_entity
This commit is contained in:
Michael 2024-02-05 00:42:07 +01:00 committed by GitHub
parent a95a51da05
commit ffe9f0825a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 193 additions and 31 deletions

View file

@ -907,6 +907,132 @@ async def test_device_tracker_test1_nearest_after_test2_in_ignored_zone(
assert state.state == "away_from"
async def test_nearest_sensors(hass: HomeAssistant, config_zones) -> None:
"""Test for nearest sensors."""
mock_config = MockConfigEntry(
domain=DOMAIN,
title="home",
data={
CONF_ZONE: "zone.home",
CONF_TRACKED_ENTITIES: ["device_tracker.test1", "device_tracker.test2"],
CONF_IGNORED_ZONES: [],
CONF_TOLERANCE: 1,
},
unique_id=f"{DOMAIN}_home",
)
mock_config.add_to_hass(hass)
assert await hass.config_entries.async_setup(mock_config.entry_id)
await hass.async_block_till_done()
hass.states.async_set(
"device_tracker.test1",
"not_home",
{"friendly_name": "test1", "latitude": 20, "longitude": 10},
)
hass.states.async_set(
"device_tracker.test2",
"not_home",
{"friendly_name": "test2", "latitude": 40, "longitude": 20},
)
await hass.async_block_till_done()
hass.states.async_set(
"device_tracker.test1",
"not_home",
{"friendly_name": "test1", "latitude": 15, "longitude": 8},
)
hass.states.async_set(
"device_tracker.test2",
"not_home",
{"friendly_name": "test2", "latitude": 45, "longitude": 22},
)
await hass.async_block_till_done()
# sensor entities
state = hass.states.get("sensor.home_nearest_device")
assert state.state == "test1"
state = hass.states.get("sensor.home_nearest_distance")
assert state.state == "1615590"
state = hass.states.get("sensor.home_test1_direction_of_travel")
assert state.state == "towards"
state = hass.states.get("sensor.home_test1_distance")
assert state.state == "1615590"
state = hass.states.get("sensor.home_test1_direction_of_travel")
assert state.state == "towards"
state = hass.states.get("sensor.home_test2_distance")
assert state.state == "5176058"
state = hass.states.get("sensor.home_test2_direction_of_travel")
assert state.state == "away_from"
# move the far tracker
hass.states.async_set(
"device_tracker.test2",
"not_home",
{"friendly_name": "test2", "latitude": 40, "longitude": 20},
)
await hass.async_block_till_done()
state = hass.states.get("sensor.home_nearest_device")
assert state.state == "test1"
state = hass.states.get("sensor.home_nearest_distance")
assert state.state == "1615590"
state = hass.states.get("sensor.home_nearest_direction_of_travel")
assert state.state == "towards"
state = hass.states.get("sensor.home_test1_distance")
assert state.state == "1615590"
state = hass.states.get("sensor.home_test1_direction_of_travel")
assert state.state == "towards"
state = hass.states.get("sensor.home_test2_distance")
assert state.state == "4611404"
state = hass.states.get("sensor.home_test2_direction_of_travel")
assert state.state == "towards"
# move the near tracker
hass.states.async_set(
"device_tracker.test1",
"not_home",
{"friendly_name": "test1", "latitude": 20, "longitude": 10},
)
await hass.async_block_till_done()
state = hass.states.get("sensor.home_nearest_device")
assert state.state == "test1"
state = hass.states.get("sensor.home_nearest_distance")
assert state.state == "2204122"
state = hass.states.get("sensor.home_nearest_direction_of_travel")
assert state.state == "away_from"
state = hass.states.get("sensor.home_test1_distance")
assert state.state == "2204122"
state = hass.states.get("sensor.home_test1_direction_of_travel")
assert state.state == "away_from"
state = hass.states.get("sensor.home_test2_distance")
assert state.state == "4611404"
state = hass.states.get("sensor.home_test2_direction_of_travel")
assert state.state == "towards"
# get unknown distance and direction
hass.states.async_set(
"device_tracker.test1", "not_home", {"friendly_name": "test1"}
)
hass.states.async_set(
"device_tracker.test2", "not_home", {"friendly_name": "test2"}
)
await hass.async_block_till_done()
state = hass.states.get("sensor.home_nearest_device")
assert state.state == STATE_UNKNOWN
state = hass.states.get("sensor.home_nearest_distance")
assert state.state == STATE_UNKNOWN
state = hass.states.get("sensor.home_nearest_direction_of_travel")
assert state.state == STATE_UNKNOWN
state = hass.states.get("sensor.home_test1_distance")
assert state.state == STATE_UNKNOWN
state = hass.states.get("sensor.home_test1_direction_of_travel")
assert state.state == STATE_UNKNOWN
state = hass.states.get("sensor.home_test2_distance")
assert state.state == STATE_UNKNOWN
state = hass.states.get("sensor.home_test2_direction_of_travel")
assert state.state == STATE_UNKNOWN
async def test_create_deprecated_proximity_issue(
hass: HomeAssistant,
issue_registry: ir.IssueRegistry,