From 146f809e9bfe5ef8efe2386646d6a20c4292e8cc Mon Sep 17 00:00:00 2001
From: Tobi G
Date: Mon, 24 Aug 2026 12:44:47 +0200
Subject: [PATCH] Selbst-Update: Ladezustand und echter Neustart-Knopf
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Der erste echte Live-Test des Selbst-Updates gegen das private Gitea-Repo
lief erfolgreich (mehrfach im Test-Container bestätigt) - deckte aber zwei
UX-Lücken auf, die der Owner direkt gemeldet hat:
- Prüfen/Installieren gaben während der 15-25 Sekunden dauernden
Netzwerkaktion keine sichtbare Rückmeldung - nicht von einem Hänger zu
unterscheiden. Jetzt ein Ladeindikator (Panel: wiederverwendetes
.lade-spinner; companion-app: neues .dm-spinner-Äquivalent, gab es dort
noch gar nicht).
- Nach erfolgreicher Installation stand nur ein Hinweistext da, kein Weg
zum eigentlich nötigen nächsten Schritt. Der Knopf wechselt jetzt zu
"Installation abschließen - Jetzt neu starten" und stößt
homeassistant.restart direkt an.
Das separat gemeldete "Lädt"-Hängenbleiben war kein Bug: reproduziert durch
Live-Test des neuen Neustart-Knopfs - eine echte HA-Verbindungsunterbrechung
während eines Neustarts zeigt exakt denselben, bereits bestehenden
Bootstrap-Ladebildschirm. Vermutlich derselbe Effekt durch den
Docker-Neustart früher in dieser Sitzung.
Verifiziert im Test-Container per Browser-Automatisierung: Neustart-Knopf
ausgelöst, Verbindungsabbruch beobachtet, per docker logs bestätigt, dass
Home Assistant tatsächlich neu gestartet ist und die neue Version aktiv
wurde.
Details in AGENTS.md, Abschnitt L.
Co-Authored-By: Claude Sonnet 5
---
AGENTS.md | 67 +++++++++++++
companion-app/src/api/index.ts | 9 ++
companion-app/src/screens/Einstellungen.tsx | 94 +++++++++++++++---
companion-app/src/stile/screens.css | 28 ++++++
.../audi_dashboard/frontend/app/bundle.json | 2 +-
.../audi_dashboard/frontend/app/bundle.zip | Bin 232096 -> 232382 bytes
.../frontend/audi-dashboard-app.js | 59 +++++++++--
.../audi_dashboard/manifest.json | 2 +-
8 files changed, 239 insertions(+), 22 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index 7b2a299..ac2f219 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -2337,6 +2337,73 @@ entirely, not replaced with a space) and un-escapes `\,`/`\;`/`\n`/`\\` before u
Verified: `tsc --noEmit` clean, all 134 companion-app tests pass (127 + 7 new), panel JS re-checked
with `node --check`. Manifest bumped to `2026.8.24.5`, `npm run ota` rerun (both frontends changed).
+### L) Self-update UX: loading feedback and a real restart button (2026-08-24, same day)
+
+**The self-update feature (section J) got its first genuine live test against the real private
+Gitea repo this same day**, and it worked — confirmed directly in the test container's log across
+several real attempts (`Update installiert: Version 2026.8.24.5`, no manual file copying involved).
+That's the first real end-to-end confirmation beyond the unit tests and structural container-restart
+checks section J could offer on its own.
+
+That same live test exposed two real UX gaps, both raised directly by the owner:
+
+1. **No feedback during or after the ~15–25 second install** (confirmed from the log's own
+ timestamps between a "Prüfung" and the matching "installiert" line). The button just sat there
+ with no state change — indistinguishable from a hang, and after success, the version still read
+ "2026.8.24.4 installiert" because that field only updates after a real restart, which nothing in
+ the UI was telling the user to do next beyond a paragraph of text.
+2. **A separate, initially confusing "Lädt …" hang the owner saw and asked about.** Traced by
+ reproducing it directly: `.lade-spinner`/"Lädt …" is this project's own **existing** top-level
+ bootstrap loading screen (shown whenever `DATEN_GELADEN` is false — i.e., no live connection to
+ Home Assistant yet), not anything related to the update button specifically. Clicking the new
+ "Jetzt neu starten" button and watching it live in a browser reproduced the *exact* same screen —
+ because a `homeassistant.restart` call genuinely does drop the frontend's connection until HA
+ finishes rebooting, and this is the correct, expected screen for that. The most likely explanation
+ for the owner's *original* sighting (before this button existed): the Docker Desktop restart from
+ earlier in the same session dropped the connection the same way. Not a bug — but the fact that it
+ was indistinguishable from one was the actual, valid complaint: nothing signposted that a restart
+ was in progress versus something being stuck.
+
+**Fixed with a three-state UI, researched against Apple HIG's guidance on indeterminate progress**
+(unknown-duration network operations get a running indicator, not just a disabled control; on
+completion the UI leads straight to the next required action instead of leaving the user to find it
+themselves):
+- **Prüfen/Installieren, in progress** — a small spinner + "Prüfe …"/"Installiere …", reusing the
+ panel's own pre-existing `.lade-spinner` (originally built, per its own comment, for the exact same
+ "don't let 'still loading' look like 'stuck'" reason at app bootstrap) and a new equivalent
+ `.dm-spinner`/`.dm-ladezeile` pair added to companion-app's `screens.css` (that side had no spinner
+ at all before, only a button-text swap).
+- **On success** — the tile switches directly to "Installation abschließen - Jetzt neu starten",
+ which calls `homeassistant.restart` (a core HA service any admin could already trigger via
+ Settings → System → Restart — this button doesn't grant a new capability, it surfaces an existing
+ one at the point it's actually needed). Its own click shows "Home Assistant startet neu …";
+ no `.finally`-style cleanup after that call succeeds, since the connection normally drops before
+ the promise would ever resolve — only a genuine rejection (service refused, etc.) reaches the
+ catch block.
+- **On a real request-level failure** (not the already-handled "no token"/"bad token" case from
+ section J, which returns normally with `fehler` set — this is Gitea unreachable, the websocket
+ itself failing, or any other exception that never made it back from Home Assistant at all) — this
+ was previously silent in companion-app (a `try/finally` with no `catch` re-throws into an
+ unhandled promise rejection). Added explicit `catch` blocks on all three actions in both frontends,
+ each surfacing its own message rather than one shared silently-stale error field.
+
+- Panel: `INTEGRATION_UPDATE_LAEUFT` (`"pruefen" | "installieren" | "neustart" | null`), the
+ `data-update` click handler rewritten from `serviceRufen()` (fire-and-forget) to direct
+ `HASS.callService()` promise chains so the loading flag can wrap them; `vEinst()`'s tile rewritten
+ with the three states above.
+- companion-app: `updateNeustartLaeuft`/`updateAktionFehler` state and `updateNeustartAusloesen()` in
+ `Einstellungen.tsx`; new `homeAssistantNeuStarten()` in `api/index.ts` (`dienstAufrufen("homeassistant",
+ "restart")` — note the domain isn't `DIENST_DOMAIN`, this is a core HA service, not one of this
+ integration's own).
+
+Verified live end-to-end in the test container via browser automation: triggered the real restart
+button, watched the connection drop into the bootstrap "Lädt …" screen exactly as reasoned above,
+confirmed via `docker logs` that Home Assistant actually rebooted
+(`Audi Dashboard 2026.8.24.6 eingerichtet` after restart, version now genuinely current — not just
+the pre-restart file swap). companion-app: `tsc --noEmit` clean, full suite still green. Manifest
+bumped to `2026.8.24.6` and `npm run ota` rerun per the standing rule in `VERSIONIERUNG.md` — both
+frontends changed (new spinner/restart-button behavior is real, visible UI, not internal-only).
+
---
## Working conventions (observed — keep them)
diff --git a/companion-app/src/api/index.ts b/companion-app/src/api/index.ts
index 29d26e3..2219490 100644
--- a/companion-app/src/api/index.ts
+++ b/companion-app/src/api/index.ts
@@ -217,6 +217,15 @@ export class DataMetricApi {
return this.rest.dienstAufrufen(DIENST_DOMAIN, "update_installieren");
}
+ /** Startet Home Assistant komplett neu - der letzte Schritt nach
+ updateInstallieren(), damit die neue Fassung tatsächlich geladen wird
+ (ein reiner Reload reicht dafür nicht, siehe AGENTS.md Abschnitt J).
+ Kein audi_dashboard-Dienst, deshalb der Bereich "homeassistant" statt
+ DIENST_DOMAIN. */
+ homeAssistantNeuStarten(): Promise {
+ return this.rest.dienstAufrufen("homeassistant", "restart");
+ }
+
/* ------------------------------------------- Import aus dem HA-Verlauf
Bewusst NICHT über die Warteschlange, anders als die übrigen
schreibenden Vorgänge: der Import ist keine Eingabe, die man im Funkloch
diff --git a/companion-app/src/screens/Einstellungen.tsx b/companion-app/src/screens/Einstellungen.tsx
index 14fbb79..d1d8c01 100644
--- a/companion-app/src/screens/Einstellungen.tsx
+++ b/companion-app/src/screens/Einstellungen.tsx
@@ -53,6 +53,8 @@ export function Einstellungen({
const [otaFehler, setzeOtaFehler] = useState(null)
const [updatePruefenLaeuft, setzeUpdatePruefenLaeuft] = useState(false)
const [updateInstallierenLaeuft, setzeUpdateInstallierenLaeuft] = useState(false)
+ const [updateNeustartLaeuft, setzeUpdateNeustartLaeuft] = useState(false)
+ const [updateAktionFehler, setzeUpdateAktionFehler] = useState(null)
const dateiwahl = useRef(null)
const otaUpdateVerfuegbar = otaMoeglich() && buendelPasst(otaBuendel, eigeneVersion())
@@ -82,12 +84,21 @@ export function Einstellungen({
// danach über neuLaden() den neuen Stand von
// sensor.audi_dashboard_app_version - der Fehlertext bei fehlendem Token
// kommt von dort mit, eine eigene "ist ein Token eingetragen?"-Prüfung
- // gibt es bewusst nicht.
+ // gibt es bewusst nicht. updateAktionFehler fängt zusätzlich echte
+ // Verbindungsfehler ab (dienste.py behandelt AktualisierungsFehler selbst
+ // und liefert 200 zurück - hier landet nur, was gar nicht erst bei Home
+ // Assistant ankam), sonst bliebe ein solcher Fehlschlag ganz ohne
+ // Rückmeldung.
const updatePruefenAusloesen = async () => {
setzeUpdatePruefenLaeuft(true)
+ setzeUpdateAktionFehler(null)
try {
await api.updatePruefen()
await neuLaden()
+ } catch (fehler) {
+ setzeUpdateAktionFehler(
+ fehler instanceof Error ? fehler.message : "Die Prüfung konnte nicht ausgeführt werden.",
+ )
} finally {
setzeUpdatePruefenLaeuft(false)
}
@@ -95,14 +106,39 @@ export function Einstellungen({
const updateInstallierenAusloesen = async () => {
setzeUpdateInstallierenLaeuft(true)
+ setzeUpdateAktionFehler(null)
try {
await api.updateInstallieren()
await neuLaden()
+ } catch (fehler) {
+ setzeUpdateAktionFehler(
+ fehler instanceof Error ? fehler.message : "Das Update konnte nicht installiert werden.",
+ )
} finally {
setzeUpdateInstallierenLaeuft(false)
}
}
+ // Nach einer erfolgreichen Installation zeigt die Kachel direkt den
+ // nächsten nötigen Schritt statt den Nutzer selbst suchen zu lassen - ein
+ // reiner Reload reicht nicht, siehe AGENTS.md Abschnitt J. Kein try/finally
+ // um setzeUpdateNeustartLaeuft: bricht die Verbindung normalerweise durch
+ // den Neustart selbst ab, bevor der Aufruf überhaupt zurückkehrt.
+ const updateNeustartAusloesen = async () => {
+ setzeUpdateNeustartLaeuft(true)
+ setzeUpdateAktionFehler(null)
+ try {
+ await api.homeAssistantNeuStarten()
+ } catch (fehler) {
+ setzeUpdateAktionFehler(
+ fehler instanceof Error
+ ? fehler.message
+ : "Home Assistant konnte nicht neu gestartet werden.",
+ )
+ setzeUpdateNeustartLaeuft(false)
+ }
+ }
+
if (!einstellungen || !fahrzeug) return null
const werte = entwurf ?? einstellungen
@@ -443,15 +479,36 @@ export function Einstellungen({
Integration-Update
- {integrationUpdate?.installiert ? (
+ {/* HIG "Loading": Netzwerk zu Gitea plus Entpacken dauert unbestimmt
+ lang, ohne verlässliche Fortschrittsangabe - ein laufender
+ Indikator statt eines nur deaktivierten Knopfes verhindert, dass
+ das wie ein Hänger aussieht. Nach Erfolg führt der Knopf direkt
+ zum nächsten nötigen Schritt (Neustart) statt den Nutzer selbst
+ suchen zu lassen - ein reiner Reload reicht nicht (AGENTS.md
+ Abschnitt J). */}
+ {updateInstallierenLaeuft ? (
+
+
+
+ Installiere …
+
+
+ ) : updateNeustartLaeuft ? (
+
+
+
+ Home Assistant startet neu …
+
+
+ ) : integrationUpdate?.installiert ? (
<>
- Version {integrationUpdate.version} installiert. Home Assistant neu starten, damit
- die neue Fassung geladen wird — Einstellungen → System → Neu starten.
+ Version {integrationUpdate.version} installiert - die neue Fassung wird erst nach
+ einem Neustart geladen.
-
void updatePruefenAusloesen()} disabled={updatePruefenLaeuft}>
- {updatePruefenLaeuft ? "Prüfe …" : "Erneut prüfen"}
+ void updateNeustartAusloesen()}>
+ Installation abschließen - Jetzt neu starten
>
@@ -466,14 +523,18 @@ export function Einstellungen({
nicht betroffen.
-
void updateInstallierenAusloesen()}
- disabled={updateInstallierenLaeuft}
- >
- {updateInstallierenLaeuft ? "Installiere …" : "Update installieren"}
+ void updateInstallierenAusloesen()}>
+ Update installieren
>
+ ) : updatePruefenLaeuft ? (
+
+
+
+ Prüfe …
+
+
) : (
<>
@@ -482,13 +543,18 @@ export function Einstellungen({
: "Noch nicht geprüft."}
-
void updatePruefenAusloesen()} disabled={updatePruefenLaeuft}>
- {updatePruefenLaeuft ? "Prüfe …" : "Auf Update prüfen"}
+ void updatePruefenAusloesen()}>
+ Auf Update prüfen
>
)}
- {integrationUpdate?.fehler && {integrationUpdate.fehler}
}
+ {updateAktionFehler && {updateAktionFehler}
}
+ {!updateAktionFehler &&
+ integrationUpdate?.fehler &&
+ !updatePruefenLaeuft &&
+ !updateInstallierenLaeuft &&
+ !updateNeustartLaeuft && {integrationUpdate.fehler}
}
diff --git a/companion-app/src/stile/screens.css b/companion-app/src/stile/screens.css
index 6cc10b3..8b46391 100644
--- a/companion-app/src/stile/screens.css
+++ b/companion-app/src/stile/screens.css
@@ -609,6 +609,34 @@
background: var(--tile-2);
}
+/* ------------------------------------------------------------ Ladezustand */
+
+/* HIG "Loading": ein unbestimmt langer Vorgang (Netzwerk, kein verlässlicher
+ Fortschritt) bekommt einen laufenden Indikator statt eines stumm
+ daliegenden Knopfes - sonst nicht von einem Hänger zu unterscheiden.
+ Deckungsgleich mit .lade-spinner im Panel. */
+.dm-spinner {
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+ flex: none;
+ border: 2px solid var(--line);
+ border-top-color: var(--fg2);
+ border-radius: 50%;
+ animation: dm-spin 0.8s linear infinite;
+}
+@keyframes dm-spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+.dm-ladezeile {
+ display: flex;
+ align-items: center;
+ gap: var(--sp-2);
+ margin-top: var(--sp-3);
+}
+
/* ------------------------------------------------------------ Meldungen */
.dm-fehler {
diff --git a/custom_components/audi_dashboard/frontend/app/bundle.json b/custom_components/audi_dashboard/frontend/app/bundle.json
index d38d012..c2f1b75 100644
--- a/custom_components/audi_dashboard/frontend/app/bundle.json
+++ b/custom_components/audi_dashboard/frontend/app/bundle.json
@@ -1 +1 @@
-{"version":"2026.8.24.5","sha256":"378a1cbc7f5daa3d8c5d74734a4c09f30557b243a8ce4d720240bf911fbeff76","bytes":232096,"gebaut":"2026-08-24T10:29:33Z"}
\ No newline at end of file
+{"version":"2026.8.24.6","sha256":"e0d8c7a6f4cc7fddc59b252e02e4ebf50002f3bd4e317ddb315670ef13299d75","bytes":232382,"gebaut":"2026-08-24T10:44:09Z"}
\ 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 9bc849b5ee9af2ad6d4af322e3cac4b48d31785f..6c15fa128cbe119dbbd9b1e26fe06842f9f78d05 100644
GIT binary patch
delta 101916
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