OTA-Updates für die iOS-App; HACS-Fehlannahme korrigiert

HACS kann laut eigener Dokumentation grundsätzlich nicht mit privaten
GitHub-Repositories arbeiten (hacs.xyz/docs/faq/private_repositories) - keine
Ausnahme für Tokens oder verbundene Konten. Meine frühere Annahme, HACS käme
damit zurecht, wenn es unter dem richtigen Konto angemeldet ist, war falsch.
Da das Repository aus Lizenzgründen privat bleiben muss (Audi-Hausschrift,
Typenschilder), ist install.ps1 damit nicht die Rückfallebene, sondern der
einzige Installationsweg - README, INSTALL.md, ANLEITUNG.md, install.ps1 und
VERSIONIERUNG.md korrigiert.

Oberflächen-Updates für die iOS-App laufen jetzt ohne Xcode:
@capgo/capacitor-updater eingebaut, ein Update-Abschnitt in den
Einstellungen lädt ein neues Bündel und tauscht die Oberfläche aus. Kein
Selbstlauf (autoUpdate: false) - nur auf Tastendruck, nie während der
Benutzung.

Das Bündel liegt in der Integration selbst
(custom_components/audi_dashboard/frontend/app/), nicht unter /local/: so
reist es bei jeder Installation automatisch mit, ohne zweiten
Auslieferungsweg. Gebaut von companion-app/scripts/ota-paket.ps1 (neuer
Befehl: npm run ota), gemeldet über sensor.audi_dashboard_app_version
(neues Feld daten.buendel).

Ein echter Bug beim Bauen gefunden: [IO.Compression.ZipFile]::CreateFrom-
Directory schreibt unter Windows PowerShell 5.1 Backslashes in die
Zip-Einträge - iOS hätte das Archiv falsch entpackt. Behoben, indem die
Einträge von Hand mit "/" geschrieben werden.

Rückfallebene: notifyAppReady() läuft erst, wenn React nachweislich
gerendert hat (App.tsx). Kommt diese Meldung nicht, rollt das Plugin nach
20 Sekunden von selbst auf das vorherige Bündel zurück.

