Meldung verschwindet durch das Neuladen, zu dem sie auffordert

Vorgabe des Eigentuemers: klarer Zustand statt einer Meldung, die auch nach
dem Neuladen stehenbleibt.

Panel: nach einem Update ohne Neustart wird der Sidebar-Eintrag mit der neuen
Versionsnummer neu angemeldet (koordinator.panel_neu_anmelden) - ohne das
traegt die Modul-URL weiter die alte Nummer. Das Panel vergleicht jetzt die
Version aus seiner Modul-URL mit der von der Platte gelesenen: sind sie
gleich, laeuft es bereits auf der installierten Fassung und die Meldung
entfaellt. Sie verschwindet damit genau durch das Neuladen, zu dem sie
auffordert.

App: fuer ein Update ohne Neustart erscheint gar nichts mehr. Geaendert wurden
Dateien des Panels; die App hat hier nichts zu tun. Damit gilt durchgehend:
keine Meldung = alles in Ordnung, Neustart-Knopf = handeln.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 15:26:19 +02:00
parent 0e6e7fa9ba
commit 462970251e
7 changed files with 58 additions and 12 deletions
+10 -10
View File
@@ -797,16 +797,16 @@ export function Einstellungen({
</span>
</div>
) : 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. */
<p className="dm-erklaerung">
Version {integrationUpdate.version} installiert - nur Oberflächendateien, kein
Neustart nötig. Das Panel lädt sie beim nächsten Öffnen.
</p>
/* 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 ? (
<>
<p className="dm-erklaerung">
@@ -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"],
@@ -1 +1 @@
{"version":"2026.9.5.27","sha256":"5836c846fb2101a5bad105169bcd2bbf1c3fbc12a0b3ab9e82283981629f7d61","bytes":324623,"gebaut":"2026-09-05T13:14:44Z"}
{"version":"2026.9.5.28","sha256":"435ee2ed681fc0a15957f232f865e52c10794624608b5fc53806c97a8da7e566","bytes":324577,"gebaut":"2026-09-05T13:26:14Z"}
@@ -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 `<span style="display:block;margin-top:8px;color:var(--fg2);font-size:13px;line-height:1.6">
Version ${esc(u.version)} installiert - nur Oberflächendateien, kein Neustart nötig.</span>
@@ -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(
@@ -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": [