Add diagnostics platform to Smlight (#126423)

* Add diagnostics for Smlight

* test diagnostics

* Add log fixture and snapshot

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
pull/126458/head
TimL 2024-09-23 00:04:36 +10:00 committed by GitHub
parent 90aa9aa98f
commit f98b1d248a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,25 @@
"""Collect diagnostics for SMLIGHT devices."""
from __future__ import annotations
from typing import Any
from pysmlight.const import Actions
from homeassistant.core import HomeAssistant
from . import SmConfigEntry
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: SmConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordintator = config_entry.runtime_data.data
info = await coordintator.client.get_info()
log = await coordintator.client.get({"action": Actions.API_GET_LOG.value}) or "none"
return {
"info": info.to_dict(),
"log": log.split("\n"),
}

View File

@ -0,0 +1 @@
[04:28:51] setup | Starting firmware: v2.3.6\n[04:28:52] ConfigHelper | LittleFS mounted\n[04:28:52] ConfigHelper | load config\n[04:28:52] ConfigHelper | config open: Ok\n[04:28:52] setup | Config loaded\n[04:28:52] setup | Reboot reason: 3\n[04:28:52] setup | Coordinator mode: LAN\n[04:28:52] setup | Device type: SLZB-06P10\n[04:28:52] setup | Radio mode: \"ZB COORD\" Radio FW version: 20240716 Radio FW CH: PROD\n[04:28:52] Network | init\n[04:28:52] L_Y,L_B | status: 1\n[04:28:54] Network | EVENT_ETH_START\n[04:28:54] Network | EVENT_ETH_CONNECTED\n[04:28:54] Network | [MDNS] Started\n[04:28:54] Network | EVENT_ETH_GOT_IP\n[04:28:54] Network | ETH MAC: AA:BB:CC:DD:EE:FF IPv4: 192.168.0.11 GW: 192.168.0.1 Speed: 100Mbps DNS1: 192.168.0.1 DNS2: 0.0.0.0\n[04:28:54] Network | fireNetworkUp\n[04:28:54] taskZB | Waiting for zbChk\n[04:28:54] Web | Webserver started

View File

@ -0,0 +1,27 @@
# serializer version: 1
# name: test_entry_diagnostics
dict({
'info': dict({
'MAC': 'AA:BB:CC:DD:EE:FF',
'coord_mode': 0,
'device_ip': '192.168.1.161',
'fs_total': 3456,
'fw_channel': 'dev',
'hostname': 'SLZB-06p7',
'legacy_api': 0,
'model': 'SLZB-06p7',
'ram_total': 296,
'sw_version': 'v2.3.6',
'wifi_mode': 0,
'zb_channel': 0,
'zb_flash_size': 704,
'zb_hw': 'CC2652P7',
'zb_ram_size': 152,
'zb_type': 0,
'zb_version': '20240314',
}),
'log': list([
'[04:28:51] setup | Starting firmware: v2.3.6\\n[04:28:52] ConfigHelper | LittleFS mounted\\n[04:28:52] ConfigHelper | load config\\n[04:28:52] ConfigHelper | config open: Ok\\n[04:28:52] setup | Config loaded\\n[04:28:52] setup | Reboot reason: 3\\n[04:28:52] setup | Coordinator mode: LAN\\n[04:28:52] setup | Device type: SLZB-06P10\\n[04:28:52] setup | Radio mode: \\"ZB COORD\\" Radio FW version: 20240716 Radio FW CH: PROD\\n[04:28:52] Network | init\\n[04:28:52] L_Y,L_B | status: 1\\n[04:28:54] Network | EVENT_ETH_START\\n[04:28:54] Network | EVENT_ETH_CONNECTED\\n[04:28:54] Network | [MDNS] Started\\n[04:28:54] Network | EVENT_ETH_GOT_IP\\n[04:28:54] Network | ETH MAC: AA:BB:CC:DD:EE:FF IPv4: 192.168.0.11 GW: 192.168.0.1 Speed: 100Mbps DNS1: 192.168.0.1 DNS2: 0.0.0.0\\n[04:28:54] Network | fireNetworkUp\\n[04:28:54] taskZB | Waiting for zbChk\\n[04:28:54] Web | Webserver started',
]),
})
# ---

View File

@ -0,0 +1,30 @@
"""Test SMLIGHT diagnostics."""
from unittest.mock import MagicMock
from syrupy import SnapshotAssertion
from homeassistant.components.smlight.const import DOMAIN
from homeassistant.core import HomeAssistant
from .conftest import setup_integration
from tests.common import MockConfigEntry, load_fixture
from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator
async def test_entry_diagnostics(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
mock_config_entry: MockConfigEntry,
mock_smlight_client: MagicMock,
snapshot: SnapshotAssertion,
) -> None:
"""Test config entry diagnostics."""
mock_smlight_client.get.return_value = load_fixture("logs.txt", DOMAIN)
entry = await setup_integration(hass, mock_config_entry)
result = await get_diagnostics_for_config_entry(hass, hass_client, entry)
assert result == snapshot