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 <[email protected]>
This commit is contained in:
2026-09-05 15:26:19 +02:00
co-authored by Claude Opus 5
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> </span>
</div> </div>
) : integrationUpdate?.installiert && integrationUpdate.neustart_noetig === false ? ( ) : integrationUpdate?.installiert && integrationUpdate.neustart_noetig === false ? (
/* Kein Knopf. Geändert wurden Dateien unter frontend/, und das sind /* Gar keine Meldung. Geändert wurden Dateien unter frontend/, und das
die des PANELS - die App lädt ihren eigenen Code aus /local/dmapp sind die des PANELS - die App lädt ihren eigenen Code aus
bzw. aus der nativen Hülle. Ein "App neu laden" stand hier bis zum /local/dmapp bzw. aus der nativen Hülle und hat hier nichts zu tun.
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, Damit gilt in der App durchgehend: steht hier nichts, ist alles in
erscheint es im Abschnitt "App" darunter als eigenes Update. */ Ordnung; steht ein Neustart-Knopf da, muss ich handeln (Vorgabe des
<p className="dm-erklaerung"> Eigentümers, 05.09.2026). Ein "App neu laden" stand hier kurzzeitig
Version {integrationUpdate.version} installiert - nur Oberflächendateien, kein und versprach etwas, das es nicht einlösen konnte. Kam ein neues
Neustart nötig. Das Panel lädt sie beim nächsten Öffnen. OTA-Bündel mit, erscheint es im Abschnitt "App" darunter. */
</p> <></>
) : integrationUpdate?.installiert ? ( ) : integrationUpdate?.installiert ? (
<> <>
<p className="dm-erklaerung"> <p className="dm-erklaerung">
@@ -373,6 +373,11 @@ def registrieren(hass: HomeAssistant, k: Koordinator) -> None:
# Ohne Neustart bleibt Home Assistants zwischengespeichertes # Ohne Neustart bleibt Home Assistants zwischengespeichertes
# Manifest stehen - die neue Nummer muss von der Platte kommen. # Manifest stehen - die neue Nummer muss von der Platte kommen.
await k.version_neu_lesen() 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 = { k.letzte_update_pruefung = {
"verfuegbar": False, "verfuegbar": False,
"version": ergebnis["version"], "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 cache_headers=False - der Browser holt sie beim naechsten Laden
ohnehin frisch. Nur geaenderter Python-Code braucht wirklich einen ohnehin frisch. Nur geaenderter Python-Code braucht wirklich einen
Neustart (Abschnitt CZ in AGENTS.md). */ 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) { if (u.neustart_noetig === false) {
return `<span style="display:block;margin-top:8px;color:var(--fg2);font-size:13px;line-height:1.6"> 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> Version ${esc(u.version)} installiert - nur Oberflächendateien, kein Neustart nötig.</span>
@@ -83,7 +83,12 @@ from .const import (
E_REIFEN_WINTER, E_REIFEN_WINTER,
E_TANKVORGAENGE, E_TANKVORGAENGE,
E_ZUORDNUNG, E_ZUORDNUNG,
PANEL_ICON,
PANEL_KOMPONENTE,
PANEL_TITEL,
PANEL_URL,
SIGNAL_AKTUALISIERT, SIGNAL_AKTUALISIERT,
STATIK_URL,
) )
from .veroeffentlichung import ( from .veroeffentlichung import (
fahrzeugstatus, fahrzeugstatus,
@@ -695,6 +700,34 @@ class Koordinator:
_LOGGER.info("Version nach Update: %s -> %s", self.version, neu) _LOGGER.info("Version nach Update: %s -> %s", self.version, neu)
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: async def app_version_veroeffentlichen(self) -> None:
buendel = await self.hass.async_add_executor_job(self._buendel_lesen) buendel = await self.hass.async_add_executor_job(self._buendel_lesen)
bildstaende = await bilder.staende( bildstaende = await bilder.staende(
@@ -1,7 +1,7 @@
{ {
"domain": "audi_dashboard", "domain": "audi_dashboard",
"name": "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", "documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues", "issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
"codeowners": [ "codeowners": [