Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The Goodwe inverter component."""
2 
3 from goodwe import InverterError, connect
4 
5 from homeassistant.config_entries import ConfigEntry
6 from homeassistant.const import CONF_HOST
7 from homeassistant.core import HomeAssistant
8 from homeassistant.exceptions import ConfigEntryNotReady
9 from homeassistant.helpers.device_registry import DeviceInfo
10 
11 from .const import (
12  CONF_MODEL_FAMILY,
13  DOMAIN,
14  KEY_COORDINATOR,
15  KEY_DEVICE_INFO,
16  KEY_INVERTER,
17  PLATFORMS,
18 )
19 from .coordinator import GoodweUpdateCoordinator
20 
21 
22 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
23  """Set up the Goodwe components from a config entry."""
24  hass.data.setdefault(DOMAIN, {})
25  host = entry.data[CONF_HOST]
26  model_family = entry.data[CONF_MODEL_FAMILY]
27 
28  # Connect to Goodwe inverter
29  try:
30  inverter = await connect(
31  host=host,
32  family=model_family,
33  retries=10,
34  )
35  except InverterError as err:
36  raise ConfigEntryNotReady from err
37 
38  device_info = DeviceInfo(
39  configuration_url="https://www.semsportal.com",
40  identifiers={(DOMAIN, inverter.serial_number)},
41  name=entry.title,
42  manufacturer="GoodWe",
43  model=inverter.model_name,
44  sw_version=f"{inverter.firmware} / {inverter.arm_firmware}",
45  )
46 
47  # Create update coordinator
48  coordinator = GoodweUpdateCoordinator(hass, entry, inverter)
49 
50  # Fetch initial data so we have data when entities subscribe
51  await coordinator.async_config_entry_first_refresh()
52 
53  hass.data[DOMAIN][entry.entry_id] = {
54  KEY_INVERTER: inverter,
55  KEY_COORDINATOR: coordinator,
56  KEY_DEVICE_INFO: device_info,
57  }
58 
59  entry.async_on_unload(entry.add_update_listener(update_listener))
60 
61  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
62 
63  return True
64 
65 
66 async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
67  """Unload a config entry."""
68  unload_ok = await hass.config_entries.async_unload_platforms(
69  config_entry, PLATFORMS
70  )
71 
72  if unload_ok:
73  hass.data[DOMAIN].pop(config_entry.entry_id)
74 
75  return unload_ok
76 
77 
78 async def update_listener(hass: HomeAssistant, config_entry: ConfigEntry) -> None:
79  """Handle options update."""
80  await hass.config_entries.async_reload(config_entry.entry_id)
None update_listener(HomeAssistant hass, ConfigEntry config_entry)
Definition: __init__.py:78
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:22
bool async_unload_entry(HomeAssistant hass, ConfigEntry config_entry)
Definition: __init__.py:66