Update ohne Neustart, wenn nur Oberflaechendateien wechseln

Bisher verlangte jedes Update einen Home-Assistant-Neustart. Noetig ist er
aber nur fuer Python-Code: HA importiert die Module einmal beim Start und
haengt danach mit lebenden Objekten daran. frontend/ dagegen wird direkt von
der Platte ausgeliefert (StaticPathConfig, cache_headers=False) - eine
ersetzte .js ist sofort wirksam, es braucht nur ein Neuladen im Browser.

aktualisierung.neustart_noetig() vergleicht die alte gegen die neue Fassung
ueber sha256 je Datei und meldet "kein Neustart" nur, wenn JEDE Abweichung
unter frontend/ liegt oder die manifest.json ist. Alles andere - .py,
services.yaml, translations/, vorlage/ - gilt als neustartpflichtig, auch wo
es das im Einzelfall nicht waere. Die Schieflage ist Absicht: ein
faelschlich ausgelassener Neustart laesst neuen Python-Code nie anlaufen, und
der Fehler wird woanders gesucht.

manifest.json ist ausgenommen, weil sich seine Versionsnummer bei jeder
Veroeffentlichung aendert - sonst waere die Unterscheidung wertlos. Weil HA
das Manifest fuer die Laufzeit festhaelt (loader.py: hass.data[
DATA_INTEGRATIONS]), liest version_von_platte() die Nummer direkt von der
Platte; koordinator.version_neu_lesen() zieht sie nach einem Update ohne
Neustart nach, damit Panel und App die neue Fassung auch anzeigen.

Panel und App zeigen im Neustart-freien Fall "Seite neu laden" statt
"Installation abschliessen - Jetzt neu starten".

Neun neue Testfaelle fuer die Unterscheidung, 23 Tests in der
Aktualisierungs-Suite gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 13:30:25 +02:00
parent 4dad3d21a8
commit 81808dbc10
10 changed files with 265 additions and 14 deletions
+11 -2
View File
@@ -216,9 +216,18 @@ export interface IntegrationUpdateAngabe {
verfuegbar: boolean;
version: string | null;
geprueft_am: string;
/** true unmittelbar nach einer erfolgreichen Installation - dann ist ein
Neustart von Home Assistant nötig, damit die neue Fassung geladen wird. */
/** true unmittelbar nach einer erfolgreichen Installation. */
installiert: boolean;
/** Ob nach der Installation wirklich ein Home-Assistant-Neustart nötig ist.
Der Updater entscheidet das am Datei-Vergleich: betrifft das Update nur
`frontend/`, reicht ein Neuladen der Seite - die Oberflächendateien
werden direkt von der Platte ausgeliefert. Nur geänderter Python-Code
braucht einen Neustart, weil Home Assistant seine Module einmal beim
Start importiert.
Fehlt das Feld (ältere Integration), gilt "Neustart nötig". */
neustart_noetig?: boolean;
fehler: string | null;
}