Files
Home-Assistant/custom_components/cafe/panel.py
T
2026-06-11 11:50:50 -04:00

67 lines
2.1 KiB
Python

"""Panel for C.A.F.E."""
import os
import logging
from pathlib import Path
from homeassistant.core import HomeAssistant
from homeassistant.components import frontend, panel_custom
from homeassistant.components.http import StaticPathConfig
from .const import DOMAIN, PANEL_TITLE, PANEL_ICON
_LOGGER = logging.getLogger(__name__)
PANEL_URL = f"/api/{DOMAIN}_panel"
PANEL_NAME = f"{DOMAIN}-panel"
async def async_register_panel(hass: HomeAssistant) -> None:
"""Register the C.A.F.E. panel."""
# Get the path to the www folder within the component
www_path = Path(__file__).parent / "www"
# Register static path for the frontend assets
await hass.http.async_register_static_paths([
StaticPathConfig("/cafe-hass", str(www_path), False)
])
# The panel wrapper has a fixed name (not hashed)
wrapper_path = www_path / "assets" / "panel-wrapper.js"
if not wrapper_path.exists():
_LOGGER.error("panel-wrapper.js not found in assets directory")
_LOGGER.error(f"www path: {www_path}, assets exist: {(www_path / 'assets').exists()}")
return
# Add cache-busting parameter to force fresh load
import time
cache_bust = int(time.time())
module_url = f"/cafe-hass/assets/panel-wrapper.js?v={cache_bust}"
# First try to unregister any existing panel
try:
hass.data.get("frontend_panels", {}).pop(DOMAIN, None)
_LOGGER.info("Removed any existing panel registration")
except:
pass
# Register the panel as a custom panel with module_url
await panel_custom.async_register_panel(
hass,
webcomponent_name=PANEL_NAME,
frontend_url_path=DOMAIN,
module_url=module_url,
sidebar_title=PANEL_TITLE,
sidebar_icon=PANEL_ICON,
require_admin=True,
config={},
config_panel_domain=DOMAIN,
)
_LOGGER.info("C.A.F.E. panel registered successfully with iframe wrapper")
def async_unregister_panel(hass: HomeAssistant) -> None:
"""Unregister the C.A.F.E. panel."""
frontend.async_remove_panel(hass, DOMAIN)
_LOGGER.info("C.A.F.E. panel unregistered")