Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The history_stats component."""
2 
3 from __future__ import annotations
4 
5 from datetime import timedelta
6 
7 from homeassistant.config_entries import ConfigEntry
8 from homeassistant.const import CONF_ENTITY_ID, CONF_STATE
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.device import (
11  async_remove_stale_devices_links_keep_entity_device,
12 )
13 from homeassistant.helpers.template import Template
14 
15 from .const import CONF_DURATION, CONF_END, CONF_START, PLATFORMS
16 from .coordinator import HistoryStatsUpdateCoordinator
17 from .data import HistoryStats
18 
19 type HistoryStatsConfigEntry = ConfigEntry[HistoryStatsUpdateCoordinator]
20 
21 
23  hass: HomeAssistant, entry: HistoryStatsConfigEntry
24 ) -> bool:
25  """Set up History stats from a config entry."""
26 
27  entity_id: str = entry.options[CONF_ENTITY_ID]
28  entity_states: list[str] = entry.options[CONF_STATE]
29  start: str | None = entry.options.get(CONF_START)
30  end: str | None = entry.options.get(CONF_END)
31 
32  duration: timedelta | None = None
33  if duration_dict := entry.options.get(CONF_DURATION):
34  duration = timedelta(**duration_dict)
35 
36  history_stats = HistoryStats(
37  hass,
38  entity_id,
39  entity_states,
40  Template(start, hass) if start else None,
41  Template(end, hass) if end else None,
42  duration,
43  )
44  coordinator = HistoryStatsUpdateCoordinator(hass, history_stats, entry, entry.title)
45  await coordinator.async_config_entry_first_refresh()
46  entry.runtime_data = coordinator
47 
49  hass,
50  entry.entry_id,
51  entry.options[CONF_ENTITY_ID],
52  )
53 
54  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
55  entry.async_on_unload(entry.add_update_listener(update_listener))
56 
57  return True
58 
59 
61  hass: HomeAssistant, entry: HistoryStatsConfigEntry
62 ) -> bool:
63  """Unload History stats config entry."""
64  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
65 
66 
67 async def update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None:
68  """Handle options update."""
69  await hass.config_entries.async_reload(entry.entry_id)
None update_listener(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:67
bool async_unload_entry(HomeAssistant hass, HistoryStatsConfigEntry entry)
Definition: __init__.py:62
bool async_setup_entry(HomeAssistant hass, HistoryStatsConfigEntry entry)
Definition: __init__.py:24
None async_remove_stale_devices_links_keep_entity_device(HomeAssistant hass, str entry_id, str source_entity_id_or_uuid)
Definition: device.py:66