mirror of
https://github.com/home-assistant/core.git
synced 2026-07-06 22:36:33 +01:00
d766aae436
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: frenck <195327+frenck@users.noreply.github.com>
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
"""The Hegel integration."""
|
|
|
|
import logging
|
|
|
|
from hegel_ip_client import HegelClient
|
|
from hegel_ip_client.exceptions import HegelConnectionError
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_HOST, EVENT_HOMEASSISTANT_STOP, Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import ConfigEntryNotReady
|
|
|
|
from .const import DEFAULT_PORT
|
|
|
|
PLATFORMS: list[Platform] = [Platform.MEDIA_PLAYER]
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
type HegelConfigEntry = ConfigEntry[HegelClient]
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: HegelConfigEntry) -> bool:
|
|
"""Set up the Hegel integration."""
|
|
host = entry.data[CONF_HOST]
|
|
|
|
# Create and test client connection
|
|
client = HegelClient(host, DEFAULT_PORT)
|
|
|
|
try:
|
|
# Test connection before proceeding with setup
|
|
await client.start()
|
|
await client.ensure_connected(timeout=10.0)
|
|
_LOGGER.debug("Successfully connected to Hegel at %s:%s", host, DEFAULT_PORT)
|
|
except (HegelConnectionError, TimeoutError, OSError) as err:
|
|
_LOGGER.error(
|
|
"Failed to connect to Hegel at %s:%s: %s", host, DEFAULT_PORT, err
|
|
)
|
|
await client.stop() # Clean up
|
|
raise ConfigEntryNotReady(
|
|
f"Unable to connect to Hegel amplifier at {host}:{DEFAULT_PORT}"
|
|
) from err
|
|
|
|
# Store client in runtime_data
|
|
entry.runtime_data = client
|
|
|
|
async def _async_close_client(event):
|
|
await client.stop()
|
|
|
|
entry.async_on_unload(
|
|
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _async_close_client)
|
|
)
|
|
|
|
# Forward setup to supported platforms
|
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: HegelConfigEntry) -> bool:
|
|
"""Unload a Hegel config entry and stop active client connection."""
|
|
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
|
|
|
if unload_ok:
|
|
client = entry.runtime_data
|
|
_LOGGER.debug("Stopping Hegel client for %s", entry.title)
|
|
try:
|
|
await client.stop()
|
|
except (HegelConnectionError, OSError) as err:
|
|
_LOGGER.warning("Error while stopping Hegel client: %s", err)
|
|
|
|
return unload_ok
|