6ec31b5275
_letztes_lebenszeichen() fiel auf "jetzt" zurueck, sobald verlauf_lesen() eine leere Liste lieferte - und die bedeutet sowohl "nichts aufgezeichnet" als auch "nicht lesbar". Am 03.09. trat der zweite Fall ein: der Knopf traf einen Neustart, der recorder war noch nicht bereit, die Abfrage lief 2:47 und kam leer zurueck. Die Fahrt bekam 18:43 statt 17:59 als Ende, 74 Minuten statt 30. Drei Quellen in fester Reihenfolge statt einer: Aufzeichnung, dann hass.states (last_reported/last_updated - weiss dasselbe ohne Datenbank), dann "jetzt", und das nur noch mit Warnung. Vier Regressionstests, drei davon gegen den alten Stand nachweislich rot. Dazu aus der Bestandspruefung: odometer_km liegt in drei alten Tankvorgaengen als Zeichenkette vor, ablage.distanz_seit_letzter_tankung() rechnete damit float - str. Laeuft jetzt durch als_kilometerstand(). Der Eingang war schon zu; das ist Altbestand. Und acht Dienste hatten keinen Klarnamen in translations/de.json - jetzt 28 Dienste, 28 Klarnamen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
397 lines
13 KiB
JSON
397 lines
13 KiB
JSON
{
|
|
"config": {
|
|
"step": {
|
|
"user": {
|
|
"title": "Audi Dashboard",
|
|
"description": "Richtet das Panel \"Mein Audi\" ein. Welcher Sensor welche Rolle im Fahrzeug spielt, wird danach im Setup-Menü der App selbst zugeordnet (Einstellungen → Fahrzeug einrichten → Setup)."
|
|
}
|
|
},
|
|
"abort": {
|
|
"single_instance_allowed": "Audi Dashboard ist bereits eingerichtet."
|
|
}
|
|
},
|
|
"options": {
|
|
"step": {
|
|
"init": {
|
|
"title": "Selbst-Update",
|
|
"description": "Zugriffstoken für gitea.nothaft.cloud, damit die Integration ihre eigene neueste Fassung laden und sich selbst ersetzen kann - ersetzt install.ps1, das Windows Smart App Control zuverlässig blockiert. Ein Token mit reinem Lesezugriff auf das Repository genügt. Leer lassen deaktiviert die Update-Prüfung.",
|
|
"data": {
|
|
"gitea_token": "Gitea-Zugriffstoken"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"services": {
|
|
"jetzt_aktualisieren": {
|
|
"name": "Jetzt aktualisieren",
|
|
"description": "Stößt eine sofortige Neuabfrage beim Fahrzeug an und veröffentlicht den Fahrzeugstatus neu."
|
|
},
|
|
"screening_jetzt": {
|
|
"name": "Screening jetzt",
|
|
"description": "Versucht sofort, offene Fahrten mit Start- und Endkilometerstand zu vervollständigen."
|
|
},
|
|
"backup_jetzt": {
|
|
"name": "Sicherung jetzt",
|
|
"description": "Legt sofort eine Sicherung von Profil, Fahrten, Tankvorgängen und Sensor-Zuordnung an."
|
|
},
|
|
"profil_schreiben": {
|
|
"name": "Profil schreiben",
|
|
"description": "Überschreibt das komplette Fahrzeugprofil.",
|
|
"fields": {
|
|
"profil_json": {
|
|
"name": "Profil",
|
|
"description": "Das vollständige Fahrzeugprofil als JSON."
|
|
}
|
|
}
|
|
},
|
|
"entitaeten_schreiben": {
|
|
"name": "Sensor-Zuordnung schreiben",
|
|
"description": "Speichert die Zuordnung von Home-Assistant-Entitäten zu den Rollen der App und wendet sie sofort an.",
|
|
"fields": {
|
|
"zuordnung_json": {
|
|
"name": "Zuordnung",
|
|
"description": "Feldname zu Entity-ID als JSON."
|
|
}
|
|
}
|
|
},
|
|
"fahrt_manuell_anlegen": {
|
|
"name": "Fahrt anlegen",
|
|
"description": "Legt eine Fahrt von Hand an, unabhängig von der automatischen Zündungs-Erkennung.",
|
|
"fields": {
|
|
"ts_start": {
|
|
"name": "Beginn",
|
|
"description": "Zeitpunkt des Fahrtbeginns (ISO)."
|
|
},
|
|
"ts_end": {
|
|
"name": "Ende",
|
|
"description": "Zeitpunkt des Fahrtendes (ISO)."
|
|
},
|
|
"art": {
|
|
"name": "Art",
|
|
"description": "privat oder arbeitsweg."
|
|
},
|
|
"start_ort": {
|
|
"name": "Startort",
|
|
"description": "Freitext."
|
|
},
|
|
"ziel_ort": {
|
|
"name": "Zielort",
|
|
"description": "Freitext."
|
|
},
|
|
"odo_start": {
|
|
"name": "Kilometerstand bei Beginn",
|
|
"description": "Leer lassen, wenn das Screening ihn ergänzen soll."
|
|
},
|
|
"odo_end": {
|
|
"name": "Kilometerstand bei Ende",
|
|
"description": "Leer lassen, wenn das Screening ihn ergänzen soll."
|
|
},
|
|
"distanz": {
|
|
"name": "Strecke",
|
|
"description": "Nur nötig, wenn keine Kilometerstände vorliegen."
|
|
}
|
|
}
|
|
},
|
|
"fahrt_aktualisieren": {
|
|
"name": "Fahrt bearbeiten",
|
|
"description": "Ändert eine bestehende Fahrt.",
|
|
"fields": {
|
|
"trip_id": {
|
|
"name": "Fahrt",
|
|
"description": "trip_id der Fahrt."
|
|
},
|
|
"ts_start": {
|
|
"name": "Beginn",
|
|
"description": "Zeitpunkt des Fahrtbeginns (ISO)."
|
|
},
|
|
"ts_end": {
|
|
"name": "Ende",
|
|
"description": "Zeitpunkt des Fahrtendes (ISO)."
|
|
},
|
|
"art": {
|
|
"name": "Art",
|
|
"description": "privat oder arbeitsweg."
|
|
},
|
|
"start_ort": {
|
|
"name": "Startort",
|
|
"description": "Freitext."
|
|
},
|
|
"ziel_ort": {
|
|
"name": "Zielort",
|
|
"description": "Freitext."
|
|
},
|
|
"odo_start": {
|
|
"name": "Kilometerstand bei Beginn",
|
|
"description": "Von Hand gesetzt, wird vom Screening nicht mehr überschrieben."
|
|
},
|
|
"odo_end": {
|
|
"name": "Kilometerstand bei Ende",
|
|
"description": "Von Hand gesetzt, wird vom Screening nicht mehr überschrieben."
|
|
},
|
|
"distanz": {
|
|
"name": "Strecke",
|
|
"description": "Von Hand gesetzt."
|
|
}
|
|
}
|
|
},
|
|
"fahrt_loeschen": {
|
|
"name": "Fahrt löschen",
|
|
"description": "Löscht eine Fahrt unwiderruflich.",
|
|
"fields": {
|
|
"trip_id": {
|
|
"name": "Fahrt",
|
|
"description": "trip_id der Fahrt."
|
|
}
|
|
}
|
|
},
|
|
"beleg_hochladen": {
|
|
"name": "Beleg hochladen",
|
|
"description": "Liest einen Tankbeleg (PDF) und trägt ihn in einen bestehenden Tankvorgang nach oder gibt die Werte an die Oberfläche zurück.",
|
|
"fields": {
|
|
"pdf_base64": {
|
|
"name": "PDF",
|
|
"description": "Der Beleg als Base64."
|
|
},
|
|
"dateiname": {
|
|
"name": "Dateiname",
|
|
"description": "Unter diesem Namen wird der Beleg abgelegt."
|
|
},
|
|
"tank_id": {
|
|
"name": "Tankvorgang",
|
|
"description": "Leer lassen, um nur zu lesen, ohne etwas zu speichern."
|
|
}
|
|
}
|
|
},
|
|
"tankvorgang_manuell": {
|
|
"name": "Tankvorgang anlegen",
|
|
"description": "Erfasst einen Tankvorgang von Hand.",
|
|
"fields": {
|
|
"ts": {
|
|
"name": "Zeitpunkt",
|
|
"description": "ISO-Zeitstempel; leer = jetzt."
|
|
},
|
|
"liter": {
|
|
"name": "Liter",
|
|
"description": "Getankte Menge."
|
|
},
|
|
"kosten": {
|
|
"name": "Betrag",
|
|
"description": "Der real bezahlte, bereits rabattierte Betrag."
|
|
},
|
|
"km": {
|
|
"name": "Kilometerstand",
|
|
"description": "Leer = aus dem zugeordneten Sensor."
|
|
},
|
|
"ersparnis": {
|
|
"name": "Ersparnis",
|
|
"description": "Rabatt in Euro."
|
|
},
|
|
"station": {
|
|
"name": "Station",
|
|
"description": "Name der Tankstelle."
|
|
},
|
|
"distanz": {
|
|
"name": "Gefahrene Strecke",
|
|
"description": "Leer = aus der Differenz zum letzten Tankvorgang."
|
|
},
|
|
"kraftstoff": {
|
|
"name": "Kraftstoff",
|
|
"description": "Sorte."
|
|
},
|
|
"receipt_key": {
|
|
"name": "Beleg-Schlüssel",
|
|
"description": "Aus einem zuvor gelesenen Beleg."
|
|
},
|
|
"receipt_file": {
|
|
"name": "Belegdatei",
|
|
"description": "Pfad zur abgelegten PDF."
|
|
}
|
|
}
|
|
},
|
|
"tankvorgang_aktualisieren": {
|
|
"name": "Tankvorgang bearbeiten",
|
|
"description": "Ändert einen bestehenden Tankvorgang.",
|
|
"fields": {
|
|
"tank_id": {
|
|
"name": "Tankvorgang",
|
|
"description": "tank_id des Vorgangs."
|
|
},
|
|
"ts": {
|
|
"name": "Zeitpunkt",
|
|
"description": "ISO-Zeitstempel."
|
|
},
|
|
"liter": {
|
|
"name": "Liter",
|
|
"description": "Getankte Menge."
|
|
},
|
|
"kosten": {
|
|
"name": "Betrag",
|
|
"description": "Der real bezahlte, bereits rabattierte Betrag."
|
|
},
|
|
"km": {
|
|
"name": "Kilometerstand",
|
|
"description": "Kilometerstand beim Tanken."
|
|
},
|
|
"ersparnis": {
|
|
"name": "Ersparnis",
|
|
"description": "Rabatt in Euro."
|
|
},
|
|
"station": {
|
|
"name": "Station",
|
|
"description": "Name der Tankstelle."
|
|
},
|
|
"distanz": {
|
|
"name": "Gefahrene Strecke",
|
|
"description": "Seit dem letzten Tankvorgang."
|
|
},
|
|
"kraftstoff": {
|
|
"name": "Kraftstoff",
|
|
"description": "Sorte."
|
|
},
|
|
"receipt_key": {
|
|
"name": "Beleg-Schlüssel",
|
|
"description": "Aus einem zuvor gelesenen Beleg."
|
|
},
|
|
"receipt_file": {
|
|
"name": "Belegdatei",
|
|
"description": "Pfad zur abgelegten PDF."
|
|
}
|
|
}
|
|
},
|
|
"tankvorgang_loeschen": {
|
|
"name": "Tankvorgang löschen",
|
|
"description": "Löscht einen Tankvorgang unwiderruflich.",
|
|
"fields": {
|
|
"tank_id": {
|
|
"name": "Tankvorgang",
|
|
"description": "tank_id des Vorgangs."
|
|
}
|
|
}
|
|
},
|
|
"bild_hochladen": {
|
|
"name": "Fahrzeugbild hochladen",
|
|
"description": "Legt ein Fahrzeugfoto unter einem der erwarteten Namen ab.",
|
|
"fields": {
|
|
"dateiname": {
|
|
"name": "Dateiname",
|
|
"description": "Einer der von der App erwarteten Namen."
|
|
},
|
|
"daten_base64": {
|
|
"name": "Bild",
|
|
"description": "Die Bilddaten als Base64."
|
|
}
|
|
}
|
|
},
|
|
"bild_loeschen": {
|
|
"name": "Fahrzeugbild löschen",
|
|
"description": "Entfernt ein zuvor hochgeladenes Fahrzeugfoto.",
|
|
"fields": {
|
|
"dateiname": {
|
|
"name": "Dateiname",
|
|
"description": "Einer der von der App erwarteten Namen."
|
|
}
|
|
}
|
|
},
|
|
"reifen_wechseln": {
|
|
"name": "Reifensatz wechseln",
|
|
"description": "Schaltet den aktiven Reifensatz um.",
|
|
"fields": {
|
|
"satz": {
|
|
"name": "Satz",
|
|
"description": "sommer oder winter."
|
|
}
|
|
}
|
|
},
|
|
"reifen_km_setzen": {
|
|
"name": "Reifen-Kilometerstand setzen",
|
|
"description": "Korrigiert den gezählten Kilometerstand eines Reifensatzes von Hand.",
|
|
"fields": {
|
|
"satz": {
|
|
"name": "Satz",
|
|
"description": "sommer oder winter."
|
|
},
|
|
"km": {
|
|
"name": "Kilometer",
|
|
"description": "Der neue Zählerstand."
|
|
}
|
|
}
|
|
},
|
|
"backup_wiederherstellen": {
|
|
"name": "Sicherung wiederherstellen",
|
|
"description": "Überschreibt Profil, Fahrten, Tankvorgänge und Sensor-Zuordnung mit einer zuvor exportierten Sicherung.",
|
|
"fields": {
|
|
"profil_json": {
|
|
"name": "Profil",
|
|
"description": "Fahrzeugprofil als JSON."
|
|
},
|
|
"fahrten_json": {
|
|
"name": "Fahrten",
|
|
"description": "Fahrten als JSON-Liste."
|
|
},
|
|
"tankvorgaenge_json": {
|
|
"name": "Tankvorgänge",
|
|
"description": "Tankvorgänge als JSON-Liste."
|
|
},
|
|
"entitaeten_json": {
|
|
"name": "Sensor-Zuordnung",
|
|
"description": "Optional; fehlt sie, bleibt die aktuelle Zuordnung unangetastet."
|
|
}
|
|
}
|
|
},
|
|
"historie_importieren": {
|
|
"name": "Daten aus dem Verlauf importieren",
|
|
"description": "Leitet Fahrten, Tankvorgänge und Batteriewerte rückwirkend aus dem aufgezeichneten Verlauf ab.",
|
|
"fields": {
|
|
"start": {
|
|
"name": "Von",
|
|
"description": "Beginn des Zeitraums (ISO, Ortszeit erlaubt)."
|
|
},
|
|
"ende": {
|
|
"name": "Bis",
|
|
"description": "Ende des Zeitraums (ISO, Ortszeit erlaubt)."
|
|
}
|
|
}
|
|
},
|
|
"update_pruefen": {
|
|
"name": "Auf Update prüfen",
|
|
"description": "Fragt bei Gitea die neueste manifest.json ab und vergleicht die Version - lädt dabei noch nichts herunter."
|
|
},
|
|
"update_installieren": {
|
|
"name": "Update installieren",
|
|
"description": "Lädt die neueste Fassung von Gitea und ersetzt den Integrationsordner. Home Assistant muss danach neu gestartet werden."
|
|
},
|
|
"fahrt_jetzt_beenden": {
|
|
"name": "Fahrt jetzt beenden",
|
|
"description": "Schließt die laufende Fahrt auf das letzte Lebenszeichen des Fahrzeugs. Das Ende gilt als vorläufig und wird nachgezogen, wenn das Zündungs-Aus des Geräts später eintrifft."
|
|
},
|
|
"zugang_setzen": {
|
|
"name": "Zugang setzen",
|
|
"description": "Trägt den Token eines Dienstes ein oder löscht ihn (leerer Text löscht). Der Wert wird nie wieder ausgegeben."
|
|
},
|
|
"dongle_lesen": {
|
|
"name": "Dongle-Konfiguration lesen",
|
|
"description": "Liest die Einstellungen des FMM003 über flespi und schreibt dabei eine noch offene Änderung mit."
|
|
},
|
|
"csv_importieren": {
|
|
"name": "CSV importieren",
|
|
"description": "Liest eine bearbeitete CSV zurück ein. Vorhandene Datensätze werden über ihre ID abgeglichen, nur die Spalten der Datei werden angefasst."
|
|
},
|
|
"batterieverlauf_loeschen": {
|
|
"name": "Batterie-Messwert löschen",
|
|
"description": "Entfernt den Tageseintrag des angegebenen Datums aus dem Spannungsverlauf."
|
|
},
|
|
"reifen_archivieren": {
|
|
"name": "Räder archivieren",
|
|
"description": "Legt den aktuellen Radsatz ins Archiv und setzt den laufenden Eintrag zurück - für neue Räder."
|
|
},
|
|
"reifen_archiv_aktualisieren": {
|
|
"name": "Archivierte Räder bearbeiten",
|
|
"description": "Ändert einen Eintrag im Räder-Archiv."
|
|
},
|
|
"reifen_archiv_loeschen": {
|
|
"name": "Archivierte Räder löschen",
|
|
"description": "Entfernt einen Eintrag aus dem Räder-Archiv."
|
|
}
|
|
}
|
|
}
|