Am laufenden Testcontainer verifiziert: die ausgelieferte Zip hasht exakt
auf den in bundle.json hinterlegten Wert, 13 Einträge, index.html in der
Wurzel, keine Backslashes, keine Beschädigung. tsc sauber, 117/117 Tests
(5 davon neu für buendelPasst() - dabei eine echte Lücke gefunden: die
Funktion hätte bei unbekannter eigener Version fälschlich ein Update
angeboten, jetzt genauso vorsichtig wie versionVergleichen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 09:20:14 +02:00
parent d8b12da36d
commit 1354ca6b06
22 changed files with 695 additions and 99 deletions
+15 -20
View File
@@ -1,8 +1,17 @@
# Installation — Schritt für Schritt
Zwei Wege führen zum selben Ergebnis: HACS lädt den Ordner
`custom_components/audi_dashboard/` aus dem Repository, das Skript kopiert
denselben Ordner von der Festplatte. Was danach passiert, ist identisch.
HACS scheidet für dieses Repository aus — nicht als Vorbehalt, sondern nach
eigener Dokumentation von HACS: „Private GitHub repositories can not be used
with HACS at all" (hacs.xyz/docs/faq/private_repositories), ohne Ausnahme für
Tokens oder verbundene Konten. Das Repository ist privat, weil es die
Audi-Hausschrift und die Typenschilder enthält, die nur für diese eine
private Installation lizenziert sind — öffentlich machen ist deshalb keine
Option.
Es gibt also nur einen Weg: das Skript unten kopiert
`custom_components/audi_dashboard/` von der Festplatte in die Instanz. Das
ist keine Verlegenheitslösung — es prüft dieselben Dinge, die HACS auch
prüfen würde, und derselbe Aufruf installiert und aktualisiert.
Wer von der früheren pyscript-Fassung kommt: [Umstieg](#umstieg-von-der-pyscript-fassung)
weiter unten. Die Fahrzeugdaten bleiben dabei, wo sie sind.
@@ -13,7 +22,7 @@ weiter unten. Die Fahrzeugdaten bleiben dabei, wo sie sind.
- Home Assistant 2025.1 oder neuer
- Zugriff auf das `config`-Verzeichnis (Samba-Add-on, SSH oder ein
gemounteter Pfad) — nur für den Weg ohne HACS
gemounteter Pfad)
- Mindestens eine Datenquelle, die den Zündungs-/ACC-Status des Fahrzeugs
als `binary_sensor` meldet. Ohne sie läuft die App, erkennt aber keine
Fahrten.
@@ -25,21 +34,7 @@ langlebiges Zugriffstoken, ein `pip install` im Container und Einträge in der
---
## Weg A — über HACS
1. HACS → **Integrationen** → Menü oben rechts → **Benutzerdefinierte
Repositories**
2. Repository-URL eintragen, Kategorie **Integration**, hinzufügen
3. **Audi Dashboard** suchen und herunterladen
4. Home Assistant neu starten
**Hürde, die man kennen muss:** HACS spricht ausschließlich mit GitHub —
`github.com` und `api.github.com` stehen fest im Code, es gibt keinen
Schalter für Gitea, GitLab oder eine selbst gehostete Instanz. Liegt das
Repository woanders, findet HACS es auch als benutzerdefiniertes Repository
nicht, und es bleibt Weg B.
## Weg B — ohne HACS, per Skript
## Installation per Skript
Vom Windows-Rechner aus, der das `config`-Verzeichnis erreicht:
@@ -160,7 +155,7 @@ Dateiformate sind unverändert. Die Integration liest den bestehenden Bestand
einfach weiter — es gibt keine Migration und damit auch keinen Weg, dabei
etwas zu verlieren.
1. Integration installieren (Weg A oder B oben)
1. Integration installieren (siehe oben)
2. Aus der `configuration.yaml` entfernen: den `pyscript:`-Block und den
`panel_custom:`-Eintrag `audi-dashboard-panel`. Bleiben sie stehen, gibt
es den Sidebar-Eintrag zweimal, und beide Backends schreiben in dieselben
@@ -147,5 +147,6 @@ Ordner wird ersetzt, die Fahrzeugdaten unter `audi_dashboard\` und die eigenen
Fotos unter `www\bilder\` bleiben unangetastet. Danach HA neu starten (oder
kürzer: **Einstellungen → Geräte & Dienste → Audi Dashboard → Neu laden**).
Liegt das Projekt auf GitHub, übernimmt HACS das: es meldet neue Fassungen
von selbst, installiert sie und kann zurückrollen.
HACS ist hier bewusst keine Alternative: es kann laut eigener Dokumentation
grundsätzlich nicht mit privaten GitHub-Repositories arbeiten, und das
Repository ist privat, weil es lizenzierte Audi-Assets enthält.
+14 -8
View File
@@ -14,14 +14,20 @@
Fahrzeugprofil aus der Vorlage an und bringt pypdf über ihre manifest.json
mit, das Home Assistant beim ersten Laden nachinstalliert.
WOFÜR ES DIESES SKRIPT ÜBERHAUPT NOCH GIBT
------------------------------------------
Der eigentliche Weg ist HACS. HACS spricht aber ausschließlich mit GitHub
(github.com/api.github.com stecken fest im Code) - solange dieses Projekt
nur auf der eigenen Gitea-Instanz liegt, findet HACS es nicht. Dieses Skript
ist der Weg dorthin, der ohne GitHub auskommt. Es installiert exakt
denselben Ordner, den auch HACS installieren würde; ein späterer Wechsel auf
HACS überschreibt ihn einfach.
WOFÜR ES DIESES SKRIPT ÜBERHAUPT GIBT
--------------------------------------
HACS scheidet für dieses Repository aus, und zwar endgültig: laut eigener
Dokumentation (hacs.xyz/docs/faq/private_repositories) kann HACS
"grundsätzlich nicht" mit privaten GitHub-Repositories arbeiten - ohne
Ausnahme für Tokens oder verbundene Konten. Das Projekt wird zwar von der
eigenen Gitea-Instanz nach github.com/T130B/DM360 gespiegelt, aber das
Repository bleibt privat: es enthält die Audi-Hausschrift und die
Typenschilder, die nur für diese eine private Installation lizenziert
sind, und öffentlich machen ist deshalb keine Option.
Dieses Skript ist damit nicht die Rückfallebene, sondern der einzige Weg.
Es installiert exakt den Ordner, den auch HACS installieren würde, wenn es
könnte - dieselbe Prüfung, ohne die HACS-Voraussetzung.
SICHERHEIT GEGENÜBER DER BESTEHENDEN HA-INSTALLATION
----------------------------------------------------