Keep hub children when the child component list is missing (#1797)
Some checks failed
CI / Perform Lint Checks (3.14) (push) Has been cancelled
CI / Python 3.11 on macos-latest (push) Has been cancelled
CI / Python 3.12 on macos-latest (push) Has been cancelled
CI / Python 3.13 on macos-latest (push) Has been cancelled
CI / Python 3.14 on macos-latest (push) Has been cancelled
CI / Python 3.11 on ubuntu-latest (push) Has been cancelled
CI / Python 3.12 on ubuntu-latest (push) Has been cancelled
CI / Python 3.13 on ubuntu-latest (push) Has been cancelled
CI / Python 3.14 on ubuntu-latest (push) Has been cancelled
CI / Python 3.11 on windows-latest (push) Has been cancelled
CI / Python 3.12 on windows-latest (push) Has been cancelled
CI / Python 3.13 on windows-latest (push) Has been cancelled
CI / Python 3.14 on windows-latest (push) Has been cancelled
CodeQL Checks / Analyze (python) (push) Has been cancelled
Stale / stale (push) Has been cancelled

Fixes #1796

Some hubs intermittently return a `getChildDeviceComponentList` result
without the `child_component_list` key, as seen with an H200 (firmware 1.7.7 Build 20260917).

This changes the logic, so that when the list is missing, children are neither created nor deleted for
that update, and a debug message is logged. Treating the response as an
empty list would delete the known children of a hub that has some, so
they are kept until the next complete response.
This commit is contained in:
richard tristan
2026-10-24 18:16:16 +02:00
committed by GitHub
parent 0932f30d06
commit 78146d4e77
2 changed files with 43 additions and 2 deletions

View File

@@ -109,9 +109,23 @@ class SmartDevice(Device):
can't be created to avoid spamming the logs on every update.
"""
changed = False
if (
child_component_list := child_device_components_resp.get(
"child_component_list"
)
) is None:
# Some hubs intermittently return the component list without the
# list itself, e.g. an H200 without children. Keep the known children
# instead of deleting them, the next update will reconcile.
_LOGGER.debug(
"No child component list for device %s, response: %s",
self.host,
child_device_components_resp,
)
return changed
smart_children_components = {
child["device_id"]: child
for child in child_device_components_resp["child_component_list"]
child["device_id"]: child for child in child_component_list
}
children = self._children
child_ids: set[str] = set()