TANK_DISTANZ_SENSOR + Datensatz sichern/laden mit echtem CSV-Import (Panel)
- Neuer optionaler Sensor TANK_DISTANZ_SENSOR ersetzt die eigene Kilometerstand-Subtraktion fuer die Tankvorgang-Strecke, wo zugeordnet (Live-Erkennung, manuelle Erfassung, historischer Import) - "Fahrzeugprofil" und "Daten ausgeben" zu einer Kachel zusammengelegt: "Datensatz sichern" (4 Exporte wie bisher) / "Datensatz laden" (neu: echter CSV-Import fuer Fahrten/Tankvorgaenge/Wartungsplan) - Import gleicht per ID ab (Fahrten/Tankvorgaenge) bzw. Datum+Art (Wartungsplan, hat keine eigene ID) und aktualisiert nur die in der CSV enthaltenen Spalten - alles andere am Datensatz bleibt unangetastet - Nebenbei gefunden und behoben: belege.tankvorgang_aktualisieren() ueberschrieb bisher immer alle Felder, auch mit None, wenn irgendeins geaendert wurde - fuer den CSV-Import gefaehrlich, jetzt nur noch tatsaechlich uebergebene Felder - Ebenfalls gefunden und behoben: Panel las das Import-Ergebnis per HASS.states direkt nach dem Dienstaufruf - ein Wettlauf mit dem state_changed-Push. Nutzt jetzt denselben HASS.callWS(get_states)-Weg wie der bestehende historie_importieren-Ablauf. companion-app-Portierung von "Datensatz sichern/laden" steht noch aus. Version 2026.8.28.3, live im Testcontainer verifiziert (alle drei CSV-Datensatztypen: anlegen + aktualisieren per ID/Datum+Art getestet, Testdaten danach geloescht). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,7 @@ from . import (
|
||||
batterie,
|
||||
belege,
|
||||
bilder,
|
||||
csv_import,
|
||||
fahrterkennung,
|
||||
historienimport,
|
||||
reifen,
|
||||
@@ -46,6 +47,7 @@ from .const import (
|
||||
D_BELEG_HOCHLADEN,
|
||||
D_BILD_HOCHLADEN,
|
||||
D_BILD_LOESCHEN,
|
||||
D_CSV_IMPORTIEREN,
|
||||
D_ENTITAETEN_SCHREIBEN,
|
||||
D_FAHRT_AKTUALISIEREN,
|
||||
D_FAHRT_LOESCHEN,
|
||||
@@ -165,6 +167,10 @@ SCHEMATA: dict[str, vol.Schema] = {
|
||||
vol.Required("start"): cv.string,
|
||||
vol.Required("ende"): cv.string,
|
||||
}),
|
||||
D_CSV_IMPORTIEREN: vol.Schema({
|
||||
vol.Required("art"): vol.In(["fahrten", "tanken", "service"]),
|
||||
vol.Required("inhalt"): cv.string,
|
||||
}),
|
||||
D_UPDATE_PRUEFEN: vol.Schema({}),
|
||||
D_UPDATE_INSTALLIEREN: vol.Schema({}),
|
||||
}
|
||||
@@ -243,6 +249,15 @@ def registrieren(hass: HomeAssistant, k: Koordinator) -> None:
|
||||
"audi_dashboard_historienimport",
|
||||
)
|
||||
|
||||
async def csv_importieren(aufruf: ServiceCall) -> None:
|
||||
"""Liest eine per "Datensatz laden" hochgeladene CSV-Datei ein (siehe
|
||||
csv_import.py). Läuft synchron statt im Hintergrund wie
|
||||
historie_importieren - eine einzelne CSV-Datei ist klein, der Aufruf
|
||||
kehrt erst zurück, wenn das Ergebnis auch wirklich in
|
||||
sensor.audi_dashboard_import_status steht, kein Abfragen nötig."""
|
||||
ergebnis = await csv_import.importieren(k, aufruf.data["art"], aufruf.data["inhalt"])
|
||||
await k.import_status_veroeffentlichen("csv_fertig", {"art": aufruf.data["art"], **ergebnis})
|
||||
|
||||
async def update_pruefen(_aufruf: ServiceCall) -> None:
|
||||
"""Fragt bei Gitea nach, ob eine neuere Fassung vorliegt - ohne
|
||||
etwas herunterzuladen. Läuft nur auf Tastendruck, siehe
|
||||
@@ -311,6 +326,7 @@ def registrieren(hass: HomeAssistant, k: Koordinator) -> None:
|
||||
D_PROFIL_SCHREIBEN: profil_schreiben,
|
||||
D_ENTITAETEN_SCHREIBEN: entitaeten_schreiben,
|
||||
D_HISTORIE_IMPORTIEREN: historie_importieren,
|
||||
D_CSV_IMPORTIEREN: csv_importieren,
|
||||
D_SCREENING_JETZT: _als_dienst(lambda _a: screening.durchfuehren(k)),
|
||||
D_FAHRT_MANUELL_ANLEGEN: _als_dienst(
|
||||
lambda a: fahrterkennung.manuell_anlegen(k, dict(a.data))
|
||||
|
||||
Reference in New Issue
Block a user