1 """The Tesla Wall Connector integration."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from datetime
import timedelta
9 from tesla_wall_connector
import WallConnector
10 from tesla_wall_connector.exceptions
import (
11 WallConnectorConnectionError,
12 WallConnectorConnectionTimeoutError,
24 DEFAULT_SCAN_INTERVAL,
26 WALLCONNECTOR_DATA_LIFETIME,
27 WALLCONNECTOR_DATA_VITALS,
30 PLATFORMS: list[Platform] = [Platform.BINARY_SENSOR, Platform.SENSOR]
32 _LOGGER = logging.getLogger(__name__)
36 """Set up Tesla Wall Connector from a config entry."""
37 hass.data.setdefault(DOMAIN, {})
38 hostname = entry.data[CONF_HOST]
43 version_data = await wall_connector.async_get_version()
44 except WallConnectorError
as ex:
45 raise ConfigEntryNotReady
from ex
47 async
def async_update_data():
48 """Fetch new data from the Wall Connector."""
50 vitals = await wall_connector.async_get_vitals()
51 lifetime = await wall_connector.async_get_lifetime()
52 except WallConnectorConnectionTimeoutError
as ex:
54 f
"Could not fetch data from Tesla WallConnector at {hostname}: Timeout"
56 except WallConnectorConnectionError
as ex:
58 f
"Could not fetch data from Tesla WallConnector at {hostname}: Cannot"
61 except WallConnectorError
as ex:
63 f
"Could not fetch data from Tesla WallConnector at {hostname}: {ex}"
67 WALLCONNECTOR_DATA_VITALS: vitals,
68 WALLCONNECTOR_DATA_LIFETIME: lifetime,
75 name=
"tesla-wallconnector",
77 update_method=async_update_data,
80 await coordinator.async_config_entry_first_refresh()
83 wall_connector_client=wall_connector,
85 part_number=version_data.part_number,
86 firmware_version=version_data.firmware_version,
87 serial_number=version_data.serial_number,
88 update_coordinator=coordinator,
91 await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
93 entry.async_on_unload(entry.add_update_listener(update_listener))
99 """Get the poll interval from config."""
101 seconds=entry.options.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
106 """Handle options update."""
107 wall_connector_data: WallConnectorData = hass.data[DOMAIN][entry.entry_id]
108 wall_connector_data.update_coordinator.update_interval =
get_poll_interval(entry)
112 """Unload a config entry."""
113 if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
114 hass.data[DOMAIN].pop(entry.entry_id)
121 """Data for the Tesla Wall Connector integration."""
123 wall_connector_client: WallConnector
124 update_coordinator: DataUpdateCoordinator
127 firmware_version: str
timedelta get_poll_interval(ConfigEntry entry)
None update_listener(HomeAssistant hass, ConfigEntry entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)