diff --git a/homeassistant/components/bsblan/diagnostics.py b/homeassistant/components/bsblan/diagnostics.py new file mode 100644 index 00000000000..91d959ea0e2 --- /dev/null +++ b/homeassistant/components/bsblan/diagnostics.py @@ -0,0 +1,22 @@ +"""Diagnostics support for BSBLan.""" +from __future__ import annotations + +from typing import Any + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from . import HomeAssistantBSBLANData +from .const import DOMAIN + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + data: HomeAssistantBSBLANData = hass.data[DOMAIN][entry.entry_id] + return { + "info": data.info.dict(), + "device": data.device.dict(), + "state": data.coordinator.data.dict(), + } diff --git a/tests/components/bsblan/fixtures/diagnostics.json b/tests/components/bsblan/fixtures/diagnostics.json new file mode 100644 index 00000000000..b805a3b0b1b --- /dev/null +++ b/tests/components/bsblan/fixtures/diagnostics.json @@ -0,0 +1,110 @@ +{ + "info": { + "device_identification": { + "name": "Gerte-Identifikation", + "unit": "", + "desc": "", + "value": "RVS21.831F/127", + "dataType": 7 + }, + "controller_family": { + "name": "Device family", + "unit": "", + "desc": "", + "value": "211", + "dataType": 0 + }, + "controller_variant": { + "name": "Device variant", + "unit": "", + "desc": "", + "value": "127", + "dataType": 0 + } + }, + "device": { + "name": "BSB-LAN", + "version": "1.0.38-20200730234859", + "MAC": "00:80:41:19:69:90", + "uptime": 969402857 + }, + "state": { + "hvac_mode": { + "name": "Operating mode", + "unit": "", + "desc": "Komfort", + "value": "heat", + "dataType": 1 + }, + "hvac_mode2": { + "name": "Operating mode", + "unit": "", + "desc": "Reduziert", + "value": "2", + "dataType": 1 + }, + "target_temperature": { + "name": "Room temperature Comfort setpoint", + "unit": "°C", + "desc": "", + "value": "18.5", + "dataType": 0 + }, + "target_temperature_high": { + "name": "Komfortsollwert Maximum", + "unit": "°C", + "desc": "", + "value": "23.0", + "dataType": 0 + }, + "target_temperature_low": { + "name": "Room temp reduced setpoint", + "unit": "°C", + "desc": "", + "value": "17.0", + "dataType": 0 + }, + "min_temp": { + "name": "Room temp frost protection setpoint", + "unit": "°C", + "desc": "", + "value": "8.0", + "dataType": 0 + }, + "max_temp": { + "name": "Summer/winter changeover temp heat circuit 1", + "unit": "°C", + "desc": "", + "value": "20.0", + "dataType": 0 + }, + "hvac_action": { + "name": "Status heating circuit 1", + "unit": "", + "desc": "Raumtemp\u2019begrenzung", + "value": "122", + "dataType": 1 + }, + "current_temperature": { + "name": "Room temp 1 actual value", + "unit": "°C", + "desc": "", + "value": "18.6", + "dataType": 0 + }, + "room1_thermostat_mode": { + "name": "Raumthermostat 1", + "unit": "", + "desc": "Kein Bedarf", + "value": "0", + "dataType": 1 + }, + "outside_temperature": { + "name": "Outside temp sensor local", + "unit": "°C", + "desc": "", + "value": "6.1", + "dataType": 0 + } + } +} diff --git a/tests/components/bsblan/test_diagnostics.py b/tests/components/bsblan/test_diagnostics.py new file mode 100644 index 00000000000..6af6972e577 --- /dev/null +++ b/tests/components/bsblan/test_diagnostics.py @@ -0,0 +1,24 @@ +"""Tests for the diagnostics data provided by the BSBLan integration.""" +import json + +from aiohttp import ClientSession + +from homeassistant.core import HomeAssistant + +from tests.common import MockConfigEntry, load_fixture +from tests.components.diagnostics import get_diagnostics_for_config_entry + + +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSession, + init_integration: MockConfigEntry, +): + """Test diagnostics.""" + + diagnostics_fixture = json.loads(load_fixture("bsblan/diagnostics.json")) + + assert ( + await get_diagnostics_for_config_entry(hass, hass_client, init_integration) + == diagnostics_fixture + )