Add diagnostics feature to incomfort integration (#136009)

pull/136012/head
Jan Bouwhuis 2025-01-19 19:27:36 +01:00 committed by GitHub
parent 04eb86e5a0
commit 5ffae140af
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 104 additions and 0 deletions

View File

@ -0,0 +1,45 @@
"""Diagnostics support for InComfort integration."""
from __future__ import annotations
from typing import Any
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_PASSWORD
from homeassistant.core import HomeAssistant, callback
from . import InComfortConfigEntry
REDACT_CONFIG = {CONF_PASSWORD}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: InComfortConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
return _async_get_diagnostics(hass, entry)
@callback
def _async_get_diagnostics(
hass: HomeAssistant,
entry: InComfortConfigEntry,
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
redacted_config = async_redact_data(entry.data | entry.options, REDACT_CONFIG)
coordinator = entry.runtime_data
nr_heaters = len(coordinator.incomfort_data.heaters)
status: dict[str, Any] = {
f"heater_{n}": coordinator.incomfort_data.heaters[n].status
for n in range(nr_heaters)
}
for n in range(nr_heaters):
status[f"heater_{n}"]["rooms"] = {
n: dict(coordinator.incomfort_data.heaters[n].rooms[m].status)
for m in range(len(coordinator.incomfort_data.heaters[n].rooms))
}
return {
"config": redacted_config,
"gateway": status,
}

View File

@ -0,0 +1,35 @@
# serializer version: 1
# name: test_entry_diagnostics
dict({
'config': dict({
'host': '192.168.1.12',
'password': '**REDACTED**',
'username': 'admin',
}),
'gateway': dict({
'heater_0': dict({
'display_code': 126,
'display_text': 'standby',
'fault_code': None,
'heater_temp': 35.34,
'is_burning': False,
'is_failed': False,
'is_pumping': False,
'is_tapping': False,
'nodenr': 249,
'pressure': 1.86,
'rf_message_rssi': 30,
'rfstatus_cntr': 0,
'rooms': dict({
'0': dict({
'override': 18.0,
'room_temp': 21.42,
'setpoint': 18.0,
}),
}),
'serial_no': 'c0ffeec0ffee',
'tap_temp': 30.21,
}),
}),
})
# ---

View File

@ -0,0 +1,24 @@
"""Test diagnostics for the Intergas InComfort integration."""
from unittest.mock import MagicMock
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, SnapshotAssertion
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,
snapshot: SnapshotAssertion,
mock_incomfort: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test the incomfort integration diagnostics."""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
snapshot.assert_match(
await get_diagnostics_for_config_entry(hass, hass_client, mock_config_entry)
)