94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
"""Diagnostics support for Comelit integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from aiocomelit import (
|
|
ComelitSerialBridgeObject,
|
|
ComelitVedoAreaObject,
|
|
ComelitVedoZoneObject,
|
|
)
|
|
from aiocomelit.const import BRIDGE
|
|
|
|
from homeassistant.components.diagnostics import async_redact_data
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_PIN, CONF_TYPE
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .const import DOMAIN
|
|
from .coordinator import ComelitBaseCoordinator
|
|
|
|
TO_REDACT = {CONF_PIN}
|
|
|
|
|
|
async def async_get_config_entry_diagnostics(
|
|
hass: HomeAssistant, entry: ConfigEntry
|
|
) -> dict[str, Any]:
|
|
"""Return diagnostics for a config entry."""
|
|
|
|
coordinator: ComelitBaseCoordinator = hass.data[DOMAIN][entry.entry_id]
|
|
|
|
dev_list: list[dict[str, Any]] = []
|
|
dev_type_list: list[dict[int, Any]] = []
|
|
|
|
for dev_type in coordinator.data:
|
|
dev_type_list = []
|
|
for sensor_data in coordinator.data[dev_type].values():
|
|
if isinstance(sensor_data, ComelitSerialBridgeObject):
|
|
dev_type_list.append(
|
|
{
|
|
sensor_data.index: {
|
|
"name": sensor_data.name,
|
|
"status": sensor_data.status,
|
|
"human_status": sensor_data.human_status,
|
|
"protected": sensor_data.protected,
|
|
"val": sensor_data.val,
|
|
"zone": sensor_data.zone,
|
|
"power": sensor_data.power,
|
|
"power_unit": sensor_data.power_unit,
|
|
}
|
|
}
|
|
)
|
|
if isinstance(sensor_data, ComelitVedoAreaObject):
|
|
dev_type_list.append(
|
|
{
|
|
sensor_data.index: {
|
|
"name": sensor_data.name,
|
|
"human_status": sensor_data.human_status.value,
|
|
"p1": sensor_data.p1,
|
|
"p2": sensor_data.p2,
|
|
"ready": sensor_data.ready,
|
|
"armed": sensor_data.armed,
|
|
"alarm": sensor_data.alarm,
|
|
"alarm_memory": sensor_data.alarm_memory,
|
|
"sabotage": sensor_data.sabotage,
|
|
"anomaly": sensor_data.anomaly,
|
|
"in_time": sensor_data.in_time,
|
|
"out_time": sensor_data.out_time,
|
|
}
|
|
}
|
|
)
|
|
if isinstance(sensor_data, ComelitVedoZoneObject):
|
|
dev_type_list.append(
|
|
{
|
|
sensor_data.index: {
|
|
"name": sensor_data.name,
|
|
"human_status": sensor_data.human_status.value,
|
|
"status": sensor_data.status,
|
|
"status_api": sensor_data.status_api,
|
|
}
|
|
}
|
|
)
|
|
dev_list.append({dev_type: dev_type_list})
|
|
|
|
return {
|
|
"entry": async_redact_data(entry.as_dict(), TO_REDACT),
|
|
"type": entry.data.get(CONF_TYPE, BRIDGE),
|
|
"device_info": {
|
|
"last_update success": coordinator.last_update_success,
|
|
"last_exception": repr(coordinator.last_exception),
|
|
"devices": dev_list,
|
|
},
|
|
}
|