mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Add diagnostics to proximity (#109393)
This commit is contained in:
parent
4809327124
commit
e567236cac
49
homeassistant/components/proximity/diagnostics.py
Normal file
49
homeassistant/components/proximity/diagnostics.py
Normal file
@ -0,0 +1,49 @@
|
||||
"""Diagnostics support for Proximity."""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.device_tracker import ATTR_GPS, ATTR_IP, ATTR_MAC
|
||||
from homeassistant.components.diagnostics import async_redact_data
|
||||
from homeassistant.components.person import ATTR_USER_ID
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_LATITUDE, ATTR_LONGITUDE
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import DOMAIN
|
||||
from .coordinator import ProximityDataUpdateCoordinator
|
||||
|
||||
TO_REDACT = {
|
||||
ATTR_GPS,
|
||||
ATTR_IP,
|
||||
ATTR_LATITUDE,
|
||||
ATTR_LONGITUDE,
|
||||
ATTR_MAC,
|
||||
ATTR_USER_ID,
|
||||
"context",
|
||||
}
|
||||
|
||||
|
||||
async def async_get_config_entry_diagnostics(
|
||||
hass: HomeAssistant, entry: ConfigEntry
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a config entry."""
|
||||
coordinator: ProximityDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
||||
|
||||
diag_data = {
|
||||
"entry": entry.as_dict(),
|
||||
}
|
||||
|
||||
tracked_states: dict[str, dict] = {}
|
||||
for tracked_entity_id in coordinator.tracked_entities:
|
||||
if (state := hass.states.get(tracked_entity_id)) is None:
|
||||
continue
|
||||
tracked_states[tracked_entity_id] = state.as_dict()
|
||||
|
||||
diag_data["data"] = {
|
||||
"proximity": coordinator.data.proximity,
|
||||
"entities": coordinator.data.entities,
|
||||
"entity_mapping": coordinator.entity_mapping,
|
||||
"tracked_states": async_redact_data(tracked_states, TO_REDACT),
|
||||
}
|
||||
return diag_data
|
86
tests/components/proximity/snapshots/test_diagnostics.ambr
Normal file
86
tests/components/proximity/snapshots/test_diagnostics.ambr
Normal file
@ -0,0 +1,86 @@
|
||||
# serializer version: 1
|
||||
# name: test_entry_diagnostics
|
||||
dict({
|
||||
'data': dict({
|
||||
'entities': dict({
|
||||
'device_tracker.test1': dict({
|
||||
'dir_of_travel': None,
|
||||
'dist_to_zone': 2218752,
|
||||
'is_in_ignored_zone': False,
|
||||
'name': 'test1',
|
||||
}),
|
||||
'device_tracker.test2': dict({
|
||||
'dir_of_travel': None,
|
||||
'dist_to_zone': 4077309,
|
||||
'is_in_ignored_zone': False,
|
||||
'name': 'test2',
|
||||
}),
|
||||
}),
|
||||
'entity_mapping': dict({
|
||||
'device_tracker.test1': list([
|
||||
'sensor.home_test1_distance',
|
||||
'sensor.home_test1_direction_of_travel',
|
||||
]),
|
||||
'device_tracker.test2': list([
|
||||
'sensor.home_test2_distance',
|
||||
'sensor.home_test2_direction_of_travel',
|
||||
]),
|
||||
'device_tracker.test3': list([
|
||||
'sensor.home_test3_distance',
|
||||
'sensor.home_test3_direction_of_travel',
|
||||
]),
|
||||
}),
|
||||
'proximity': dict({
|
||||
'dir_of_travel': 'unknown',
|
||||
'dist_to_zone': 2219,
|
||||
'nearest': 'test1',
|
||||
}),
|
||||
'tracked_states': dict({
|
||||
'device_tracker.test1': dict({
|
||||
'attributes': dict({
|
||||
'friendly_name': 'test1',
|
||||
'latitude': '**REDACTED**',
|
||||
'longitude': '**REDACTED**',
|
||||
}),
|
||||
'context': '**REDACTED**',
|
||||
'entity_id': 'device_tracker.test1',
|
||||
'state': 'not_home',
|
||||
}),
|
||||
'device_tracker.test2': dict({
|
||||
'attributes': dict({
|
||||
'friendly_name': 'test2',
|
||||
'latitude': '**REDACTED**',
|
||||
'longitude': '**REDACTED**',
|
||||
}),
|
||||
'context': '**REDACTED**',
|
||||
'entity_id': 'device_tracker.test2',
|
||||
'state': 'not_home',
|
||||
}),
|
||||
}),
|
||||
}),
|
||||
'entry': dict({
|
||||
'data': dict({
|
||||
'ignored_zones': list([
|
||||
]),
|
||||
'tolerance': 1,
|
||||
'tracked_entities': list([
|
||||
'device_tracker.test1',
|
||||
'device_tracker.test2',
|
||||
'device_tracker.test3',
|
||||
]),
|
||||
'zone': 'zone.home',
|
||||
}),
|
||||
'disabled_by': None,
|
||||
'domain': 'proximity',
|
||||
'minor_version': 1,
|
||||
'options': dict({
|
||||
}),
|
||||
'pref_disable_new_entities': False,
|
||||
'pref_disable_polling': False,
|
||||
'source': 'user',
|
||||
'title': 'home',
|
||||
'unique_id': 'proximity_home',
|
||||
'version': 1,
|
||||
}),
|
||||
})
|
||||
# ---
|
62
tests/components/proximity/test_diagnostics.py
Normal file
62
tests/components/proximity/test_diagnostics.py
Normal file
@ -0,0 +1,62 @@
|
||||
"""Tests for proximity diagnostics platform."""
|
||||
from __future__ import annotations
|
||||
|
||||
from syrupy.assertion import SnapshotAssertion
|
||||
from syrupy.filters import props
|
||||
|
||||
from homeassistant.components.proximity.const import (
|
||||
CONF_IGNORED_ZONES,
|
||||
CONF_TOLERANCE,
|
||||
CONF_TRACKED_ENTITIES,
|
||||
DOMAIN,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.const import CONF_ZONE
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||
from tests.typing import ClientSessionGenerator
|
||||
|
||||
|
||||
async def test_entry_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSessionGenerator,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test config entry diagnostics."""
|
||||
hass.states.async_set(
|
||||
"device_tracker.test1",
|
||||
"not_home",
|
||||
{"friendly_name": "test1", "latitude": 20.1, "longitude": 10.1},
|
||||
)
|
||||
hass.states.async_set(
|
||||
"device_tracker.test2",
|
||||
"not_home",
|
||||
{"friendly_name": "test2", "latitude": 150.1, "longitude": 20.1},
|
||||
)
|
||||
|
||||
mock_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
title="home",
|
||||
data={
|
||||
CONF_ZONE: "zone.home",
|
||||
CONF_TRACKED_ENTITIES: [
|
||||
"device_tracker.test1",
|
||||
"device_tracker.test2",
|
||||
"device_tracker.test3",
|
||||
],
|
||||
CONF_IGNORED_ZONES: [],
|
||||
CONF_TOLERANCE: 1,
|
||||
},
|
||||
unique_id=f"{DOMAIN}_home",
|
||||
)
|
||||
|
||||
mock_entry.add_to_hass(hass)
|
||||
assert await hass.config_entries.async_setup(mock_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert mock_entry.state == ConfigEntryState.LOADED
|
||||
|
||||
assert await get_diagnostics_for_config_entry(
|
||||
hass, hass_client, mock_entry
|
||||
) == snapshot(exclude=props("entry_id", "last_changed", "last_updated"))
|
Loading…
x
Reference in New Issue
Block a user