Debug-Mode, eine Version-Kachel, Knoepfe nach HIG, Bilder ohne Verzoegerung (2026.9.4.11)
Debug-Mode: Zugaenge und Dongle stehen nicht mehr verstreut oben in den Einstellungen, sondern zusammen hinter einem Schalter am Seitenende - dazu neu der letzte Datensatz des Dongles (geraet.py). "Letzter Datensatz" heisst dabei: alle Entitaeten des Geraets, deren Aktualisierung hoechstens zwei Sekunden nach der juengsten liegt - die flespi-Integration setzt einen Datensatz in Millisekunden. Angezeigt mit Ankunft, Geraetezeit und dem Rueckstand zwischen beiden. Beim Verifizieren gefunden: app_version_veroeffentlichen() lief nur beim Start und nach einer Aktion, und beim Start haben die Entitaeten des Geraets noch keinen Zustand - die Kachel waere dauerhaft leer geblieben. Laeuft jetzt im Minutentakt mit, ohne Netzaufruf. Ausserdem: - "Version" und "Integration-Update" sind eine Kachel - Speichern/Verwerfen als zwei gleich breite Knoepfe, der bestaetigende gefuellt und rechts; "Verwerfen" war in der App blosser Text - Bilder werden nach dem ersten Zeichnen in der Leerlaufzeit vorgeladen UND dekodiert. Die Verzoegerung beim Seitenwechsel kam nicht vom Netz (31 Tage Cache), sondern vom asynchronen Dekodieren eines frisch erzeugten <img>. 214/214 Tests, Panel als Modul geparst, live gegen audi_ha_test geprueft.
This commit is contained in:
@@ -6,8 +6,9 @@ Speichern-Knopf, und die Share-Erweiterung trug eine andere Versionsnummer als d
|
||||
dazu die Kopfmarke statt der Firmierung des Betreibers und ein
|
||||
Cache-Brecher auf der .ipa-Adresse; die .ipa liess sich zuletzt nicht mehr
|
||||
installieren - der Erweiterung fehlte die CFBundleVersion; dazu der QR-Scanner
|
||||
fuer den Zugangs-Token, `2026.9.4.8`,
|
||||
Abschnitte CC bis CE. Davor: Geraetezeit statt Ankunftszeit - die Wurzel hinter der 3-km-Fahrt:
|
||||
fuer den Zugangs-Token; dazu Debug-Mode, eine Version-Kachel, das Knopfpaar nach
|
||||
HIG und Bilder ohne Verzoegerung, `2026.9.4.11`,
|
||||
Abschnitte CC bis CF. Davor: Geraetezeit statt Ankunftszeit - die Wurzel hinter der 3-km-Fahrt:
|
||||
das Fahrtfenster stand in Geraetezeit, der Verlauf war nach Ankunftszeit sortiert. Dazu die neun
|
||||
Paritaetsbefunde und die verunreinigte Batteriehistorie, `2026.9.4.1`, Abschnitt CB. Davor: Der Regler stellt den Schlaf-Timeout des Dongles, flespi lesend und
|
||||
schreibend, die eigene Warteschlange wieder entfallen, `2026.9.3.10`, Abschnitt BZ. Davor: Zugaenge: die Dienste-Token aus App und Panel bedienbar, der Wert kommt nie
|
||||
@@ -9844,3 +9845,100 @@ unter „Zugangs-Token", das Blatt oeffnet mit Videofeld und Zielrahmen, und ohn
|
||||
Kamerafreigabe steht dort die erklaerende Meldung statt einer leeren Flaeche.
|
||||
**Nicht geprueft, weil es in dieser Umgebung nicht geht:** ein echter Scan - die
|
||||
Browser-Vorschau gibt keine Kamera heraus. Das zeigt sich erst auf dem Geraet.
|
||||
|
||||
## CF. Debug-Mode, eine Version-Kachel, Knoepfe nach HIG, Bilder ohne Verzoegerung (2026.9.4.11)
|
||||
|
||||
Vier Punkte aus demselben Stapel des Eigentuemers, beide Codebasen.
|
||||
|
||||
### Debug-Mode: Zugaenge, Dongle und der letzte Datensatz, zugeklappt und unten
|
||||
|
||||
„Zugaenge" stand bisher als zweite Kachel ganz oben, „Dongle" mitten in der
|
||||
Seite - beides Dinge, die man einmal im Vierteljahr anfasst. Sie stehen jetzt
|
||||
zusammen hinter einem Schalter am Seitenende, zusammen mit einer dritten,
|
||||
neuen Kachel.
|
||||
|
||||
**`geraet.py` (neu): der letzte Datensatz des Dongles.** Die flespi-Integration
|
||||
setzt die Entitaeten EINES Geraetedatensatzes nacheinander, aber innerhalb
|
||||
weniger Millisekunden (am 01.09.2026 gemessen: 2 ms zwischen Zuendung und
|
||||
zugehoeriger Meldezeit, Abschnitt AY). „Der letzte Datensatz" ist deshalb
|
||||
definiert als: alle Entitaeten des Geraets, deren letzte Aktualisierung
|
||||
hoechstens `FENSTER_S` (2 s) nach der juengsten liegt. Das Geraet wird nicht
|
||||
geraten, sondern ueber das Entitaetsregister der zugeordneten Meldezeit
|
||||
bestimmt (sonst Fahrtsignal, sonst Zuendung); findet sich keines, bleibt der
|
||||
Wert `None`.
|
||||
|
||||
Angezeigt werden Geraetename, **Ankunft**, **Geraetezeit** und der **Rueckstand**
|
||||
zwischen beiden - genau die Angabe, deren Missachtung die Wurzel des
|
||||
3-km-Fahrt-Fehlers war (Abschnitt CB).
|
||||
|
||||
**Ein echter Fund beim Verifizieren:** die Kachel blieb leer.
|
||||
`app_version_veroeffentlichen()` laeuft naemlich **nur** beim Start und nach
|
||||
einer Aktion (Token, Dongle, Update) - beim Start haben die Entitaeten des
|
||||
Geraets aber noch gar keinen Zustand, und danach wurde nie wieder
|
||||
veroeffentlicht. Der Minutentakt ruft sie jetzt mit. Kosten: ein kleiner
|
||||
Dateilesevorgang (`bundle.json`) je Minute, **kein** Netzaufruf - die Pruefung
|
||||
bei Gitea bleibt an ihrem Dienst (Abschnitt J).
|
||||
|
||||
Live nachgewiesen im Panel: 46 Werte aus derselben Meldung, Geraetezeit
|
||||
04.09. 00:49 gegen Ankunft 12:08 - Rueckstand 40.745 s, weil der Dongle seit
|
||||
dem Vorabend schweigt und „Angekommen" nach einem Neustart Home Assistants
|
||||
eigener Zeitpunkt ist. Genau das sagt die Fussnote der Kachel auch.
|
||||
|
||||
### „Version" und „Integration-Update" sind eine Kachel
|
||||
|
||||
Es ist dieselbe Sache aus zwei Blickwinkeln; zwei Kacheln nebeneinander
|
||||
zwangen dazu, zwei Zahlen ueber eine Kachelgrenze hinweg zu vergleichen.
|
||||
|
||||
### Das Knopfpaar Speichern/Verwerfen
|
||||
|
||||
Gemeldet: „Verwerfen ist kein richtiger Button". Stimmt - in der App war es
|
||||
ein blosser Textknopf neben einem vollen. Jetzt **zwei gleich breite Knoepfe**,
|
||||
der bestaetigende gefuellt und rechts, der Ausweg daneben als zweite Rolle:
|
||||
ein Paar aus Bestaetigen und Abbrechen ist eine Entscheidung zwischen zwei
|
||||
Wegen, keine Haupt- und Nebensache, und welcher gewollt ist, sagt die Fuellung
|
||||
und nicht die Groesse.
|
||||
|
||||
Geaendert an **beiden** Stellen der App (Regler-Kachel und Speicherleiste am
|
||||
Seitenende), sonst haette dieselbe Sache zwei Muster auf einer Seite. Im Panel
|
||||
standen beide bereits als volle Knoepfe, nur untereinander - dort jetzt
|
||||
dieselbe Zeile (`.knopfpaar`).
|
||||
|
||||
**Nicht angefasst:** die „Abbrechen"-Textknoepfe der Bearbeiten-Formulare in
|
||||
`FahrtDetail.tsx`/`TankDetail.tsx`. Dieselbe Frage, aber nicht gemeldet und ein
|
||||
anderer Zusammenhang (Formular statt Einstellung) - hier vermerkt, nicht still
|
||||
mitgeaendert.
|
||||
|
||||
### Bilder erscheinen ohne Verzoegerung
|
||||
|
||||
Gemeldet: „Bilder laden beim Umschalten der Menues einige ms verzoegert."
|
||||
|
||||
**Am Netz liegt es nicht**, und das ist der Punkt: die Adresse ist innerhalb
|
||||
einer Sitzung stabil, und Home Assistant liefert `/local/` mit 31 Tagen
|
||||
Cache-Dauer (in Abschnitt AR gemessen). Verzoegert wird das Bild selbst - ein
|
||||
frisch erzeugtes `<img>` wird standardmaessig **asynchron dekodiert** und erst
|
||||
danach gezeichnet, und beim Seitenwechsel entsteht jedes Mal ein neues.
|
||||
|
||||
`bilderVorladen()` holt alle Fahrzeugfotos einmal und ruft `decode()` darauf.
|
||||
Danach zeichnet dasselbe Bild beim naechsten Einhaengen sofort. Ausgefuehrt in
|
||||
der **Leerlaufzeit** nach dem ersten Zeichnen (`requestIdleCallback`, sonst
|
||||
`setTimeout`), damit es nicht mit dem Abruf von Profil, Fahrten und
|
||||
Tankvorgaengen konkurriert; das Datenvolumen ist dasselbe wie beim
|
||||
Durchblaettern aller Seiten, nur frueher.
|
||||
|
||||
Live nachgewiesen im Panel: nach dem Laden stehen alle neun Bildplaetze plus
|
||||
die Winter-Seitenansicht in `performance.getEntriesByType("resource")`.
|
||||
|
||||
### Verifiziert
|
||||
|
||||
`py_compile` auf `geraet.py` und `koordinator.py`, Panel als **Modul** geparst,
|
||||
`tsc --noEmit` sauber, **214/214** Tests, `vite build` sauber, `audi_ha_test`
|
||||
auf `2026.9.4.11` sauber gestartet, und im Panel live nachgesehen: Debug-Mode
|
||||
klappt auf und zeigt Zugaenge, Dongle und die 49 Zeilen des letzten
|
||||
Datensatzes; „Version" traegt jetzt Installiert **und** Update.
|
||||
|
||||
**Nicht live geprueft:** dieselben Kacheln in der App. Die Browser-Vorschau
|
||||
kennt keinen gespeicherten Zugang, und einen Token anzulegen oder einzugeben
|
||||
ist ausgeschlossen. Abgedeckt sind sie durch `tsc`, den
|
||||
Alle-Seiten-Rendertest und die Tatsache, dass das Panel dieselbe Struktur aus
|
||||
denselben Backend-Daten baut - der Zweig MIT Datensatz ist in der App damit
|
||||
strukturell, nicht optisch belegt.
|
||||
|
||||
Reference in New Issue
Block a user