Selbst-Update: Ergebnis erscheint ohne Neuladen, Panel übersteht Neustart
Zwei Meldungen des Besitzers ("Update installieren" braucht manuelles
Neuladen, um den Neustart-Knopf zu zeigen; die "HA startet neu..."-
Anzeige ebenso) auf denselben Grund zurückgeführt: datenLaden() rief
render() nur bei Änderungen an profil/fahrten/tank/status/batt auf,
nie bei einer reinen Änderung des Versions-Sensors. Dazu ein bereits
im Code kommentiertes, bisher nur per Tab-Klick umgangenes Rennen
beim echten HA-Neustart gefunden und behoben: panel_custom baut das
Element neu auf, aber nichts zeichnete es automatisch, bis der Nutzer
irgendwo klickte. companion-app erhielt den passenden Fix für die
Neustart-Anzeige (Panel-Bug 1 betraf sie nicht, siehe AGENTS.md).
Alle drei Fixes live im Testcontainer über einen echten
homeassistant.restart bestätigt, nicht nur simuliert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3302,6 +3302,11 @@ let INTEGRATION_UPDATE = null;
|
||||
// unbestimmt lange dauern (Netzwerk zu Gitea, Entpacken) und die Oberfläche
|
||||
// das sichtbar machen soll - siehe .lade-spinner's eigener Kommentar dazu.
|
||||
let INTEGRATION_UPDATE_LAEUFT = null;
|
||||
// Nur einmal die "ready"-Verbindung des HA-Websockets belauschen (siehe
|
||||
// deren Verdrahtung in set hass() unten) - HASS wird bei jedem Tick neu
|
||||
// zugewiesen, ohne diese Sperre würde sich sonst pro hass-Push ein weiterer
|
||||
// Listener aufhäufen.
|
||||
let VERBINDUNG_UEBERWACHT = false;
|
||||
|
||||
/* Auswahl für "Modell" unter Einrichten - setzt nur CONFIG.fahrzeugtitel
|
||||
(Zeile "Modell" in der Identität, Kopfzeilen, Kalender-Einträge, und den
|
||||
@@ -4960,7 +4965,7 @@ function zustandsDaten(entityId) {
|
||||
return st && st.attributes ? st.attributes.daten : undefined;
|
||||
}
|
||||
|
||||
let letzterProfilState = null, letzterFahrtenState = null, letzterTankState = null, letzterStatusState = null, letzterBelegState = null, letzterBattState = null;
|
||||
let letzterProfilState = null, letzterFahrtenState = null, letzterTankState = null, letzterStatusState = null, letzterBelegState = null, letzterBattState = null, letzterVersionState = null;
|
||||
|
||||
/* Ergebnis eines Beleg-Uploads verarbeiten (siehe belegEntwurf/belegFehler
|
||||
weiter oben) - kommt über dieselbe Zustand-statt-Rückgabewert-Route wie
|
||||
@@ -5092,6 +5097,18 @@ async function datenLaden(erzwingen) {
|
||||
}
|
||||
if (entitaetenState && entitaetenState.attributes) ENTITAETEN = entitaetenState.attributes.daten;
|
||||
|
||||
// sensor.audi_dashboard_app_version änderte sich (z. B. nach "Auf Update
|
||||
// prüfen"/"Update installieren" - siehe dienste.py's update_pruefen()/
|
||||
// update_installieren()) - ohne diesen Vergleich lief zwar die Zuweisung
|
||||
// von INTEGRATION_UPDATE oben bei jedem Tick mit, aber render() darunter
|
||||
// feuert nur, wenn der geaendert-Block das anstößt. Der prüfte bisher nur
|
||||
// profil/fahrten/tank/status/batt: das Ergebnis der Prüfung/Installation
|
||||
// stand zwar korrekt im Speicher, blieb aber unsichtbar, bis zufällig
|
||||
// eines der anderen fünf sich ändert - sichtbar als "braucht ein manuelles
|
||||
// Neuladen der Seite, um den Neustart-Knopf zu zeigen".
|
||||
const versionGeaendert = versionState !== letzterVersionState;
|
||||
letzterVersionState = versionState;
|
||||
|
||||
if (belegState && belegState !== letzterBelegState) {
|
||||
letzterBelegState = belegState;
|
||||
belegErgebnisVerarbeiten(belegState.attributes && belegState.attributes.daten);
|
||||
@@ -5123,6 +5140,12 @@ async function datenLaden(erzwingen) {
|
||||
}
|
||||
}
|
||||
|
||||
// Nur die Version hat sich geändert (siehe versionGeaendert oben), sonst
|
||||
// nichts - der geaendert-Block darüber ist dafür nicht zuständig (der
|
||||
// bricht bei fehlendem profil sogar früher ab). Ein eigener, schlanker
|
||||
// Aufruf statt profilZuConfig()/profilZuCar() & Co. unnötig neu zu rechnen.
|
||||
if (versionGeaendert && DATEN_GELADEN) { render(); return; }
|
||||
|
||||
if (!DATEN_GELADEN) nachladeAnstossen(); // Backend noch nicht bereit (erster Tick nach Neustart)
|
||||
}
|
||||
|
||||
@@ -5165,6 +5188,23 @@ class AudiDashboardPanel extends HTMLElement {
|
||||
if (erster) {
|
||||
this._aufbauen();
|
||||
}
|
||||
// "ready" feuert bei jedem (Wieder-)Verbindungsaufbau des HA-Websockets,
|
||||
// auch nach einem über den "Jetzt neu starten"-Knopf ausgelösten
|
||||
// HA-Neustart: die Seite verliert dabei die Verbindung, INTEGRATION_UPDATE_
|
||||
// LAEUFT blieb aber auf "neustart" stehen - dessen einzige Rücksetzung
|
||||
// greift nur im Fehlerfall (siehe deren Klick-Handler), nicht beim
|
||||
// Erfolgsfall, weil dort niemand mehr zusieht, während HA neu startet.
|
||||
// Ohne dies blieb der "Home Assistant startet neu …"-Spinner nach einem
|
||||
// erfolgreichen Neustart stehen, bis der Nutzer die Seite von Hand neu lud.
|
||||
if (!VERBINDUNG_UEBERWACHT && HASS.connection && HASS.connection.addEventListener) {
|
||||
VERBINDUNG_UEBERWACHT = true;
|
||||
HASS.connection.addEventListener("ready", () => {
|
||||
if (INTEGRATION_UPDATE_LAEUFT === "neustart") {
|
||||
INTEGRATION_UPDATE_LAEUFT = null;
|
||||
render();
|
||||
}
|
||||
});
|
||||
}
|
||||
datenLaden(false);
|
||||
}
|
||||
get hass() { return HASS; }
|
||||
@@ -5242,6 +5282,20 @@ class AudiDashboardPanel extends HTMLElement {
|
||||
standortMenuVerdrahten();
|
||||
themeIcon();
|
||||
setInterval(standAlterTicken, 1000);
|
||||
|
||||
// Frisch aufgebautes Markup zeigt bis hierhin nur das statische "Lädt …"-
|
||||
// Grundgerüst aus dem Template oben - dasselbe bekannte Rennen wie in
|
||||
// go()'s Kopfkommentar (siehe dort/nachladeAnstossen): panel_custom baut
|
||||
// dieses Element bei einem echten HA-Neustart neu auf (ein neues
|
||||
// customElements-Objekt, nicht dasselbe wiederverwendet), aber die
|
||||
// modul-globalen Daten (CONFIG/CAR/...) und DATEN_GELADEN überleben das
|
||||
// unverändert, weil das JS-Modul selbst nicht neu geladen wird. Ohne
|
||||
// diese Zeile blieb genau dieses frische Grundgerüst für immer stehen,
|
||||
// bis der Nutzer zufällig einen Tab anklickte (go()'s eigener,
|
||||
// unbedingter render()-Aufruf) oder die Seite von Hand neu lud - obwohl
|
||||
// in CONFIG/CAR längst brauchbare (ggf. kurz veraltete, durch den
|
||||
// nächsten Datenabgleich ohnehin gleich aufgefrischte) Daten lagen.
|
||||
if (DATEN_GELADEN) render();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"domain": "audi_dashboard",
|
||||
"name": "Audi Dashboard",
|
||||
"version": "2026.8.24.12",
|
||||
"version": "2026.8.24.14",
|
||||
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
|
||||
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
|
||||
"codeowners": ["@paul"],
|
||||
|
||||
Reference in New Issue
Block a user