Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support for esphome devices."""
2 
3 from __future__ import annotations
4 
5 from aioesphomeapi import APIClient
6 
7 from homeassistant.components import ffmpeg, zeroconf
8 from homeassistant.const import (
9  CONF_HOST,
10  CONF_PASSWORD,
11  CONF_PORT,
12  __version__ as ha_version,
13 )
14 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.typing import ConfigType
17 
18 from .const import CONF_NOISE_PSK, DATA_FFMPEG_PROXY, DOMAIN
19 from .dashboard import async_setup as async_setup_dashboard
20 from .domain_data import DomainData
21 
22 # Import config flow so that it's added to the registry
23 from .entry_data import ESPHomeConfigEntry, RuntimeEntryData
24 from .ffmpeg_proxy import FFmpegProxyData, FFmpegProxyView
25 from .manager import ESPHomeManager, cleanup_instance
26 
27 CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
28 
29 CLIENT_INFO = f"Home Assistant {ha_version}"
30 
31 
32 async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
33  """Set up the esphome component."""
34  proxy_data = hass.data[DATA_FFMPEG_PROXY] = FFmpegProxyData()
35 
36  await async_setup_dashboard(hass)
37  hass.http.register_view(
38  FFmpegProxyView(ffmpeg.get_ffmpeg_manager(hass), proxy_data)
39  )
40  return True
41 
42 
43 async def async_setup_entry(hass: HomeAssistant, entry: ESPHomeConfigEntry) -> bool:
44  """Set up the esphome component."""
45  host: str = entry.data[CONF_HOST]
46  port: int = entry.data[CONF_PORT]
47  password: str | None = entry.data[CONF_PASSWORD]
48  noise_psk: str | None = entry.data.get(CONF_NOISE_PSK)
49 
50  zeroconf_instance = await zeroconf.async_get_instance(hass)
51 
52  cli = APIClient(
53  host,
54  port,
55  password,
56  client_info=CLIENT_INFO,
57  zeroconf_instance=zeroconf_instance,
58  noise_psk=noise_psk,
59  )
60 
61  domain_data = DomainData.get(hass)
62  entry_data = RuntimeEntryData(
63  client=cli,
64  entry_id=entry.entry_id,
65  title=entry.title,
66  store=domain_data.get_or_create_store(hass, entry),
67  original_options=dict(entry.options),
68  )
69  entry.runtime_data = entry_data
70 
71  manager = ESPHomeManager(
72  hass, entry, host, password, cli, zeroconf_instance, domain_data
73  )
74  await manager.async_start()
75 
76  return True
77 
78 
79 async def async_unload_entry(hass: HomeAssistant, entry: ESPHomeConfigEntry) -> bool:
80  """Unload an esphome config entry."""
81  entry_data = await cleanup_instance(hass, entry)
82  return await hass.config_entries.async_unload_platforms(
83  entry, entry_data.loaded_platforms
84  )
85 
86 
87 async def async_remove_entry(hass: HomeAssistant, entry: ESPHomeConfigEntry) -> None:
88  """Remove an esphome config entry."""
89  await DomainData.get(hass).get_or_create_store(hass, entry).async_remove()
RuntimeEntryData cleanup_instance(HomeAssistant hass, ESPHomeConfigEntry entry)
Definition: manager.py:766
bool async_unload_entry(HomeAssistant hass, ESPHomeConfigEntry entry)
Definition: __init__.py:79
bool async_setup_entry(HomeAssistant hass, ESPHomeConfigEntry entry)
Definition: __init__.py:43
bool async_setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:32
None async_remove_entry(HomeAssistant hass, ESPHomeConfigEntry entry)
Definition: __init__.py:87
None async_remove(HomeAssistant hass, str intent_type)
Definition: intent.py:90