From dbcac9df86564d6ebf1fbc448abdd0eadfca7252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Bachmann?= Date: Thu, 15 Jan 2026 13:52:57 +0000 Subject: [PATCH] custom_components/bahmcloud_store/__init__.py aktualisiert --- custom_components/bahmcloud_store/__init__.py | 81 ++++++++++++------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/custom_components/bahmcloud_store/__init__.py b/custom_components/bahmcloud_store/__init__.py index 64d26cd..0237f19 100644 --- a/custom_components/bahmcloud_store/__init__.py +++ b/custom_components/bahmcloud_store/__init__.py @@ -3,45 +3,66 @@ from __future__ import annotations import logging from homeassistant.core import HomeAssistant +from homeassistant.components import frontend -from .core import BCSCore -from .views import ( - StaticAssetsView, - BCSApiView, - BCSCustomRepoView, - BCSReadmeView, -) +from .core import DOMAIN, BahmcloudStore, StoreConfig _LOGGER = logging.getLogger(__name__) -DOMAIN = "bahmcloud_store" - async def async_setup(hass: HomeAssistant, config: dict) -> bool: - # Your BCSCore requires config in __init__ - core = BCSCore(hass, config) + # Read configuration from configuration.yaml: + # bahmcloud_store: + # store_url: "https://....../store.yaml" + domain_cfg = config.get(DOMAIN) or {} - # Call optional setup methods if they exist (keep compatibility with your working core) - try: - if hasattr(core, "setup"): - res = core.setup() - if hasattr(res, "__await__"): - await res - elif hasattr(core, "start"): - res = core.start() - if hasattr(res, "__await__"): - await res - except Exception as e: - _LOGGER.exception("BCSCore setup/start failed: %s", e) + store_url = None + if isinstance(domain_cfg, dict): + store_url = domain_cfg.get("store_url") or domain_cfg.get("store") or domain_cfg.get("url") + + if not store_url or not isinstance(store_url, str): + _LOGGER.error( + "Missing configuration for %s. Please set %s: {store_url: 'https://.../store.yaml'}", + DOMAIN, + DOMAIN, + ) return False - hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN]["core"] = core + store = BahmcloudStore(hass, StoreConfig(store_url=store_url)) - # Register HTTP views - hass.http.register_view(StaticAssetsView()) - hass.http.register_view(BCSApiView(core)) - hass.http.register_view(BCSCustomRepoView(core)) - hass.http.register_view(BCSReadmeView(core)) + # Register API + static panel assets (these are defined in core.py) + await store.register_http_views() + + # Store reference + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN]["store"] = store + + # Register sidebar panel (compat layer for different HA versions) + panel_js = "/api/bahmcloud_store_static/panel.js" + try: + # Some HA versions use module_url + frontend.async_register_panel( + hass, + "custom", + DOMAIN, + sidebar_title="Bahmcloud Store", + sidebar_icon="mdi:store", + module_url=panel_js, + config={}, + ) + except TypeError: + # Fallback: some HA versions use js_url instead + try: + frontend.async_register_panel( + hass, + "custom", + DOMAIN, + sidebar_title="Bahmcloud Store", + sidebar_icon="mdi:store", + js_url=panel_js, + config={}, + ) + except Exception as e: + _LOGGER.warning("Panel registration failed (store will still work via API): %s", e) return True