Add instance id to the cloud integration (#103162)
This commit is contained in:
parent
947ce592c1
commit
2859055b36
7 changed files with 27 additions and 2 deletions
|
@ -230,6 +230,7 @@ class CloudClient(Interface):
|
|||
"alias": self.cloud.remote.alias,
|
||||
},
|
||||
"version": HA_VERSION,
|
||||
"instance_id": self.prefs.instance_id,
|
||||
}
|
||||
|
||||
async def async_alexa_message(self, payload: dict[Any, Any]) -> dict[Any, Any]:
|
||||
|
|
|
@ -13,6 +13,7 @@ PREF_GOOGLE_REPORT_STATE = "google_report_state"
|
|||
PREF_ALEXA_ENTITY_CONFIGS = "alexa_entity_configs"
|
||||
PREF_ALEXA_REPORT_STATE = "alexa_report_state"
|
||||
PREF_DISABLE_2FA = "disable_2fa"
|
||||
PREF_INSTANCE_ID = "instance_id"
|
||||
PREF_SHOULD_EXPOSE = "should_expose"
|
||||
PREF_GOOGLE_LOCAL_WEBHOOK_ID = "google_local_webhook_id"
|
||||
PREF_USERNAME = "username"
|
||||
|
|
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
|||
|
||||
from collections.abc import Callable, Coroutine
|
||||
from typing import Any
|
||||
import uuid
|
||||
|
||||
from homeassistant.auth.const import GROUP_ID_ADMIN
|
||||
from homeassistant.auth.models import User
|
||||
|
@ -33,6 +34,7 @@ from .const import (
|
|||
PREF_GOOGLE_REPORT_STATE,
|
||||
PREF_GOOGLE_SECURE_DEVICES_PIN,
|
||||
PREF_GOOGLE_SETTINGS_VERSION,
|
||||
PREF_INSTANCE_ID,
|
||||
PREF_REMOTE_DOMAIN,
|
||||
PREF_TTS_DEFAULT_VOICE,
|
||||
PREF_USERNAME,
|
||||
|
@ -91,6 +93,13 @@ class CloudPreferences:
|
|||
PREF_GOOGLE_LOCAL_WEBHOOK_ID: webhook.async_generate_id(),
|
||||
}
|
||||
)
|
||||
if PREF_INSTANCE_ID not in self._prefs:
|
||||
await self._save_prefs(
|
||||
{
|
||||
**self._prefs,
|
||||
PREF_INSTANCE_ID: uuid.uuid4().hex,
|
||||
}
|
||||
)
|
||||
|
||||
@callback
|
||||
def async_listen_updates(
|
||||
|
@ -264,6 +273,11 @@ class CloudPreferences:
|
|||
"""Return the published cloud webhooks."""
|
||||
return self._prefs.get(PREF_CLOUDHOOKS, {}) # type: ignore[no-any-return]
|
||||
|
||||
@property
|
||||
def instance_id(self) -> str | None:
|
||||
"""Return the instance ID."""
|
||||
return self._prefs.get(PREF_INSTANCE_ID)
|
||||
|
||||
@property
|
||||
def tts_default_voice(self) -> tuple[str, str]:
|
||||
"""Return the default TTS voice."""
|
||||
|
@ -320,6 +334,7 @@ class CloudPreferences:
|
|||
PREF_GOOGLE_ENTITY_CONFIGS: {},
|
||||
PREF_GOOGLE_SETTINGS_VERSION: GOOGLE_SETTINGS_VERSION,
|
||||
PREF_GOOGLE_LOCAL_WEBHOOK_ID: webhook.async_generate_id(),
|
||||
PREF_INSTANCE_ID: uuid.uuid4().hex,
|
||||
PREF_GOOGLE_SECURE_DEVICES_PIN: None,
|
||||
PREF_REMOTE_DOMAIN: None,
|
||||
PREF_USERNAME: username,
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
"alexa_enabled": "Alexa Enabled",
|
||||
"google_enabled": "Google Enabled",
|
||||
"logged_in": "Logged In",
|
||||
"instance_id": "Instance ID",
|
||||
"subscription_expiration": "Subscription Expiration"
|
||||
}
|
||||
},
|
||||
|
|
|
@ -37,6 +37,7 @@ async def system_health_info(hass: HomeAssistant) -> dict[str, Any]:
|
|||
data["google_enabled"] = client.prefs.google_enabled
|
||||
data["remote_server"] = cloud.remote.snitun_server
|
||||
data["certificate_status"] = cloud.remote.certificate_status
|
||||
data["instance_id"] = client.prefs.instance_id
|
||||
|
||||
data["can_reach_cert_server"] = system_health.async_check_can_reach_url(
|
||||
hass, f"https://{cloud.acme_server}/directory"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
"""Test the cloud.iot module."""
|
||||
from datetime import timedelta
|
||||
from unittest.mock import AsyncMock, MagicMock, Mock, patch
|
||||
from unittest.mock import AsyncMock, MagicMock, Mock, PropertyMock, patch
|
||||
|
||||
import aiohttp
|
||||
from aiohttp import web
|
||||
|
@ -357,7 +357,10 @@ async def test_system_msg(hass: HomeAssistant) -> None:
|
|||
|
||||
async def test_cloud_connection_info(hass: HomeAssistant) -> None:
|
||||
"""Test connection info msg."""
|
||||
with patch("hass_nabucasa.Cloud.initialize"):
|
||||
with patch("hass_nabucasa.Cloud.initialize"), patch(
|
||||
"uuid.UUID.hex", new_callable=PropertyMock
|
||||
) as hexmock:
|
||||
hexmock.return_value = "12345678901234567890"
|
||||
setup = await async_setup_component(hass, "cloud", {"cloud": {}})
|
||||
assert setup
|
||||
cloud = hass.data["cloud"]
|
||||
|
@ -372,4 +375,5 @@ async def test_cloud_connection_info(hass: HomeAssistant) -> None:
|
|||
"alias": None,
|
||||
},
|
||||
"version": HA_VERSION,
|
||||
"instance_id": "12345678901234567890",
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ async def test_cloud_system_health(
|
|||
remote_enabled=True,
|
||||
alexa_enabled=True,
|
||||
google_enabled=False,
|
||||
instance_id="12345678901234567890",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -70,4 +71,5 @@ async def test_cloud_system_health(
|
|||
"can_reach_cert_server": "ok",
|
||||
"can_reach_cloud_auth": {"type": "failed", "error": "unreachable"},
|
||||
"can_reach_cloud": "ok",
|
||||
"instance_id": "12345678901234567890",
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue