Files
audi-app/custom_components/audi_dashboard/services.yaml
T
tobias fb251154c7 Ölwechsel/Inspektion-Anzeige repariert, Selbst-Update der Integration gebaut
Zwei getrennte Themen in einem Commit, beide in derselben Sitzung entstanden:

1. Ölwechsel/Inspektion wurden komplett ausgeblendet ("kein Eintrag im
   Servicebuch"), sobald kein Servicebucheintrag vorlag - selbst wenn der
   zugeordnete Sensor eine gültige Fälligkeit meldete. In beiden Frontends
   prüfte die Anzeige nur den Servicebuch-Zweig, bevor sie die
   Fahrzeugmeldung überhaupt las. Jetzt steht die Fahrzeugmeldung für sich;
   fehlt zusätzlich ein Servicebucheintrag, übernimmt eine neue,
   fahrtenlog-basierte Prognose (kmProTagAusFahrten()/meldungsPrognose())
   die Hochrechnung statt der Servicebuch-Rate - deckelt auf die vom
   Fahrzeug selbst gemeldete Zeitgrenze, falls zu wenig gefahren wird.

2. install.ps1 als Update-Weg wird von Windows Smart App Control blockiert,
   ohne Umgehungsmöglichkeit. Die Integration lädt sich jetzt auf
   Tastendruck selbst von Gitea (aktualisierung.py), verifiziert das
   Manifest vor jedem Tausch und tauscht per os.rename mit automatischem
   Rollback bei Fehlern - install.ps1 bleibt nur noch für die
   Erstinstallation nötig. Zugangstoken über einen neuen OptionsFlow in
   entry.options, nie in configuration.yaml.

Nebenbei: mehrere seit der HACS-Ausschluss-Entscheidung liegen gebliebene
falsche HACS-Referenzen in Code-Kommentaren und einem UI-Text korrigiert.

Details, Sicherheitsbegründung und Verifikationsstand in AGENTS.md,
Abschnitte I und J.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-24 12:01:01 +02:00

260 lines
5.5 KiB
YAML

# Felder und Eingabehilfen für Entwicklerwerkzeuge -> Aktionen.
# Namen und Beschreibungen stehen in strings.json bzw. translations/, nicht
# hier - so steht jeder Text genau einmal.
#
# Beide Oberflächen rufen diese Dienste über die WebSocket- bzw. REST-API auf
# und brauchen diese Datei nicht. Sie ist dafür da, dass die Dienste in Home
# Assistant selbst bedienbar und nachvollziehbar sind - zum Nachschauen, zum
# Ausprobieren und für eigene Automationen des Nutzers.
jetzt_aktualisieren:
screening_jetzt:
backup_jetzt:
update_pruefen:
update_installieren:
profil_schreiben:
fields:
profil_json:
required: true
selector:
object:
entitaeten_schreiben:
fields:
zuordnung_json:
required: true
selector:
object:
fahrt_manuell_anlegen:
fields:
ts_start:
required: true
example: "2026-08-23T07:30:00+02:00"
selector:
text:
ts_end:
required: true
example: "2026-08-23T08:05:00+02:00"
selector:
text:
art:
selector:
select:
options: ["privat", "arbeitsweg"]
start_ort:
selector:
text:
ziel_ort:
selector:
text:
odo_start:
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
odo_end:
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
distanz:
selector:
number: { min: 0, max: 10000, step: 0.1, mode: box, unit_of_measurement: km }
fahrt_aktualisieren:
fields:
trip_id:
required: true
example: t-4f2a91c30b7e
selector:
text:
ts_start:
selector:
text:
ts_end:
selector:
text:
art:
selector:
select:
options: ["privat", "arbeitsweg"]
start_ort:
selector:
text:
ziel_ort:
selector:
text:
odo_start:
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
odo_end:
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
distanz:
selector:
number: { min: 0, max: 10000, step: 0.1, mode: box, unit_of_measurement: km }
fahrt_loeschen:
fields:
trip_id:
required: true
selector:
text:
beleg_hochladen:
fields:
pdf_base64:
required: true
selector:
text:
multiline: true
dateiname:
selector:
text:
tank_id:
selector:
text:
tankvorgang_manuell:
fields:
ts:
selector:
text:
liter:
selector:
number: { min: 0, max: 200, step: 0.01, mode: box, unit_of_measurement: L }
kosten:
selector:
number: { min: 0, max: 2000, step: 0.01, mode: box, unit_of_measurement: EUR }
km:
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
ersparnis:
selector:
number: { min: 0, max: 500, step: 0.01, mode: box, unit_of_measurement: EUR }
station:
selector:
text:
distanz:
selector:
number: { min: 0, max: 10000, step: 0.1, mode: box, unit_of_measurement: km }
kraftstoff:
selector:
text:
receipt_key:
selector:
text:
receipt_file:
selector:
text:
tankvorgang_aktualisieren:
fields:
tank_id:
required: true
selector:
text:
ts:
selector:
text:
liter:
selector:
number: { min: 0, max: 200, step: 0.01, mode: box, unit_of_measurement: L }
kosten:
selector:
number: { min: 0, max: 2000, step: 0.01, mode: box, unit_of_measurement: EUR }
km:
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
ersparnis:
selector:
number: { min: 0, max: 500, step: 0.01, mode: box, unit_of_measurement: EUR }
station:
selector:
text:
distanz:
selector:
number: { min: 0, max: 10000, step: 0.1, mode: box, unit_of_measurement: km }
kraftstoff:
selector:
text:
receipt_key:
selector:
text:
receipt_file:
selector:
text:
tankvorgang_loeschen:
fields:
tank_id:
required: true
selector:
text:
bild_hochladen:
fields:
dateiname:
required: true
example: seitenansicht.webp
selector:
text:
daten_base64:
required: true
selector:
text:
multiline: true
bild_loeschen:
fields:
dateiname:
required: true
selector:
text:
reifen_wechseln:
fields:
satz:
required: true
selector:
select:
options: ["sommer", "winter"]
reifen_km_setzen:
fields:
satz:
required: true
selector:
select:
options: ["sommer", "winter"]
km:
required: true
selector:
number: { min: 0, max: 2000000, step: 0.1, mode: box, unit_of_measurement: km }
backup_wiederherstellen:
fields:
profil_json:
selector:
object:
fahrten_json:
selector:
object:
tankvorgaenge_json:
selector:
object:
entitaeten_json:
selector:
object:
historie_importieren:
fields:
start:
required: true
example: "2026-01-01T00:00:00"
selector:
text:
ende:
required: true
example: "2026-08-23T00:00:00"
selector:
text: