d8b12da36d
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>
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
"""Einrichtung über die Oberfläche (Einstellungen -> Geräte & Dienste ->
|
|
Integration hinzufügen -> Audi Dashboard).
|
|
|
|
Bewusst ohne Eingabefelder. Es gäbe genau eine Sache zu fragen - welche
|
|
Entität welche Rolle im Fahrzeug spielt -, und die gehört nicht hierher: die
|
|
Zuordnung wird im Setup-Menü der App selbst vorgenommen, wo neben jedem Feld
|
|
steht, wofür es gebraucht wird und was passiert, wenn es leer bleibt. Sie
|
|
hier abzufragen hieße, dieselbe Auswahl an zwei Stellen zu pflegen - und die
|
|
schlechtere von beiden zuerst zu zeigen.
|
|
|
|
Eine einzige Instanz, erzwungen über single_config_entry in manifest.json:
|
|
die App gehört zu genau einem Fahrzeug, und alle Bestände liegen unter einem
|
|
festen Pfad.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
|
|
|
|
from .const import DOMAIN
|
|
|
|
|
|
class AudiDashboardConfigFlow(ConfigFlow, domain=DOMAIN):
|
|
"""Ein Bestätigungsschritt, mehr braucht es nicht."""
|
|
|
|
VERSION = 1
|
|
|
|
async def async_step_user(
|
|
self, user_input: dict[str, Any] | None = None
|
|
) -> ConfigFlowResult:
|
|
if self._async_current_entries():
|
|
return self.async_abort(reason="single_instance_allowed")
|
|
if user_input is None:
|
|
return self.async_show_form(step_id="user")
|
|
return self.async_create_entry(title="Audi Dashboard", data={})
|