Skip to content

Commit 245f47c

Browse files
authored
Add diagnostics to Airobot integration (home-assistant#158247)
1 parent 86135a1 commit 245f47c

File tree

4 files changed

+111
-2
lines changed

4 files changed

+111
-2
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"""Diagnostics support for Airobot."""
2+
3+
from __future__ import annotations
4+
5+
from dataclasses import asdict
6+
from typing import Any
7+
8+
from homeassistant.components.diagnostics import async_redact_data
9+
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_PASSWORD, CONF_USERNAME
10+
from homeassistant.core import HomeAssistant
11+
12+
from .coordinator import AirobotConfigEntry
13+
14+
TO_REDACT_CONFIG = [CONF_HOST, CONF_MAC, CONF_PASSWORD, CONF_USERNAME]
15+
16+
17+
async def async_get_config_entry_diagnostics(
18+
hass: HomeAssistant, entry: AirobotConfigEntry
19+
) -> dict[str, Any]:
20+
"""Return diagnostics for a config entry."""
21+
coordinator = entry.runtime_data
22+
23+
# Build device capabilities info
24+
device_capabilities = None
25+
if coordinator.data:
26+
device_capabilities = {
27+
"has_floor_sensor": coordinator.data.status.has_floor_sensor,
28+
"has_co2_sensor": coordinator.data.status.has_co2_sensor,
29+
"hw_version": coordinator.data.status.hw_version,
30+
"fw_version": coordinator.data.status.fw_version,
31+
}
32+
33+
return {
34+
"entry_data": async_redact_data(entry.data, TO_REDACT_CONFIG),
35+
"device_capabilities": device_capabilities,
36+
"status": asdict(coordinator.data.status) if coordinator.data else None,
37+
"settings": asdict(coordinator.data.settings) if coordinator.data else None,
38+
}

homeassistant/components/airobot/quality_scale.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ rules:
3939

4040
# Gold
4141
devices: done
42-
diagnostics: todo
42+
diagnostics: done
4343
discovery-update-info: done
4444
discovery: done
4545
docs-data-update: done
@@ -55,7 +55,7 @@ rules:
5555
entity-category: done
5656
entity-device-class: done
5757
entity-disabled-by-default: done
58-
entity-translations: todo
58+
entity-translations: done
5959
exception-translations: done
6060
icon-translations: todo
6161
reconfiguration-flow: todo
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# serializer version: 1
2+
# name: test_entry_diagnostics
3+
dict({
4+
'device_capabilities': dict({
5+
'fw_version': 300,
6+
'has_co2_sensor': False,
7+
'has_floor_sensor': False,
8+
'hw_version': 256,
9+
}),
10+
'entry_data': dict({
11+
'host': '**REDACTED**',
12+
'mac': '**REDACTED**',
13+
'password': '**REDACTED**',
14+
'username': '**REDACTED**',
15+
}),
16+
'settings': dict({
17+
'device_id': 'T01A1B2C3',
18+
'device_name': 'Test Thermostat',
19+
'hysteresis_band': 0.1,
20+
'mode': 1,
21+
'setpoint_temp': 22.0,
22+
'setpoint_temp_away': 18.0,
23+
'setting_flags': dict({
24+
'actuator_exercise_disabled': False,
25+
'boost_enabled': False,
26+
'childlock_enabled': False,
27+
'reboot': False,
28+
'recalibrate_co2': False,
29+
}),
30+
}),
31+
'status': dict({
32+
'aqi': None,
33+
'co2': None,
34+
'device_id': 'T01A1B2C3',
35+
'device_uptime': 10000,
36+
'errors': 0,
37+
'fw_version': 300,
38+
'heating_uptime': 5000,
39+
'hum_air': 45.0,
40+
'hw_version': 256,
41+
'setpoint_temp': 22.0,
42+
'status_flags': dict({
43+
'heating_on': False,
44+
'window_open_detected': False,
45+
}),
46+
'temp_air': 22.0,
47+
'temp_floor': None,
48+
}),
49+
})
50+
# ---
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""Test the Airobot diagnostics."""
2+
3+
from syrupy.assertion import SnapshotAssertion
4+
5+
from homeassistant.core import HomeAssistant
6+
7+
from tests.common import MockConfigEntry
8+
from tests.components.diagnostics import get_diagnostics_for_config_entry
9+
from tests.typing import ClientSessionGenerator
10+
11+
12+
async def test_entry_diagnostics(
13+
hass: HomeAssistant,
14+
hass_client: ClientSessionGenerator,
15+
init_integration: MockConfigEntry,
16+
snapshot: SnapshotAssertion,
17+
) -> None:
18+
"""Test config entry diagnostics."""
19+
result = await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
20+
21+
assert result == snapshot

0 commit comments

Comments
 (0)