52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""The Main Gate Controller integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import Platform
|
|
from homeassistant.core import HomeAssistant, callback
|
|
from homeassistant.helpers.device_registry import DeviceInfo
|
|
|
|
from .const import CONF_NAME, DEFAULT_NAME, DOMAIN, MANUFACTURER, MODEL
|
|
from .coordinator import MainGateController
|
|
|
|
PLATFORMS: list[Platform] = [Platform.BUTTON, Platform.SENSOR]
|
|
|
|
type MainGateConfigEntry = ConfigEntry[MainGateController]
|
|
|
|
|
|
@callback
|
|
def build_device_info(entry: ConfigEntry) -> DeviceInfo:
|
|
"""Return the ``DeviceInfo`` shared by all entities of one gate."""
|
|
return DeviceInfo(
|
|
identifiers={(DOMAIN, entry.entry_id)},
|
|
name=entry.data.get(CONF_NAME, DEFAULT_NAME),
|
|
manufacturer=MANUFACTURER,
|
|
model=MODEL,
|
|
)
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: MainGateConfigEntry) -> bool:
|
|
"""Set up a gate from a config entry."""
|
|
controller = MainGateController(hass, entry)
|
|
entry.runtime_data = controller
|
|
|
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
|
|
|
async def _async_on_options_updated(
|
|
hass: HomeAssistant, updated_entry: ConfigEntry
|
|
) -> None:
|
|
# Trigger entity refresh so attribute changes (e.g. duration) show up.
|
|
controller.async_publish_update()
|
|
|
|
entry.async_on_unload(entry.add_update_listener(_async_on_options_updated))
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: MainGateConfigEntry) -> bool:
|
|
"""Unload a config entry, cancelling any in-progress gate cycle."""
|
|
controller: MainGateController = entry.runtime_data
|
|
await controller.async_shutdown()
|
|
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|