1 """Send instance and usage analytics."""
5 import voluptuous
as vol
15 from .analytics
import Analytics
16 from .const
import ATTR_ONBOARDED, ATTR_PREFERENCES, DOMAIN, INTERVAL, PREFERENCE_SCHEMA
18 CONFIG_SCHEMA = cv.empty_config_schema(DOMAIN)
20 DATA_COMPONENT: HassKey[Analytics] =
HassKey(DOMAIN)
23 async
def async_setup(hass: HomeAssistant, _: ConfigType) -> bool:
24 """Set up the analytics integration."""
28 await analytics.load()
31 def start_schedule(_event: Event) ->
None:
32 """Start the send schedule after the started event."""
38 analytics.send_analytics,
39 name=
"analytics schedule",
40 cancel_on_shutdown=
True,
47 analytics.send_analytics,
49 name=
"analytics daily",
50 cancel_on_shutdown=
True,
53 hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, start_schedule)
55 websocket_api.async_register_command(hass, websocket_analytics)
56 websocket_api.async_register_command(hass, websocket_analytics_preferences)
58 hass.data[DATA_COMPONENT] = analytics
63 @websocket_api.require_admin
64 @websocket_api.websocket_command({vol.Required("type"):
"analytics"})
70 """Return analytics preferences."""
71 analytics = hass.data[DATA_COMPONENT]
72 connection.send_result(
74 {ATTR_PREFERENCES: analytics.preferences, ATTR_ONBOARDED: analytics.onboarded},
78 @websocket_api.require_admin
79 @websocket_api.websocket_command(
{
vol.Required("type"):
"analytics/preferences",
80 vol.Required(
"preferences", default={}): PREFERENCE_SCHEMA,
83 @websocket_api.async_response
89 """Update analytics preferences."""
90 preferences = msg[ATTR_PREFERENCES]
91 analytics = hass.data[DATA_COMPONENT]
93 await analytics.save_preferences(preferences)
94 await analytics.send_analytics()
96 connection.send_result(
98 {ATTR_PREFERENCES: analytics.preferences},
100
bool async_setup(HomeAssistant hass, ConfigType _)
None websocket_analytics(HomeAssistant hass, websocket_api.connection.ActiveConnection connection, dict[str, Any] msg)
None websocket_analytics_preferences(HomeAssistant hass, websocket_api.connection.ActiveConnection connection, dict[str, Any] msg)
CALLBACK_TYPE async_call_later(HomeAssistant hass, float|timedelta delay, HassJob[[datetime], Coroutine[Any, Any, None]|None]|Callable[[datetime], Coroutine[Any, Any, None]|None] action)
CALLBACK_TYPE async_track_time_interval(HomeAssistant hass, Callable[[datetime], Coroutine[Any, Any, None]|None] action, timedelta interval, *str|None name=None, bool|None cancel_on_shutdown=None)