Add Imou diagnostics for config entries (#181132)

This commit is contained in:
Imou-OpenPlatform
2026-09-03 14:15:06 +02:00
committed by GitHub
parent 4a3c24e1d8
commit 7639813247
4 changed files with 91 additions and 1 deletions
@@ -0,0 +1,44 @@
"""Diagnostics support for Imou."""
from typing import Any
from pyimouapi.ha_device import ImouHaDevice
from homeassistant.core import HomeAssistant
from .const import CONF_API_URL, CONF_APP_ID, imou_device_identifier
from .coordinator import ImouConfigEntry
def _serialize_device(device: ImouHaDevice) -> dict[str, Any]:
"""Return a JSON-safe view of a discovered Imou device."""
return {
"identifier": imou_device_identifier(device),
"device_id": device.device_id,
"channel_id": device.channel_id,
"model": device.model,
"manufacturer": device.manufacturer,
"sw_version": device.swversion,
"product_id": device.product_id,
"is_ipc": device.is_ipc,
}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ImouConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator = entry.runtime_data
return {
"entry": {
CONF_API_URL: entry.data[CONF_API_URL],
CONF_APP_ID: entry.data[CONF_APP_ID],
},
"coordinator": {
"last_update_success": coordinator.last_update_success,
},
"devices": [
_serialize_device(device)
for device in sorted(coordinator.devices, key=imou_device_identifier)
],
}
@@ -45,7 +45,7 @@ rules:
# Gold
devices: done
diagnostics: todo
diagnostics: done
discovery-update-info:
status: exempt
comment: Cloud hub; DHCP only surfaces the integration. Device IP is not stored or updated.
@@ -0,0 +1,24 @@
# serializer version: 1
# name: test_config_entry_diagnostics
dict({
'coordinator': dict({
'last_update_success': True,
}),
'devices': list([
dict({
'channel_id': None,
'device_id': 'd1',
'identifier': 'd1',
'is_ipc': False,
'manufacturer': 'Imou',
'model': 'm1',
'product_id': None,
'sw_version': '1.0',
}),
]),
'entry': dict({
'api_url': 'sg',
'app_id': 'test_app_id',
}),
})
# ---
+22
View File
@@ -0,0 +1,22 @@
"""Tests for Imou diagnostics."""
from syrupy.assertion import SnapshotAssertion
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_config_entry_diagnostics(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
init_integration: MockConfigEntry,
snapshot: SnapshotAssertion,
) -> None:
"""Diagnostics include the region, App ID, and current devices."""
assert (
await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
== snapshot
)