pyscript-Backend zur echten HA-Integration umgebaut (HACS-fähig)
Das Backend liegt jetzt als custom_components/audi_dashboard/ vor - eine normale Home-Assistant-Integration mit Config-Flow, einer sensor-Plattform und 18 Diensten. Damit ist die App über HACS installierbar; bis das Repo auf GitHub gespiegelt ist (HACS spricht ausschließlich mit GitHub), installiert homeassistant/installationspaket/install.ps1 denselben Ordner ohne HACS. Fünf Installationsschritte entfallen ersatzlos: der pyscript:-Block, der panel_custom:-Block, das Kopieren der Oberfläche nach www/, das langlebige Zugriffstoken (der Verlauf wird direkt über die recorder-API gelesen) und "pip install pypdf" (steht in manifest.json). Das Fahrzeugprofil legt die Integration beim ersten Start aus ihrer Vorlage an. Drei alte Schwächen sind dabei mit erledigt: - Die Nutzlast landet nicht mehr in der Recorder-Datenbank (_unrecorded_attributes - das kann nur eine echte Entität). - Eine laufende Fahrt überlebt einen Neustart (Store statt Arbeitsspeicher); fiel sie während eines Ausfalls ins Ende, schließt nach_neustart_fortsetzen() sie beim letzten aufgezeichneten Zeitpunkt. - Sensor-Zuordnungen wirken sofort - die Zustandsbeobachter werden neu gebunden, der Neustart-Hinweis und der Neustart-Dienst sind weg. Namensvertrag geändert, beide Oberflächen mitgezogen: pyscript.audi_dashboard_x -> sensor.audi_dashboard_x, pyscript.audi_dashboard_y -> audi_dashboard.y. Eine Companion-App vom alten Stand findet nach dem Umstieg nichts mehr und muss neu gebaut werden; das Panel liegt in der Integration und kann nicht driften. Der selbstgebaute Updater entfällt - HACS ist die Update-Mechanik, die Home Assistant kennt. Die Versionierung schrumpft auf eine Quelle: manifest.json. Geprüft am laufenden Testcontainer (Container byteweise identisch mit dem Repo): alle 18 Dienste, Panel, Config-Entry neu laden, Historienimport, echter Shell-Beleg in-process, Neuinstallation im Wegwerf-Container blank mit automatisch nachinstalliertem pypdf. Companion-App: tsc sauber, 112/112 Tests, beide Rauchtests gegen das laufende Backend grün. Belegparser 8/8. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
# Audi Dashboard — „Mein Audi" für Home Assistant
|
||||
|
||||
Fahrtenbuch, Tankstatistik, Reifen- und Servicebuch für ein einzelnes
|
||||
Fahrzeug — als eigener Sidebar-Eintrag in Home Assistant und als iOS-App, die
|
||||
dieselben Daten zeigt.
|
||||
|
||||
Die App wertet aus, was Home Assistant ohnehin über das Fahrzeug weiß
|
||||
(Zündung, Kilometerstand, Tankfüllstand, Bordspannung, GPS — etwa über einen
|
||||
Teltonika FMM003 oder eine EU-Data-Act-Integration des Herstellers), und macht
|
||||
daraus einen dauerhaften Bestand: erkannte Fahrten, erkannte Tankvorgänge,
|
||||
Belegdaten aus hochgeladenen Tank-PDFs, ein Spannungsverlauf über Jahre.
|
||||
|
||||
> Privates Projekt für ein bestimmtes Fahrzeug. Es ist nicht als allgemein
|
||||
> nutzbare Integration gedacht und steht in keinem Verhältnis zur AUDI AG.
|
||||
|
||||
---
|
||||
|
||||
## Installation über HACS
|
||||
|
||||
1. HACS → **Integrationen** → Menü oben rechts → **Benutzerdefinierte
|
||||
Repositories**
|
||||
2. Dieses Repository eintragen, Kategorie **Integration**
|
||||
3. **Audi Dashboard** herunterladen
|
||||
4. Home Assistant neu starten
|
||||
5. **Einstellungen → Geräte & Dienste → Integration hinzufügen → Audi
|
||||
Dashboard**
|
||||
|
||||
Danach steht **Mein Audi** in der Seitenleiste.
|
||||
|
||||
**Voraussetzung, die HACS selbst mitbringt:** HACS spricht ausschließlich mit
|
||||
GitHub — `github.com` und `api.github.com` stecken fest im Code, Gitea, GitLab
|
||||
und selbst gehostete Instanzen kennt es nicht. Liegt dieses Repository nicht
|
||||
auf GitHub, findet HACS es auch als benutzerdefiniertes Repository nicht. Für
|
||||
diesen Fall gibt es den Weg darunter, der denselben Ordner installiert.
|
||||
|
||||
## Installation ohne HACS
|
||||
|
||||
Von einem Windows-Rechner aus, der das `config`-Verzeichnis der HA-Instanz
|
||||
erreicht (Samba-Add-on oder gemounteter Pfad):
|
||||
|
||||
```
|
||||
homeassistant\installationspaket\Installieren.cmd
|
||||
```
|
||||
|
||||
Das Skript kopiert `custom_components\audi_dashboard\` in die Instanz und
|
||||
fasst sonst nichts an — keine `configuration.yaml`, keine Fahrzeugdaten. Mit
|
||||
`-Pruefen` zeigt es vorher, was es tun würde. Details und die
|
||||
Sicherheitszusagen stehen im Kopf von
|
||||
[`install.ps1`](homeassistant/installationspaket/install.ps1).
|
||||
|
||||
Danach ebenfalls: neu starten, Integration hinzufügen.
|
||||
|
||||
## Nach der Installation
|
||||
|
||||
**Sensoren zuordnen** — **Einstellungen → Fahrzeug einrichten → Setup** in der
|
||||
App. Im Auslieferstand ist bewusst *kein* Sensor vorbelegt: welche Entity-IDs
|
||||
richtig sind, hängt an der Instanz, und eine gesetzte, aber falsche ID ist
|
||||
schlechter als eine leere. Zwingend ist allein der Zündungs-/ACC-Sensor — er
|
||||
trägt die Fahrterkennung. Änderungen wirken sofort, ohne Neustart.
|
||||
|
||||
**Datenaufbewahrung verlängern** — Home Assistant löscht Sensor-Verläufe nach
|
||||
10 Tagen. Das begrenzt, wie weit „Daten importieren aus Home Assistant"
|
||||
zurückreichen kann, und was einmal gelöscht ist, kommt nicht wieder. Der Block
|
||||
aus [`recorder_snippet.yaml`](homeassistant/recorder_snippet.yaml) hebt das
|
||||
auf ein Jahr an; dort steht auch der gemessene Platzbedarf. Bewusst nicht
|
||||
automatisch eingefügt: das ist eine Entscheidung über den Plattenplatz der
|
||||
Instanz.
|
||||
|
||||
**Vergangenes nachholen** — **Einstellungen → Einrichten → Daten importieren
|
||||
aus Home Assistant** leitet Fahrten, Tankvorgänge und Spannungswerte
|
||||
rückwirkend aus dem bereits aufgezeichneten Verlauf ab.
|
||||
|
||||
## Was die Integration mitbringt
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Panel | Sidebar-Eintrag „Mein Audi", von der Integration selbst angemeldet |
|
||||
| Entitäten | `sensor.audi_dashboard_*` — Profil, Fahrten, Tankvorgänge, Fahrzeugstatus, Batterieverlauf, Reifenzähler |
|
||||
| Dienste | `audi_dashboard.*` — 18 Stück, in Entwicklerwerkzeuge → Aktionen dokumentiert |
|
||||
| Daten | `/config/audi_dashboard/` — JSON und JSON Lines, dauerhaft, nie von einem Update angefasst |
|
||||
| Abhängigkeit | `pypdf` (für Tankbelege), von Home Assistant automatisch nachinstalliert |
|
||||
|
||||
Die Nutzlast der Entitäten steckt im Attribut `daten` und ist ausdrücklich von
|
||||
der Aufzeichnung ausgenommen — das Fahrtenarchiv wächst über Jahre auf
|
||||
Hunderte Kilobyte und hat in der Recorder-Datenbank nichts verloren.
|
||||
|
||||
## Companion-App (iOS)
|
||||
|
||||
`companion-app/` ist dieselbe Oberfläche als eigenständige App (React +
|
||||
Capacitor), die über die HA-API auf dieselben Entitäten und Dienste zugreift.
|
||||
Sie trägt ihre Version fest einkompiliert und meldet selbst, wenn sie älter
|
||||
ist als die installierte Integration — siehe
|
||||
[`VERSIONIERUNG.md`](VERSIONIERUNG.md).
|
||||
|
||||
## Ordner in diesem Repository
|
||||
|
||||
| Ordner | Inhalt |
|
||||
|---|---|
|
||||
| `custom_components/audi_dashboard/` | die Integration — Backend und Panel-Dateien |
|
||||
| `companion-app/` | die iOS-App |
|
||||
| `design-system/` | gemeinsame UI-Bausteine (`@audi-dash/ui`) |
|
||||
| `homeassistant/` | Installationspaket, Konfigurationsschnipsel, Anleitungen |
|
||||
| `testumgebung/` | Wegwerf-Home-Assistant in Docker für Entwicklung und Tests |
|
||||
| `tests/belegparser/` | Regressionstest des Tankbeleg-Lesers |
|
||||
Reference in New Issue
Block a user