From fabeab81aa1531aeb474727f219f4937570851dd Mon Sep 17 00:00:00 2001 From: Matysh Date: Sat, 11 Jul 2026 14:46:28 +0300 Subject: [PATCH] =?UTF-8?q?docs+log=20v1.16.2=20(issue=20#2):=20document?= =?UTF-8?q?=20correct=20card=20resource=20URL=20/houseplan=5Ffiles/housepl?= =?UTF-8?q?an-card.js=20and=20warn=20against=20the=20/custom=5Fcomponents/?= =?UTF-8?q?...=20on-disk=20path=20(text/plain=20=E2=86=92=20'Custom=20elem?= =?UTF-8?q?ent=20doesn't=20exist');=20integration=20logs=20the=20served=20?= =?UTF-8?q?URL=20+=20YAML-mode=20manual-add=20hint.=20README=20en+ru=20tro?= =?UTF-8?q?ubleshooting=20note.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++++++++++++ README.ru.md | 15 +++++++++++++++ custom_components/houseplan/__init__.py | 15 ++++++++++++++- .../__pycache__/__init__.cpython-310.pyc | Bin 4928 -> 5916 bytes custom_components/houseplan/const.py | 2 +- .../houseplan/frontend/houseplan-card.js | 2 +- custom_components/houseplan/manifest.json | 2 +- dist/houseplan-card.js | 2 +- docs/CHANGELOG.md | 11 +++++++++++ docs/STATUS.md | 2 +- package.json | 2 +- src/houseplan-card.ts | 2 +- 12 files changed, 62 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d0747f5..26be08f 100755 --- a/README.md +++ b/README.md @@ -60,6 +60,21 @@ Key advantages in short: The card is registered automatically — no need to add a Lovelace resource manually. +> **Card doesn't load (`Custom element doesn't exist: houseplan-card`) or you manage Lovelace +> resources in YAML?** Add the resource manually pointing at the URL the integration *serves*: +> +> ```yaml +> resources: +> - url: /houseplan_files/houseplan-card.js +> type: module +> ``` +> +> Do **not** use `/custom_components/houseplan/frontend/houseplan-card.js` — that is the file +> on disk, which Home Assistant does not serve over HTTP (you'll get a `text/plain` MIME error +> and the element never registers). The correct, integration-served URL is +> `/houseplan_files/houseplan-card.js`. Both cards (`houseplan-card` and +> `houseplan-space-card`) ship in that one file — no separate resource is needed. + ### Manually 1. Copy the `custom_components/houseplan` folder into the `config/custom_components` directory of your Home Assistant. diff --git a/README.ru.md b/README.ru.md index dcfa732..5ae7ba7 100644 --- a/README.ru.md +++ b/README.ru.md @@ -60,6 +60,21 @@ House Plan показывает ваш умный дом так, как он в Карточка подключается автоматически — добавлять ресурс Lovelace вручную не нужно. +> **Карточка не грузится (`Custom element doesn't exist: houseplan-card`) или вы ведёте ресурсы +> Lovelace в YAML?** Добавьте ресурс вручную, указав URL, который *раздаёт сама интеграция*: +> +> ```yaml +> resources: +> - url: /houseplan_files/houseplan-card.js +> type: module +> ``` +> +> **Не** используйте `/custom_components/houseplan/frontend/houseplan-card.js` — это путь к файлу +> на диске, который Home Assistant не отдаёт по HTTP (получите ошибку MIME `text/plain`, и элемент +> не зарегистрируется). Правильный URL, который раздаёт интеграция, — `/houseplan_files/houseplan-card.js`. +> Обе карточки (`houseplan-card` и `houseplan-space-card`) лежат в этом одном файле — отдельный ресурс +> не нужен. + ### Вручную 1. Скопируйте папку `custom_components/houseplan` в каталог `config/custom_components` вашего Home Assistant. diff --git a/custom_components/houseplan/__init__.py b/custom_components/houseplan/__init__.py index 8fd120f..3a09e7c 100755 --- a/custom_components/houseplan/__init__.py +++ b/custom_components/houseplan/__init__.py @@ -79,8 +79,21 @@ async def async_setup_entry(hass: HomeAssistant, entry: HouseplanConfigEntry) -> # start of the mobile app). If the resource registry is unavailable (YAML-mode # Lovelace, old versions) — fall back to extra_module_url. module_url = f"{FRONTEND_URL}?v={VERSION}" - if not await _register_lovelace_resource(hass, module_url): + registered = await _register_lovelace_resource(hass, module_url) + if not registered: add_extra_js_url(hass, module_url) + # Tell the user exactly where the card lives — the #1 support issue is people adding a + # Lovelace resource pointing at the on-disk path (/custom_components/...), which HA does + # not serve (wrong MIME → "Custom element doesn't exist"). The correct served URL is below. + if registered: + _LOGGER.info("House Plan card auto-registered as a Lovelace resource: %s", module_url) + else: + _LOGGER.info( + "House Plan card is served at %s . Lovelace resources look YAML-managed — add it " + "manually under `resources:` as { url: %s, type: module }. Do NOT use the on-disk " + "path /custom_components/houseplan/frontend/houseplan-card.js (HA does not serve it).", + module_url, module_url, + ) await async_check_plan_files(hass, entry) return True diff --git a/custom_components/houseplan/__pycache__/__init__.cpython-310.pyc b/custom_components/houseplan/__pycache__/__init__.cpython-310.pyc index 19070f30db6fe2e5e12ea2fe0066fc12e8073adf..c1a8b86ad52ea1562104601c9a4f51839977a62c 100644 GIT binary patch literal 5916 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 literal 4928 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 - `}}pe.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},pe.styles=Wt,customElements.get("houseplan-card")||customElements.define("houseplan-card",pe),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.16.1 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}pe.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},pe.styles=Wt,customElements.get("houseplan-card")||customElements.define("houseplan-card",pe),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.16.2 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/custom_components/houseplan/manifest.json b/custom_components/houseplan/manifest.json index 8952484..7c8bd09 100755 --- a/custom_components/houseplan/manifest.json +++ b/custom_components/houseplan/manifest.json @@ -16,5 +16,5 @@ "issue_tracker": "https://github.com/Matysh/houseplan-card/issues", "requirements": [], "single_config_entry": true, - "version": "1.16.1" + "version": "1.16.2" } diff --git a/dist/houseplan-card.js b/dist/houseplan-card.js index 53f09be..cb6b95c 100755 --- a/dist/houseplan-card.js +++ b/dist/houseplan-card.js @@ -1388,4 +1388,4 @@ const t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow - `}}pe.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},pe.styles=Wt,customElements.get("houseplan-card")||customElements.define("houseplan-card",pe),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.16.1 ","background:#3ea6ff;color:#04121f;font-weight:700",""); + `}}pe.properties={hass:{attribute:!1},_config:{state:!0},_space:{state:!0},_layout:{state:!0},_devices:{state:!0},_tip:{state:!0},_selId:{state:!0},_toast:{state:!0},_serverCfg:{state:!0},_markup:{state:!0},_tool:{state:!0},_path:{state:!0},_cursorPt:{state:!0},_areaSel:{state:!0},_nameSel:{state:!0},_roomDialog:{state:!0},_spaceDialog:{state:!0},_infoCard:{state:!0},_rulesDialog:{state:!0},_importDialog:{state:!0},_markerDialog:{state:!0},_zoom:{state:!0},_view:{state:!0}},pe.styles=Wt,customElements.get("houseplan-card")||customElements.define("houseplan-card",pe),window.customCards=window.customCards||[],window.customCards.find(t=>"houseplan-card"===t.type)||window.customCards.push({type:"houseplan-card",name:"House Plan Card",description:"Interactive house plan: spaces, rooms and devices with live states and drag layout."}),console.info("%c HOUSEPLAN-CARD %c v1.16.2 ","background:#3ea6ff;color:#04121f;font-weight:700",""); diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 0457eb5..9d88ece 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## v1.16.2 — 2026-07-11 (docs+log: correct card resource URL — fixes "Custom element doesn't exist") +- **Support issue #2**: users adding a Lovelace resource that points at the on-disk path + `/custom_components/houseplan/frontend/houseplan-card.js` get a `text/plain` MIME error and + "Custom element doesn't exist: houseplan-card" — HA does not serve `custom_components/` over + HTTP. The integration serves the card at **`/houseplan_files/houseplan-card.js`** (verified: + `200 text/javascript`) and auto-registers it as a Lovelace resource in storage mode. +- README (en+ru) now documents the correct URL and the common mistake, incl. a YAML-mode + `resources:` snippet. +- On setup the integration logs (INFO) the exact served URL and, when Lovelace resources are + YAML-managed, how to add it manually — so the fix is discoverable from the logs. + ## v1.16.1 — 2026-07-08 (space-card shows room fills as configured) - **The static `houseplan-space-card` now renders room fills exactly as configured on the full card** (temperature / signal / lights coloring), as a snapshot of the states passed diff --git a/docs/STATUS.md b/docs/STATUS.md index 0cf405d..20ea76e 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -13,7 +13,7 @@ | Item | State | |---|---| -| Version | **v1.16.1** everywhere (manifest, const.py, package.json, CARD_VERSION) | +| Version | **v1.16.2** everywhere (manifest, const.py, package.json, CARD_VERSION) | | GitHub | https://github.com/Matysh/houseplan-card — branch `main`, releases v1.9.3…v1.11.2 | | CI | `.github/workflows/validate.yml` (hacs + hassfest + frontend + backend) — **fully green** since v1.11.1; `release.yml` auto-attaches the card bundle (needs `permissions: contents: write`, fixed) | | HACS | Works as custom repository (id 1290210112 on the home instance). **Inclusion PR: https://github.com/hacs/default/pull/9004** (queue ≈2 months as of 2026-07). Lesson: #8995 was auto-closed by hacs-bot — the PR body MUST be their exact template with every checkbox ticked and all 3 links (release, HACS action run, hassfest run); a custom body gets closed without discussion | diff --git a/package.json b/package.json index 035c2b7..67743bd 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "houseplan-card", - "version": "1.16.1", + "version": "1.16.2", "description": "Interactive house plan Lovelace card for Home Assistant", "license": "MIT", "type": "module", diff --git a/src/houseplan-card.ts b/src/houseplan-card.ts index 37b9610..8e1b6ec 100755 --- a/src/houseplan-card.ts +++ b/src/houseplan-card.ts @@ -26,7 +26,7 @@ import './space-card'; import { cardStyles } from './styles'; import { langOf, t, type I18nKey } from './i18n'; -const CARD_VERSION = '1.16.1'; +const CARD_VERSION = '1.16.2'; const LS_KEY = 'houseplan_card_layout_v1'; const LS_CFG = 'houseplan_card_cfg_v1'; // cache of the server config+layout for instant rendering const LS_ZOOM = 'houseplan_card_zoom_v1';