Add device diagnostics support to Tuya (#64537)

pull/64558/head
Franck Nijhof 2022-01-20 12:37:52 +01:00 committed by GitHub
parent 92e0dc577e
commit 76229bc188
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 34 additions and 5 deletions

View File

@ -11,6 +11,7 @@ from homeassistant.components.diagnostics import REDACTED
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.device_registry import DeviceEntry
from homeassistant.util import dt as dt_util
from . import HomeAssistantTuyaData
@ -26,6 +27,23 @@ from .const import (
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
return _async_get_diagnostics(hass, entry)
async def async_get_device_diagnostics(
hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
) -> dict[str, Any]:
"""Return diagnostics for a device entry."""
return _async_get_diagnostics(hass, entry, device)
@callback
def _async_get_diagnostics(
hass: HomeAssistant,
entry: ConfigEntry,
device: DeviceEntry | None = None,
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
hass_data: HomeAssistantTuyaData = hass.data[DOMAIN][entry.entry_id]
@ -34,7 +52,7 @@ async def async_get_config_entry_diagnostics(
if hass_data.home_manager.mq.client:
mqtt_connected = hass_data.home_manager.mq.client.is_connected()
return {
data = {
"endpoint": entry.data[CONF_ENDPOINT],
"auth_type": entry.data[CONF_AUTH_TYPE],
"country_code": entry.data[CONF_COUNTRY_CODE],
@ -42,12 +60,23 @@ async def async_get_config_entry_diagnostics(
"mqtt_connected": mqtt_connected,
"disabled_by": entry.disabled_by,
"disabled_polling": entry.pref_disable_polling,
"devices": [
_async_device_as_dict(hass, device)
for device in hass_data.device_manager.device_map.values()
],
}
if device:
tuya_device_id = next(iter(device.identifiers))[1]
data |= _async_device_as_dict(
hass, hass_data.device_manager.device_map[tuya_device_id]
)
else:
data.update(
devices=[
_async_device_as_dict(hass, device)
for device in hass_data.device_manager.device_map.values()
]
)
return data
@callback
def _async_device_as_dict(hass: HomeAssistant, device: TuyaDevice) -> dict[str, Any]: