1 """DataUpdateCoordinator for the Homeassistant Analytics integration."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from datetime
import timedelta
7 from typing
import TYPE_CHECKING
9 from python_homeassistant_analytics
import (
11 HomeassistantAnalyticsClient,
12 HomeassistantAnalyticsConnectionError,
13 HomeassistantAnalyticsNotModifiedError,
15 from python_homeassistant_analytics.models
import Addon
22 CONF_TRACKED_CUSTOM_INTEGRATIONS,
23 CONF_TRACKED_INTEGRATIONS,
29 from .
import AnalyticsInsightsConfigEntry
32 @dataclass(frozen=True)
34 """Analytics data class."""
36 active_installations: int
37 reports_integrations: int
38 addons: dict[str, int]
39 core_integrations: dict[str, int]
40 custom_integrations: dict[str, int]
44 """A Homeassistant Analytics Data Update Coordinator."""
46 config_entry: AnalyticsInsightsConfigEntry
49 self, hass: HomeAssistant, client: HomeassistantAnalyticsClient
51 """Initialize the Homeassistant Analytics data coordinator."""
61 CONF_TRACKED_INTEGRATIONS
64 CONF_TRACKED_CUSTOM_INTEGRATIONS
69 addons_data = await self.
_client_client.get_addons()
70 data = await self.
_client_client.get_current_analytics()
71 custom_data = await self.
_client_client.get_custom_integrations()
72 except HomeassistantAnalyticsConnectionError
as err:
74 "Error communicating with Homeassistant Analytics"
76 except HomeassistantAnalyticsNotModifiedError:
82 integration: data.integrations.get(integration, 0)
85 custom_integrations = {
90 data.active_installations,
91 data.reports_integrations,
99 """Get addon value."""
100 if name_slug
in data:
101 return data[name_slug].total
106 data: dict[str, CustomIntegration], domain: str
108 """Get custom integration value."""
110 return data[domain].total
AnalyticsData _async_update_data(self)
None __init__(self, HomeAssistant hass, HomeassistantAnalyticsClient client)
_tracked_custom_integrations
int get_addon_value(dict[str, Addon] data, str name_slug)
int get_custom_integration_value(dict[str, CustomIntegration] data, str domain)