From bac370e775264250de57dfcfcdfbb59511defa96 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Mon, 16 Mar 2026 08:22:46 +0100 Subject: [PATCH] Add diagnostics to Zinvolt (#165623) --- .../components/zinvolt/diagnostics.py | 23 +++++++++++++ .../components/zinvolt/quality_scale.yaml | 2 +- .../zinvolt/snapshots/test_diagnostics.ambr | 34 +++++++++++++++++++ tests/components/zinvolt/test_diagnostics.py | 30 ++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/zinvolt/diagnostics.py create mode 100644 tests/components/zinvolt/snapshots/test_diagnostics.ambr create mode 100644 tests/components/zinvolt/test_diagnostics.py diff --git a/homeassistant/components/zinvolt/diagnostics.py b/homeassistant/components/zinvolt/diagnostics.py new file mode 100644 index 00000000000..a7e379551c9 --- /dev/null +++ b/homeassistant/components/zinvolt/diagnostics.py @@ -0,0 +1,23 @@ +"""Diagnostics support for Zinvolt.""" + +from __future__ import annotations + +from typing import Any + +from homeassistant.core import HomeAssistant + +from .coordinator import ZinvoltConfigEntry + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: ZinvoltConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + return { + "coordinators": [ + { + coordinator.battery.identifier: coordinator.data.to_dict(), + } + for coordinator in entry.runtime_data.values() + ], + } diff --git a/homeassistant/components/zinvolt/quality_scale.yaml b/homeassistant/components/zinvolt/quality_scale.yaml index 413995615f0..9a86dcb68ea 100644 --- a/homeassistant/components/zinvolt/quality_scale.yaml +++ b/homeassistant/components/zinvolt/quality_scale.yaml @@ -41,7 +41,7 @@ rules: # Gold devices: done - diagnostics: todo + diagnostics: done discovery-update-info: todo discovery: todo docs-data-update: todo diff --git a/tests/components/zinvolt/snapshots/test_diagnostics.ambr b/tests/components/zinvolt/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..0e60e9d7ff6 --- /dev/null +++ b/tests/components/zinvolt/snapshots/test_diagnostics.ambr @@ -0,0 +1,34 @@ +# serializer version: 1 +# name: test_entry_diagnostics + dict({ + 'coordinators': list([ + dict({ + 'a125ef17-6bdf-45ad-b106-ce54e95e4634': dict({ + 'current_power': dict({ + 'is_dormant': False, + 'max_power': 800, + 'on_grid': True, + 'online_status': 'ONLINE', + 'output_current': 4, + 'photovoltaic_power': 0, + 'power_socket_output': -19, + 'state_of_charge': 100.0, + }), + 'global_settings': dict({ + 'battery_lower_threshold': 10, + 'battery_upper_threshold': 100, + 'max_output': 800, + 'max_output_limit': 800, + 'max_output_unlocked': False, + 'maximum_charge_power': 800, + 'standby_time': 60, + }), + 'name': 'ZVG011025120088', + 'online_status': 'ONLINE', + 'serial_number': 'ZVG011025120088', + 'smart_mode': 'CHARGED', + }), + }), + ]), + }) +# --- diff --git a/tests/components/zinvolt/test_diagnostics.py b/tests/components/zinvolt/test_diagnostics.py new file mode 100644 index 00000000000..e11f900742f --- /dev/null +++ b/tests/components/zinvolt/test_diagnostics.py @@ -0,0 +1,30 @@ +"""Tests for Zinvolt diagnostics.""" + +from unittest.mock import AsyncMock + +from syrupy.assertion import SnapshotAssertion + +from homeassistant.core import HomeAssistant + +from . import setup_integration + +from tests.common import MockConfigEntry +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, + mock_zinvolt_client: AsyncMock, + mock_config_entry: MockConfigEntry, + snapshot: SnapshotAssertion, +) -> None: + """Test config entry diagnostics.""" + await setup_integration(hass, mock_config_entry) + + result = await get_diagnostics_for_config_entry( + hass, hass_client, mock_config_entry + ) + + assert result == snapshot