Initial Commit
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
"""Provides diagnostics for Nest Protect."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import dataclasses
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.diagnostics import async_redact_data
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.device_registry import DeviceEntry
|
||||
|
||||
from . import HomeAssistantNestProtectData
|
||||
from .const import CONF_COOKIES, CONF_ISSUE_TOKEN, CONF_REFRESH_TOKEN, DOMAIN
|
||||
from .pynest.const import FULL_NEST_REQUEST
|
||||
|
||||
TO_REDACT = [
|
||||
"access_token",
|
||||
"address_lines",
|
||||
"aux_primary_fabric_id",
|
||||
"city",
|
||||
"country",
|
||||
"email",
|
||||
"emergency_contact_description",
|
||||
"emergency_contact_phone",
|
||||
"ifj_primary_fabric_id",
|
||||
"latitude",
|
||||
"location",
|
||||
"longitude",
|
||||
"name",
|
||||
"parameters",
|
||||
"pairing_token",
|
||||
"postal_code",
|
||||
"profile_image_url",
|
||||
"serial_number",
|
||||
"service_config",
|
||||
"state",
|
||||
"sunrise",
|
||||
"sunset",
|
||||
"temp_c",
|
||||
"thread_ip_address",
|
||||
"thread_mac_address",
|
||||
"time_zone",
|
||||
"topaz_hush_key",
|
||||
"user",
|
||||
"wifi_mac_address",
|
||||
"zip",
|
||||
]
|
||||
|
||||
|
||||
async def async_get_config_entry_diagnostics(
|
||||
hass: HomeAssistant, entry: ConfigEntry
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a config entry."""
|
||||
issue_token = None
|
||||
cookies = None
|
||||
refresh_token = None
|
||||
|
||||
if CONF_ISSUE_TOKEN in entry.data and CONF_COOKIES in entry.data:
|
||||
issue_token = entry.data[CONF_ISSUE_TOKEN]
|
||||
cookies = entry.data[CONF_COOKIES]
|
||||
if CONF_REFRESH_TOKEN in entry.data:
|
||||
refresh_token = entry.data[CONF_REFRESH_TOKEN]
|
||||
|
||||
entry_data: HomeAssistantNestProtectData = hass.data[DOMAIN][entry.entry_id]
|
||||
client = entry_data.client
|
||||
|
||||
if issue_token and cookies:
|
||||
auth = await client.get_access_token_from_cookies(issue_token, cookies)
|
||||
elif refresh_token:
|
||||
auth = await client.get_access_token_from_refresh_token(refresh_token)
|
||||
|
||||
nest = await client.authenticate(auth.access_token)
|
||||
|
||||
data = {
|
||||
"app_launch": dataclasses.asdict(
|
||||
await client.get_first_data(
|
||||
nest.access_token, nest.userid, request=FULL_NEST_REQUEST
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
return async_redact_data(data, TO_REDACT)
|
||||
|
||||
|
||||
async def async_get_device_diagnostics(
|
||||
hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a device entry."""
|
||||
issue_token = None
|
||||
cookies = None
|
||||
refresh_token = None
|
||||
|
||||
if CONF_ISSUE_TOKEN in entry.data and CONF_COOKIES in entry.data:
|
||||
issue_token = entry.data[CONF_ISSUE_TOKEN]
|
||||
cookies = entry.data[CONF_COOKIES]
|
||||
if CONF_REFRESH_TOKEN in entry.data:
|
||||
refresh_token = entry.data[CONF_REFRESH_TOKEN]
|
||||
|
||||
entry_data: HomeAssistantNestProtectData = hass.data[DOMAIN][entry.entry_id]
|
||||
client = entry_data.client
|
||||
|
||||
if issue_token and cookies:
|
||||
auth = await client.get_access_token_from_cookies(issue_token, cookies)
|
||||
elif refresh_token:
|
||||
auth = await client.get_access_token_from_refresh_token(refresh_token)
|
||||
|
||||
nest = await client.authenticate(auth.access_token)
|
||||
|
||||
data = {
|
||||
"device": {
|
||||
"controllable_name": device.hw_version,
|
||||
"firmware": device.sw_version,
|
||||
"model": device.model,
|
||||
},
|
||||
"app_launch": dataclasses.asdict(
|
||||
await client.get_first_data(nest.access_token, nest.userid)
|
||||
),
|
||||
}
|
||||
|
||||
return async_redact_data(data, TO_REDACT)
|
||||
Reference in New Issue
Block a user