From e9ca7c251644825f8462a430683944eab4ef30b8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 19 Feb 2022 22:54:12 -0600 Subject: [PATCH] Add support for WiZ diagnostics (#66817) --- homeassistant/components/wiz/diagnostics.py | 27 +++++++++++++++++++++ homeassistant/components/wiz/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/wiz/__init__.py | 5 ++++ tests/components/wiz/test_diagnostics.py | 19 +++++++++++++++ 6 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 homeassistant/components/wiz/diagnostics.py create mode 100644 tests/components/wiz/test_diagnostics.py diff --git a/homeassistant/components/wiz/diagnostics.py b/homeassistant/components/wiz/diagnostics.py new file mode 100644 index 00000000000..4fdf62b3c8c --- /dev/null +++ b/homeassistant/components/wiz/diagnostics.py @@ -0,0 +1,27 @@ +"""Diagnostics support for WiZ.""" +from __future__ import annotations + +from typing import Any + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from .const import DOMAIN +from .models import WizData + +TO_REDACT = {"roomId", "homeId"} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + wiz_data: WizData = hass.data[DOMAIN][entry.entry_id] + return { + "entry": { + "title": entry.title, + "data": dict(entry.data), + }, + "data": async_redact_data(wiz_data.bulb.diagnostics, TO_REDACT), + } diff --git a/homeassistant/components/wiz/manifest.json b/homeassistant/components/wiz/manifest.json index 7794162d32c..021b986f82e 100644 --- a/homeassistant/components/wiz/manifest.json +++ b/homeassistant/components/wiz/manifest.json @@ -10,7 +10,7 @@ "dependencies": ["network"], "quality_scale": "platinum", "documentation": "https://www.home-assistant.io/integrations/wiz", - "requirements": ["pywizlight==0.5.9"], + "requirements": ["pywizlight==0.5.10"], "iot_class": "local_push", "codeowners": ["@sbidy"] } diff --git a/requirements_all.txt b/requirements_all.txt index b743bc8a55d..8796d7556f5 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2057,7 +2057,7 @@ pywemo==0.7.0 pywilight==0.0.70 # homeassistant.components.wiz -pywizlight==0.5.9 +pywizlight==0.5.10 # homeassistant.components.xeoma pyxeoma==1.4.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 21aca60f3bd..6399e9611f2 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1288,7 +1288,7 @@ pywemo==0.7.0 pywilight==0.0.70 # homeassistant.components.wiz -pywizlight==0.5.9 +pywizlight==0.5.10 # homeassistant.components.zerproc pyzerproc==0.4.8 diff --git a/tests/components/wiz/__init__.py b/tests/components/wiz/__init__.py index 8d187e9b476..ca4d0460173 100644 --- a/tests/components/wiz/__init__.py +++ b/tests/components/wiz/__init__.py @@ -171,6 +171,11 @@ def _mocked_wizlight(device, extended_white_range, bulb_type) -> wizlight: bulb.start_push = AsyncMock(side_effect=_save_setup_callback) bulb.async_close = AsyncMock() bulb.set_speed = AsyncMock() + bulb.diagnostics = { + "mocked": "mocked", + "roomId": 123, + "homeId": 34, + } bulb.state = FAKE_STATE bulb.mac = FAKE_MAC bulb.bulbtype = bulb_type or FAKE_DIMMABLE_BULB diff --git a/tests/components/wiz/test_diagnostics.py b/tests/components/wiz/test_diagnostics.py new file mode 100644 index 00000000000..c993072bc07 --- /dev/null +++ b/tests/components/wiz/test_diagnostics.py @@ -0,0 +1,19 @@ +"""Test WiZ diagnostics.""" +from . import async_setup_integration + +from tests.components.diagnostics import get_diagnostics_for_config_entry + + +async def test_diagnostics(hass, hass_client): + """Test generating diagnostics for a config entry.""" + _, entry = await async_setup_integration(hass) + diag = await get_diagnostics_for_config_entry(hass, hass_client, entry) + + assert diag == { + "data": { + "homeId": "**REDACTED**", + "mocked": "mocked", + "roomId": "**REDACTED**", + }, + "entry": {"data": {"host": "1.1.1.1"}, "title": "Mock Title"}, + }