diff --git a/homeassistant/components/lutron_caseta/__init__.py b/homeassistant/components/lutron_caseta/__init__.py index 5e6d656bf35..385fdf94a62 100644 --- a/homeassistant/components/lutron_caseta/__init__.py +++ b/homeassistant/components/lutron_caseta/__init__.py @@ -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 diff --git a/homeassistant/components/lutron_caseta/manifest.json b/homeassistant/components/lutron_caseta/manifest.json index ad933dc0a69..b4f790292c4 100644 --- a/homeassistant/components/lutron_caseta/manifest.json +++ b/homeassistant/components/lutron_caseta/manifest.json @@ -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": { diff --git a/requirements_all.txt b/requirements_all.txt index c6eaf9ec492..dd1a8e53270 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -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 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e2c6020a5bd..72f67faf438 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -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 diff --git a/tests/components/lutron_caseta/__init__.py b/tests/components/lutron_caseta/__init__.py index c5d63c9e256..5e3db30ad5b 100644 --- a/tests/components/lutron_caseta/__init__.py +++ b/tests/components/lutron_caseta/__init__.py @@ -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): diff --git a/tests/components/lutron_caseta/test_diagnostics.py b/tests/components/lutron_caseta/test_diagnostics.py index 80643737aaa..98a5b26e809 100644 --- a/tests/components/lutron_caseta/test_diagnostics.py +++ b/tests/components/lutron_caseta/test_diagnostics.py @@ -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": {