diff --git a/companion-app/src/screens/Einstellungen.tsx b/companion-app/src/screens/Einstellungen.tsx index 632d431..f71c535 100644 --- a/companion-app/src/screens/Einstellungen.tsx +++ b/companion-app/src/screens/Einstellungen.tsx @@ -797,16 +797,16 @@ export function Einstellungen({ ) : integrationUpdate?.installiert && integrationUpdate.neustart_noetig === false ? ( - /* Kein Knopf. Geändert wurden Dateien unter frontend/, und das sind - die des PANELS - die App lädt ihren eigenen Code aus /local/dmapp - bzw. aus der nativen Hülle. Ein "App neu laden" stand hier bis zum - 05.09.2026 und versprach etwas, das es nicht einlösen konnte - (vom Eigentümer im Bild bemerkt). Kam ein neues OTA-Bündel mit, - erscheint es im Abschnitt "App" darunter als eigenes Update. */ -

- Version {integrationUpdate.version} installiert - nur Oberflächendateien, kein - Neustart nötig. Das Panel lädt sie beim nächsten Öffnen. -

+ /* Gar keine Meldung. Geändert wurden Dateien unter frontend/, und das + sind die des PANELS - die App lädt ihren eigenen Code aus + /local/dmapp bzw. aus der nativen Hülle und hat hier nichts zu tun. + + Damit gilt in der App durchgehend: steht hier nichts, ist alles in + Ordnung; steht ein Neustart-Knopf da, muss ich handeln (Vorgabe des + Eigentümers, 05.09.2026). Ein "App neu laden" stand hier kurzzeitig + und versprach etwas, das es nicht einlösen konnte. Kam ein neues + OTA-Bündel mit, erscheint es im Abschnitt "App" darunter. */ + <> ) : integrationUpdate?.installiert ? ( <>

diff --git a/custom_components/audi_dashboard/dienste.py b/custom_components/audi_dashboard/dienste.py index 9ef482f..82a5d11 100644 --- a/custom_components/audi_dashboard/dienste.py +++ b/custom_components/audi_dashboard/dienste.py @@ -373,6 +373,11 @@ def registrieren(hass: HomeAssistant, k: Koordinator) -> None: # Ohne Neustart bleibt Home Assistants zwischengespeichertes # Manifest stehen - die neue Nummer muss von der Platte kommen. await k.version_neu_lesen() + # Und die Modul-URL des Panels muss sie tragen, sonst kann das + # Panel nach dem Neuladen nicht erkennen, dass es bereits die + # neuen Dateien ausfuehrt - und die Meldung "Seite neu laden" + # bliebe stehen. + await k.panel_neu_anmelden() k.letzte_update_pruefung = { "verfuegbar": False, "version": ergebnis["version"], diff --git a/custom_components/audi_dashboard/frontend/app/bundle.json b/custom_components/audi_dashboard/frontend/app/bundle.json index b7153b1..f6c0e5a 100644 --- a/custom_components/audi_dashboard/frontend/app/bundle.json +++ b/custom_components/audi_dashboard/frontend/app/bundle.json @@ -1 +1 @@ -{"version":"2026.9.5.27","sha256":"5836c846fb2101a5bad105169bcd2bbf1c3fbc12a0b3ab9e82283981629f7d61","bytes":324623,"gebaut":"2026-09-05T13:14:44Z"} \ No newline at end of file +{"version":"2026.9.5.28","sha256":"435ee2ed681fc0a15957f232f865e52c10794624608b5fc53806c97a8da7e566","bytes":324577,"gebaut":"2026-09-05T13:26:14Z"} \ No newline at end of file diff --git a/custom_components/audi_dashboard/frontend/app/bundle.zip b/custom_components/audi_dashboard/frontend/app/bundle.zip index c7918a2..c4be612 100644 Binary files a/custom_components/audi_dashboard/frontend/app/bundle.zip and b/custom_components/audi_dashboard/frontend/app/bundle.zip differ diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js index 2f98398..27b2f21 100644 --- a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js +++ b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js @@ -3750,6 +3750,14 @@ function vEinst() { cache_headers=False - der Browser holt sie beim naechsten Laden ohnehin frisch. Nur geaenderter Python-Code braucht wirklich einen Neustart (Abschnitt CZ in AGENTS.md). */ + /* Laeuft das Panel bereits auf der installierten Fassung, ist nichts + mehr zu tun - die Meldung verschwindet damit genau durch das + Neuladen, zu dem sie auffordert. CSS_VERSION ist die Version aus der + Modul-URL (beim Anmelden gesetzt, nach einem Update ohne Neustart neu + angemeldet), APP_VERSION die von der Platte gelesene. */ + if (u.neustart_noetig === false && String(CSS_VERSION) === String(APP_VERSION)) { + return ""; + } if (u.neustart_noetig === false) { return ` Version ${esc(u.version)} installiert - nur Oberflächendateien, kein Neustart nötig. diff --git a/custom_components/audi_dashboard/koordinator.py b/custom_components/audi_dashboard/koordinator.py index b536d14..05f8d85 100644 --- a/custom_components/audi_dashboard/koordinator.py +++ b/custom_components/audi_dashboard/koordinator.py @@ -83,7 +83,12 @@ from .const import ( E_REIFEN_WINTER, E_TANKVORGAENGE, E_ZUORDNUNG, + PANEL_ICON, + PANEL_KOMPONENTE, + PANEL_TITEL, + PANEL_URL, SIGNAL_AKTUALISIERT, + STATIK_URL, ) from .veroeffentlichung import ( fahrzeugstatus, @@ -695,6 +700,34 @@ class Koordinator: _LOGGER.info("Version nach Update: %s -> %s", self.version, neu) self.version = neu + async def panel_neu_anmelden(self) -> None: + """Meldet den Sidebar-Eintrag mit der aktuellen Versionsnummer neu an. + + Noetig nach einem Update OHNE Neustart: die Modul-URL traegt die Version + als Cache-Brecher (`?v=`), und die stammt vom Anmelden beim Einrichten. + Ohne diesen Schritt bliebe dort die alte Nummer stehen - und das Panel + koennte nicht erkennen, ob es bereits die neuen Dateien ausfuehrt. + Genau darauf beruht die Meldung "Seite neu laden", die nach dem Neuladen + verschwinden soll (Vorgabe des Eigentuemers, 05.09.2026). + + Die statische Route bleibt unberuehrt - sie zeigt auf einen Ordner, + dessen Inhalt sich geaendert hat, nicht auf einzelne Dateien.""" + from homeassistant.components import frontend, panel_custom + + frontend.async_remove_panel(self.hass, PANEL_URL) + await panel_custom.async_register_panel( + self.hass, + frontend_url_path=PANEL_URL, + webcomponent_name=PANEL_KOMPONENTE, + sidebar_title=PANEL_TITEL, + sidebar_icon=PANEL_ICON, + module_url=f"{STATIK_URL}/audi-dashboard-panel.js?v={self.version}", + embed_iframe=False, + require_admin=False, + config={"version": self.version, "statik": STATIK_URL}, + ) + _LOGGER.info("Panel mit Version %s neu angemeldet", self.version) + async def app_version_veroeffentlichen(self) -> None: buendel = await self.hass.async_add_executor_job(self._buendel_lesen) bildstaende = await bilder.staende( diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json index f5a38b5..8bc0cc5 100644 --- a/custom_components/audi_dashboard/manifest.json +++ b/custom_components/audi_dashboard/manifest.json @@ -1,7 +1,7 @@ { "domain": "audi_dashboard", "name": "Audi Dashboard", - "version": "2026.9.5.27", + "version": "2026.9.5.28", "documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md", "issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues", "codeowners": [