Fix Lutron Caseta area names by ignoring root area during area name retrieval (#80576)

This commit is contained in:
Kevin Addeman 2022-10-23 18:28:15 -04:00 committed by GitHub
parent 03bf37e12c
commit 3f3518e29d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 20 deletions

View File

@ -375,19 +375,25 @@ def _handle_none_keypad_serial(keypad_device: dict, bridge_serial: int) -> str:
return keypad_device["serial"] or f"{bridge_serial}_{keypad_device['device_id']}"
def _area_name_from_id(areas: dict[str, dict], area_id: str) -> str:
def _area_name_from_id(areas: dict[str, dict], area_id: str | None) -> str:
"""Return the full area name including parent(s)."""
if area_id is None:
return UNASSIGNED_AREA
return _construct_area_name_from_id(areas, area_id, [])
def _construct_area_name_from_id(
areas: dict[str, dict], area_id: str, labels: list[str]
) -> str:
"""Recursively construct the full area name including parent(s)."""
area = areas[area_id]
if "parent_id" in area:
parent_area = area["parent_id"]
if parent_area is not None:
return f"{_area_name_from_id(areas, parent_area)} {area['name']}"
parent_area_id = area["parent_id"]
if parent_area_id is None:
# This is the root area, return last area
return " ".join(labels)
return area["name"]
labels.insert(0, area["name"])
return _construct_area_name_from_id(areas, parent_area_id, labels)
@callback

View File

@ -2,7 +2,7 @@
"domain": "lutron_caseta",
"name": "Lutron Cas\u00e9ta",
"documentation": "https://www.home-assistant.io/integrations/lutron_caseta",
"requirements": ["pylutron-caseta==0.16.0"],
"requirements": ["pylutron-caseta==0.17.1"],
"config_flow": true,
"zeroconf": ["_leap._tcp.local."],
"homekit": {

View File

@ -1688,7 +1688,7 @@ pylitejet==0.3.0
pylitterbot==2022.10.2
# homeassistant.components.lutron_caseta
pylutron-caseta==0.16.0
pylutron-caseta==0.17.1
# homeassistant.components.lutron
pylutron==0.2.8

View File

@ -1189,7 +1189,7 @@ pylitejet==0.3.0
pylitterbot==2022.10.2
# homeassistant.components.lutron_caseta
pylutron-caseta==0.16.0
pylutron-caseta==0.17.1
# homeassistant.components.mailgun
pymailgunner==1.4

View File

@ -129,13 +129,14 @@ class MockBridge:
def load_areas(self):
"""Loak mock areas into self.areas."""
return {
"898": {"id": "898", "name": "Basement", "parent_id": None},
"3": {"id": "3", "name": "House", "parent_id": None},
"898": {"id": "898", "name": "Basement", "parent_id": "3"},
"822": {"id": "822", "name": "Bedroom", "parent_id": "898"},
"910": {"id": "910", "name": "Bathroom", "parent_id": "898"},
"1024": {"id": "1024", "name": "Master Bedroom", "parent_id": None},
"1025": {"id": "1025", "name": "Kitchen", "parent_id": None},
"1026": {"id": "1026", "name": "Dining Room", "parent_id": None},
"1205": {"id": "1205", "name": "Hallway", "parent_id": None},
"1024": {"id": "1024", "name": "Master Bedroom", "parent_id": "3"},
"1025": {"id": "1025", "name": "Kitchen", "parent_id": "3"},
"1026": {"id": "1026", "name": "Dining Room", "parent_id": "3"},
"1205": {"id": "1205", "name": "Hallway", "parent_id": "3"},
}
def load_devices(self):

View File

@ -41,13 +41,14 @@ async def test_diagnostics(hass, hass_client) -> None:
assert diag == {
"bridge_data": {
"areas": {
"898": {"id": "898", "name": "Basement", "parent_id": None},
"3": {"id": "3", "name": "House", "parent_id": None},
"898": {"id": "898", "name": "Basement", "parent_id": "3"},
"822": {"id": "822", "name": "Bedroom", "parent_id": "898"},
"910": {"id": "910", "name": "Bathroom", "parent_id": "898"},
"1024": {"id": "1024", "name": "Master Bedroom", "parent_id": None},
"1025": {"id": "1025", "name": "Kitchen", "parent_id": None},
"1026": {"id": "1026", "name": "Dining Room", "parent_id": None},
"1205": {"id": "1205", "name": "Hallway", "parent_id": None},
"1024": {"id": "1024", "name": "Master Bedroom", "parent_id": "3"},
"1025": {"id": "1025", "name": "Kitchen", "parent_id": "3"},
"1026": {"id": "1026", "name": "Dining Room", "parent_id": "3"},
"1205": {"id": "1205", "name": "Hallway", "parent_id": "3"},
},
"buttons": {
"111": {