2024-01-18 09:57:41 +00:00
|
|
|
"""Diagnostics support for La Marzocco."""
|
|
|
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
2024-06-10 17:59:39 +00:00
|
|
|
from dataclasses import asdict
|
|
|
|
from typing import Any, TypedDict
|
|
|
|
|
|
|
|
from lmcloud.const import FirmwareType
|
2024-01-18 09:57:41 +00:00
|
|
|
|
|
|
|
from homeassistant.components.diagnostics import async_redact_data
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
|
|
|
|
from .const import DOMAIN
|
|
|
|
from .coordinator import LaMarzoccoUpdateCoordinator
|
|
|
|
|
|
|
|
TO_REDACT = {
|
|
|
|
"serial_number",
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-06-10 17:59:39 +00:00
|
|
|
class DiagnosticsData(TypedDict):
|
|
|
|
"""Diagnostic data for La Marzocco."""
|
|
|
|
|
|
|
|
model: str
|
|
|
|
config: dict[str, Any]
|
|
|
|
firmware: list[dict[FirmwareType, dict[str, Any]]]
|
|
|
|
statistics: dict[str, Any]
|
|
|
|
|
|
|
|
|
2024-01-18 09:57:41 +00:00
|
|
|
async def async_get_config_entry_diagnostics(
|
2024-06-10 17:59:39 +00:00
|
|
|
hass: HomeAssistant, config_entry: ConfigEntry
|
2024-01-18 09:57:41 +00:00
|
|
|
) -> dict[str, Any]:
|
|
|
|
"""Return diagnostics for a config entry."""
|
2024-06-10 17:59:39 +00:00
|
|
|
coordinator: LaMarzoccoUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
|
|
|
|
device = coordinator.device
|
2024-01-18 09:57:41 +00:00
|
|
|
# collect all data sources
|
2024-06-10 17:59:39 +00:00
|
|
|
diagnostics_data = DiagnosticsData(
|
|
|
|
model=device.model,
|
|
|
|
config=asdict(device.config),
|
|
|
|
firmware=[{key: asdict(firmware)} for key, firmware in device.firmware.items()],
|
|
|
|
statistics=asdict(device.statistics),
|
|
|
|
)
|
|
|
|
|
|
|
|
return async_redact_data(diagnostics_data, TO_REDACT)
|