| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from __future__ import annotations
- import logging
- from pathlib import Path
- from homeassistant.config_entries import ConfigEntry
- from homeassistant.core import HomeAssistant
- from homeassistant.components.http import StaticPathConfig
- from .const import DOMAIN
- from .coordinator import ZLockCoordinator
- from .services import register_services, unregister_services
- _LOGGER = logging.getLogger(__name__)
- PLATFORMS = ["sensor"]
- _CARD_URL = f"/{DOMAIN}/zlock-slots-card.js"
- _CARD_PATH = Path(__file__).parent / "frontend" / "zlock-slots-card.js"
- async def async_setup(hass: HomeAssistant, config: dict) -> bool:
- hass.data.setdefault(DOMAIN, {})
- return True
- async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
- coordinator = ZLockCoordinator(hass, entry)
- await coordinator.async_setup()
- hass.data.setdefault(DOMAIN, {})[entry.entry_id] = coordinator
- await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
- register_services(hass)
- await _async_register_frontend(hass)
- entry.async_on_unload(entry.add_update_listener(_async_options_updated))
- return True
- async def _async_options_updated(hass: HomeAssistant, entry) -> None:
- await hass.config_entries.async_reload(entry.entry_id)
- async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
- unloaded = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
- if unloaded:
- coordinator: ZLockCoordinator = hass.data[DOMAIN].pop(entry.entry_id)
- coordinator.async_teardown()
- if not hass.data[DOMAIN]:
- unregister_services(hass)
- return unloaded
- async def _async_register_frontend(hass: HomeAssistant) -> None:
- try:
- await hass.http.async_register_static_paths([
- StaticPathConfig(_CARD_URL, str(_CARD_PATH), cache_headers=False)
- ])
- except Exception as err:
- _LOGGER.debug("Static path %s already registered: %s", _CARD_URL, err)
- try:
- lovelace = hass.data["lovelace"]
- resources = lovelace["resources"]
- if not any(r.get("url") == _CARD_URL for r in resources.async_items()):
- await resources.async_create_item({"res_type": "module", "url": _CARD_URL})
- _LOGGER.debug("Registered Lovelace resource: %s", _CARD_URL)
- except Exception as err:
- _LOGGER.error(
- "Failed to register Lovelace card resource %s: %s. "
- "Add it manually: Settings → Dashboards → ⋮ → Resources → Add Resource, "
- "URL: %s, Resource type: JavaScript module.",
- _CARD_URL, err, _CARD_URL,
- )
|