"""The OpenEVSE integration.""" from openevsehttp.__main__ import OpenEVSE from openevsehttp.exceptions import AuthenticationError from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN from .coordinator import OpenEVSEConfigEntry, OpenEVSEDataUpdateCoordinator PLATFORMS = [ Platform.BINARY_SENSOR, Platform.BUTTON, Platform.NUMBER, Platform.SENSOR, ] async def async_setup_entry(hass: HomeAssistant, entry: OpenEVSEConfigEntry) -> bool: """Set up OpenEVSE from a config entry.""" charger = OpenEVSE( entry.data[CONF_HOST], entry.data.get(CONF_USERNAME), entry.data.get(CONF_PASSWORD), session=async_get_clientsession(hass), ) try: await charger.test_and_get() except TimeoutError as ex: raise ConfigEntryNotReady( translation_domain=DOMAIN, translation_key="communication_error", ) from ex except AuthenticationError as ex: raise ConfigEntryAuthFailed( translation_domain=DOMAIN, translation_key="authentication_error", ) from ex coordinator = OpenEVSEDataUpdateCoordinator(hass, entry, charger) await coordinator.async_config_entry_first_refresh() # Start websocket listener for push updates await coordinator.async_start_websocket() entry.runtime_data = coordinator # Register websocket cleanup on unload entry.async_on_unload(coordinator.async_stop_websocket) await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True async def async_unload_entry(hass: HomeAssistant, entry: OpenEVSEConfigEntry) -> bool: """Unload a config entry.""" return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)