mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Redact location names in proximity diagnostics (#109600)
This commit is contained in:
parent
8ef2bece59
commit
ac8a4f4b05
@ -56,14 +56,11 @@ class ProximityData:
|
|||||||
entities: dict[str, dict[str, str | int | None]]
|
entities: dict[str, dict[str, str | int | None]]
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_DATA = ProximityData(
|
DEFAULT_PROXIMITY_DATA: dict[str, str | float] = {
|
||||||
{
|
ATTR_DIST_TO: DEFAULT_DIST_TO_ZONE,
|
||||||
ATTR_DIST_TO: DEFAULT_DIST_TO_ZONE,
|
ATTR_DIR_OF_TRAVEL: DEFAULT_DIR_OF_TRAVEL,
|
||||||
ATTR_DIR_OF_TRAVEL: DEFAULT_DIR_OF_TRAVEL,
|
ATTR_NEAREST: DEFAULT_NEAREST,
|
||||||
ATTR_NEAREST: DEFAULT_NEAREST,
|
}
|
||||||
},
|
|
||||||
{},
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
||||||
@ -92,7 +89,7 @@ class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
|||||||
update_interval=None,
|
update_interval=None,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.data = DEFAULT_DATA
|
self.data = ProximityData(DEFAULT_PROXIMITY_DATA, {})
|
||||||
|
|
||||||
self.state_change_data: StateChangedData | None = None
|
self.state_change_data: StateChangedData | None = None
|
||||||
|
|
||||||
@ -238,7 +235,7 @@ class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
|
|||||||
self.name,
|
self.name,
|
||||||
self.proximity_zone_id,
|
self.proximity_zone_id,
|
||||||
)
|
)
|
||||||
return DEFAULT_DATA
|
return ProximityData(DEFAULT_PROXIMITY_DATA, {})
|
||||||
|
|
||||||
entities_data = self.data.entities
|
entities_data = self.data.entities
|
||||||
|
|
||||||
|
@ -4,10 +4,18 @@ from __future__ import annotations
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from homeassistant.components.device_tracker import ATTR_GPS, ATTR_IP, ATTR_MAC
|
from homeassistant.components.device_tracker import ATTR_GPS, ATTR_IP, ATTR_MAC
|
||||||
from homeassistant.components.diagnostics import async_redact_data
|
from homeassistant.components.diagnostics import REDACTED, async_redact_data
|
||||||
from homeassistant.components.person import ATTR_USER_ID
|
from homeassistant.components.person import ATTR_USER_ID
|
||||||
|
from homeassistant.components.zone import DOMAIN as ZONE_DOMAIN
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import ATTR_LATITUDE, ATTR_LONGITUDE
|
from homeassistant.const import (
|
||||||
|
ATTR_LATITUDE,
|
||||||
|
ATTR_LONGITUDE,
|
||||||
|
STATE_HOME,
|
||||||
|
STATE_NOT_HOME,
|
||||||
|
STATE_UNAVAILABLE,
|
||||||
|
STATE_UNKNOWN,
|
||||||
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
@ -21,6 +29,7 @@ TO_REDACT = {
|
|||||||
ATTR_MAC,
|
ATTR_MAC,
|
||||||
ATTR_USER_ID,
|
ATTR_USER_ID,
|
||||||
"context",
|
"context",
|
||||||
|
"location_name",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -34,16 +43,27 @@ async def async_get_config_entry_diagnostics(
|
|||||||
"entry": entry.as_dict(),
|
"entry": entry.as_dict(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
non_sensitiv_states = [
|
||||||
|
STATE_HOME,
|
||||||
|
STATE_NOT_HOME,
|
||||||
|
STATE_UNAVAILABLE,
|
||||||
|
STATE_UNKNOWN,
|
||||||
|
] + [z.name for z in hass.states.async_all(ZONE_DOMAIN)]
|
||||||
|
|
||||||
tracked_states: dict[str, dict] = {}
|
tracked_states: dict[str, dict] = {}
|
||||||
for tracked_entity_id in coordinator.tracked_entities:
|
for tracked_entity_id in coordinator.tracked_entities:
|
||||||
if (state := hass.states.get(tracked_entity_id)) is None:
|
if (state := hass.states.get(tracked_entity_id)) is None:
|
||||||
continue
|
continue
|
||||||
tracked_states[tracked_entity_id] = state.as_dict()
|
tracked_states[tracked_entity_id] = async_redact_data(
|
||||||
|
state.as_dict(), TO_REDACT
|
||||||
|
)
|
||||||
|
if state.state not in non_sensitiv_states:
|
||||||
|
tracked_states[tracked_entity_id]["state"] = REDACTED
|
||||||
|
|
||||||
diag_data["data"] = {
|
diag_data["data"] = {
|
||||||
"proximity": coordinator.data.proximity,
|
"proximity": coordinator.data.proximity,
|
||||||
"entities": coordinator.data.entities,
|
"entities": coordinator.data.entities,
|
||||||
"entity_mapping": coordinator.entity_mapping,
|
"entity_mapping": coordinator.entity_mapping,
|
||||||
"tracked_states": async_redact_data(tracked_states, TO_REDACT),
|
"tracked_states": tracked_states,
|
||||||
}
|
}
|
||||||
return diag_data
|
return diag_data
|
||||||
|
@ -15,6 +15,12 @@
|
|||||||
'is_in_ignored_zone': False,
|
'is_in_ignored_zone': False,
|
||||||
'name': 'test2',
|
'name': 'test2',
|
||||||
}),
|
}),
|
||||||
|
'device_tracker.test3': dict({
|
||||||
|
'dir_of_travel': None,
|
||||||
|
'dist_to_zone': 4077309,
|
||||||
|
'is_in_ignored_zone': False,
|
||||||
|
'name': 'test3',
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
'entity_mapping': dict({
|
'entity_mapping': dict({
|
||||||
'device_tracker.test1': list([
|
'device_tracker.test1': list([
|
||||||
@ -29,6 +35,10 @@
|
|||||||
'sensor.home_test3_distance',
|
'sensor.home_test3_distance',
|
||||||
'sensor.home_test3_direction_of_travel',
|
'sensor.home_test3_direction_of_travel',
|
||||||
]),
|
]),
|
||||||
|
'device_tracker.test4': list([
|
||||||
|
'sensor.home_test4_distance',
|
||||||
|
'sensor.home_test4_direction_of_travel',
|
||||||
|
]),
|
||||||
}),
|
}),
|
||||||
'proximity': dict({
|
'proximity': dict({
|
||||||
'dir_of_travel': 'unknown',
|
'dir_of_travel': 'unknown',
|
||||||
@ -56,6 +66,17 @@
|
|||||||
'entity_id': 'device_tracker.test2',
|
'entity_id': 'device_tracker.test2',
|
||||||
'state': 'not_home',
|
'state': 'not_home',
|
||||||
}),
|
}),
|
||||||
|
'device_tracker.test3': dict({
|
||||||
|
'attributes': dict({
|
||||||
|
'friendly_name': 'test3',
|
||||||
|
'latitude': '**REDACTED**',
|
||||||
|
'location_name': '**REDACTED**',
|
||||||
|
'longitude': '**REDACTED**',
|
||||||
|
}),
|
||||||
|
'context': '**REDACTED**',
|
||||||
|
'entity_id': 'device_tracker.test3',
|
||||||
|
'state': '**REDACTED**',
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
'entry': dict({
|
'entry': dict({
|
||||||
@ -67,6 +88,7 @@
|
|||||||
'device_tracker.test1',
|
'device_tracker.test1',
|
||||||
'device_tracker.test2',
|
'device_tracker.test2',
|
||||||
'device_tracker.test3',
|
'device_tracker.test3',
|
||||||
|
'device_tracker.test4',
|
||||||
]),
|
]),
|
||||||
'zone': 'zone.home',
|
'zone': 'zone.home',
|
||||||
}),
|
}),
|
||||||
|
@ -35,6 +35,16 @@ async def test_entry_diagnostics(
|
|||||||
"not_home",
|
"not_home",
|
||||||
{"friendly_name": "test2", "latitude": 150.1, "longitude": 20.1},
|
{"friendly_name": "test2", "latitude": 150.1, "longitude": 20.1},
|
||||||
)
|
)
|
||||||
|
hass.states.async_set(
|
||||||
|
"device_tracker.test3",
|
||||||
|
"my secret address",
|
||||||
|
{
|
||||||
|
"friendly_name": "test3",
|
||||||
|
"latitude": 150.1,
|
||||||
|
"longitude": 20.1,
|
||||||
|
"location_name": "my secret address",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
mock_entry = MockConfigEntry(
|
mock_entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -45,6 +55,7 @@ async def test_entry_diagnostics(
|
|||||||
"device_tracker.test1",
|
"device_tracker.test1",
|
||||||
"device_tracker.test2",
|
"device_tracker.test2",
|
||||||
"device_tracker.test3",
|
"device_tracker.test3",
|
||||||
|
"device_tracker.test4",
|
||||||
],
|
],
|
||||||
CONF_IGNORED_ZONES: [],
|
CONF_IGNORED_ZONES: [],
|
||||||
CONF_TOLERANCE: 1,
|
CONF_TOLERANCE: 1,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user