Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The solax component."""
2 
3 from dataclasses import dataclass
4 from datetime import timedelta
5 import logging
6 
7 from solax import InverterResponse, RealTimeAPI, real_time_api
8 from solax.inverter import InverterError
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, CONF_PORT, Platform
12 from homeassistant.core import HomeAssistant
13 from homeassistant.exceptions import ConfigEntryNotReady
14 from homeassistant.helpers.update_coordinator import UpdateFailed
15 
16 from .coordinator import SolaxDataUpdateCoordinator
17 
18 PLATFORMS = [Platform.SENSOR]
19 
20 SCAN_INTERVAL = timedelta(seconds=30)
21 
22 
23 @dataclass(slots=True)
24 class SolaxData:
25  """Class for storing solax data."""
26 
27  api: RealTimeAPI
28  coordinator: SolaxDataUpdateCoordinator
29 
30 
31 type SolaxConfigEntry = ConfigEntry[SolaxData]
32 
33 _LOGGER = logging.getLogger(__name__)
34 
35 
36 async def async_setup_entry(hass: HomeAssistant, entry: SolaxConfigEntry) -> bool:
37  """Set up the sensors from a ConfigEntry."""
38 
39  try:
40  api = await real_time_api(
41  entry.data[CONF_IP_ADDRESS],
42  entry.data[CONF_PORT],
43  entry.data[CONF_PASSWORD],
44  )
45  except Exception as err:
46  raise ConfigEntryNotReady from err
47 
48  async def _async_update() -> InverterResponse:
49  try:
50  return await api.get_data()
51  except InverterError as err:
52  raise UpdateFailed from err
53 
54  coordinator = SolaxDataUpdateCoordinator(
55  hass,
56  logger=_LOGGER,
57  config_entry=entry,
58  name=f"solax {entry.title}",
59  update_interval=SCAN_INTERVAL,
60  update_method=_async_update,
61  )
62  await coordinator.async_config_entry_first_refresh()
63 
64  entry.runtime_data = SolaxData(api=api, coordinator=coordinator)
65  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
66 
67  return True
68 
69 
70 async def async_unload_entry(hass: HomeAssistant, entry: SolaxConfigEntry) -> bool:
71  """Unload a config entry."""
72  return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
bool async_setup_entry(HomeAssistant hass, SolaxConfigEntry entry)
Definition: __init__.py:36
bool async_unload_entry(HomeAssistant hass, SolaxConfigEntry entry)
Definition: __init__.py:70