* Add initial config flow implementation * Add initial config flow implementation * Add todos * Bugfixes * Add first zeroconf code * Fixes for new firmware * Bugfixes for local integration * Delete local token * Fix diagnostics * Update translations and improve code * Update translations and improve code * Add local integration updates * Add local integration updates * Small tweaks * Add comments * Bugfix * Small code improvements * Small code improvements * Small code improvements * Small code improvements * Small code improvements * Small code improvements * Bugfixes * Small code improvements * Small code improvements * Change Config Flow (breaking change) * Remove token when integration is unloaded * Remove print * Simplify * Bugfixes * Improve configflow * Clean up unnecessary things * Catch nosuchtoken exception * Add migration for Config Flow * Add version 2 migration * Revert change in Config Flow * Fix api type * Update strings * Improve migrate entry * Implement changes * add more comments * Extend diagnostics * Ruff fixes * Clean up code * Bugfixes * Set gateway id * Start writing tests * Add first local test * Code coverage to 64% * Fixes * Remove local token on remove entry * Add debug logging + change manifest * Add developer mode check * Fix not_such_token issue * Small text changes * Bugfix * Fix tests * Address feedback * DRY * Test coverage to 77% * Coverage to 78% * Remove token removal by UUID * Add better retry methods * Clean up * Remove old data * 87% coverage * 90% code coverage * 100% code coverage * Use patch.multiple * Improve tests * Apply pre-commit after rebase * Fix breaking changes in ZeroconfServiceInfo * Add verify_ssl * Fix test import * Fix tests * Catch SSL verify failed * Revert hub to server rename * Move Config Flow version back to 1 * Add diagnostics tests * Fix tests * Fix strings * Implement feedback * Add debug logging for local connection errors * Simplify Config Flow and fix tests * Simplify Config Flow * Fix verify_ssl * Fix rebase mistake * Address feedback * Apply suggestions from code review * Update tests/components/overkiz/test_config_flow.py --------- Co-authored-by: Erik Montnemery <erik@montnemery.com>
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
"""Provides diagnostics for Overkiz."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from pyoverkiz.enums import APIType
|
|
from pyoverkiz.obfuscate import obfuscate_id
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.device_registry import DeviceEntry
|
|
|
|
from . import HomeAssistantOverkizData
|
|
from .const import CONF_API_TYPE, CONF_HUB, DOMAIN
|
|
|
|
|
|
async def async_get_config_entry_diagnostics(
|
|
hass: HomeAssistant, entry: ConfigEntry
|
|
) -> dict[str, Any]:
|
|
"""Return diagnostics for a config entry."""
|
|
entry_data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
|
|
client = entry_data.coordinator.client
|
|
|
|
data = {
|
|
"setup": await client.get_diagnostic_data(),
|
|
"server": entry.data[CONF_HUB],
|
|
"api_type": entry.data.get(CONF_API_TYPE, APIType.CLOUD),
|
|
}
|
|
|
|
# Only Overkiz cloud servers expose an endpoint with execution history
|
|
if client.api_type == APIType.CLOUD:
|
|
execution_history = [
|
|
repr(execution) for execution in await client.get_execution_history()
|
|
]
|
|
data["execution_history"] = execution_history
|
|
|
|
return data
|
|
|
|
|
|
async def async_get_device_diagnostics(
|
|
hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
|
|
) -> dict[str, Any]:
|
|
"""Return diagnostics for a device entry."""
|
|
entry_data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
|
|
client = entry_data.coordinator.client
|
|
|
|
device_url = min(device.identifiers)[1]
|
|
|
|
data = {
|
|
"device": {
|
|
"controllable_name": device.hw_version,
|
|
"firmware": device.sw_version,
|
|
"device_url": obfuscate_id(device_url),
|
|
"model": device.model,
|
|
},
|
|
"setup": await client.get_diagnostic_data(),
|
|
"server": entry.data[CONF_HUB],
|
|
"api_type": entry.data.get(CONF_API_TYPE, APIType.CLOUD),
|
|
}
|
|
|
|
# Only Overkiz cloud servers expose an endpoint with execution history
|
|
if client.api_type == APIType.CLOUD:
|
|
data["execution_history"] = [
|
|
repr(execution)
|
|
for execution in await client.get_execution_history()
|
|
if any(command.device_url == device_url for command in execution.commands)
|
|
]
|
|
|
|
return data
|