d8b12da36d
Das Backend liegt jetzt als custom_components/audi_dashboard/ vor - eine normale Home-Assistant-Integration mit Config-Flow, einer sensor-Plattform und 18 Diensten. Damit ist die App über HACS installierbar; bis das Repo auf GitHub gespiegelt ist (HACS spricht ausschließlich mit GitHub), installiert homeassistant/installationspaket/install.ps1 denselben Ordner ohne HACS. Fünf Installationsschritte entfallen ersatzlos: der pyscript:-Block, der panel_custom:-Block, das Kopieren der Oberfläche nach www/, das langlebige Zugriffstoken (der Verlauf wird direkt über die recorder-API gelesen) und "pip install pypdf" (steht in manifest.json). Das Fahrzeugprofil legt die Integration beim ersten Start aus ihrer Vorlage an. Drei alte Schwächen sind dabei mit erledigt: - Die Nutzlast landet nicht mehr in der Recorder-Datenbank (_unrecorded_attributes - das kann nur eine echte Entität). - Eine laufende Fahrt überlebt einen Neustart (Store statt Arbeitsspeicher); fiel sie während eines Ausfalls ins Ende, schließt nach_neustart_fortsetzen() sie beim letzten aufgezeichneten Zeitpunkt. - Sensor-Zuordnungen wirken sofort - die Zustandsbeobachter werden neu gebunden, der Neustart-Hinweis und der Neustart-Dienst sind weg. Namensvertrag geändert, beide Oberflächen mitgezogen: pyscript.audi_dashboard_x -> sensor.audi_dashboard_x, pyscript.audi_dashboard_y -> audi_dashboard.y. Eine Companion-App vom alten Stand findet nach dem Umstieg nichts mehr und muss neu gebaut werden; das Panel liegt in der Integration und kann nicht driften. Der selbstgebaute Updater entfällt - HACS ist die Update-Mechanik, die Home Assistant kennt. Die Versionierung schrumpft auf eine Quelle: manifest.json. Geprüft am laufenden Testcontainer (Container byteweise identisch mit dem Repo): alle 18 Dienste, Panel, Config-Entry neu laden, Historienimport, echter Shell-Beleg in-process, Neuinstallation im Wegwerf-Container blank mit automatisch nachinstalliertem pypdf. Companion-App: tsc sauber, 112/112 Tests, beide Rauchtests gegen das laufende Backend grün. Belegparser 8/8. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
38 lines
2.1 KiB
JavaScript
38 lines
2.1 KiB
JavaScript
/* ================================================================
|
|
Audi-Dashboard — Lade-Stub für das Panel
|
|
================================================================
|
|
Home Assistant lädt diese Datei als Modul des Sidebar-Eintrags. Ihre
|
|
einzige Aufgabe ist, den eigentlichen Code nachzuladen.
|
|
|
|
Der Cache-Brecher steht in der eigenen URL: die Integration hängt beim
|
|
Anmelden des Panels die installierte Version als ?v=… an (siehe
|
|
_panel_anmelden in __init__.py). Diese Datei reicht sie unverändert an
|
|
audi-dashboard-app.js weiter. Jede neue Version ist damit aus Sicht des
|
|
Browsers eine neue URL und wird nie aus einem alten Cache bedient - und
|
|
umgekehrt lädt eine unveränderte Installation nichts unnötig neu.
|
|
|
|
Das ersetzt die frühere Lösung, bei der diese Datei erst
|
|
audi-dashboard-version.json mit cache:"no-store" holen musste, um an eine
|
|
Zahl zu kommen. Die brauchte es, weil /local/ von Home Assistant 31 Tage
|
|
lang gecacht wird und die Datei sonst nie wieder aktualisiert worden wäre.
|
|
Als Integration liefert die App ihre Dateien selbst aus - mit
|
|
cache_headers=False und mit der Version schon in der URL. Eine zusätzliche
|
|
Netzwerkanfrage bei jedem Seitenaufruf ist dafür nicht mehr nötig.
|
|
|
|
Bekannte HA-Eigenheit (an der Testinstanz reproduziert, nicht vermutet):
|
|
ha-panel-custom cached geladene Skripte nur für den alten js_url-Typ,
|
|
nicht für module_url. Bei einem direkten/harten Seitenaufruf kann das
|
|
dazu führen, dass dieses Skript zweimal als <script type=module> eingefügt
|
|
wird, bevor das erste fertig geladen hat - beobachtet als zwei
|
|
Netzwerk-Requests und ein hängenbleibendes "Lädt …" ohne Fehler. Der
|
|
Cache unten macht das Starten robust dagegen: der zweite Aufruf wartet auf
|
|
das Ergebnis des ersten, statt selbst nochmal zu importieren. */
|
|
window.__audiDashboardStarten =
|
|
window.__audiDashboardStarten ||
|
|
(async () => {
|
|
const eigene = new URL(import.meta.url);
|
|
const version = eigene.searchParams.get("v") || Date.now();
|
|
await import(new URL(`audi-dashboard-app.js?v=${version}`, eigene).href);
|
|
})();
|
|
await window.__audiDashboardStarten;
|