e1180f8e34
Frontend, kleinere Befunde: - Das Standort-Menue liess sich nur wischen oder ueber den Kartenmarker oeffnen. Der Griff ist jetzt ein Knopf mit aria-expanded, damit auch per Tastatur erreichbar; der Umschalter Strasse/Satellit hat aria-pressed und ein Label, das den Zustand nennt. - Der Filterschalter "Nur passende Sensoren anzeigen" wirkte nicht, solange eine Auswahlliste offen war: der Klick-Handler ersetzte das Overlay-DOM, bevor das change-Ereignis des Kontrollkaestchens ausgeliefert wurde. Er wird jetzt vor dem Schliessen der Liste behandelt. - Der Theme-Wechsel zeichnete nicht neu, die Leaflet-Kacheln blieben bis zum naechsten Backend-Update im alten Stil - seit der Dauerkarte auf der Uebersicht deutlich sichtbar. - Toter Code entfernt (fahrzeugGlyphPfade, .dot.neutral) und zwei Kommentare berichtigt, die Gegenteiliges behaupteten. Dokumentation: - AGENTS.md widersprach sich an sechs Stellen. Berichtigt: Fahrterkennung laeuft ueber die Zuendung, nicht ueber WLAN; Datenweg ist flespi, nicht MQTT; Modulzahl und Zeilenzahl stimmen wieder; Entity-IDs werden im Setup-Menue zugeordnet, nicht in einstellungen.py; STANDORT_TRACKER ist belegt, nicht leer. - SPECIFICATION.md beschreibt durchgehend den Stand vor der FMM003- Umstellung. Statt es zu Teilen umzuschreiben und dabei Ungenauigkeiten zu riskieren, steht jetzt ein datierter Hinweis am Anfang, der die drei geaenderten Punkte benennt und auf AGENTS.md verweist. Alles Uebrige des Dokuments gilt unveraendert weiter. - INSTALL.md: Die zirkulaere Schrittfolge (Schritt 4 verweist auf 9, Schritt 7 auf 4) ist als solche benannt und aufgeloest. Die Override-Datei ist mit Pfad genannt, samt dem Hinweis, dass sie gesichert wird. Und die drei mit Test-Entitaeten der Entwicklungsinstanz vorbelegten Rollen sind erwaehnt - auf einer frischen Installation zeigen sie ins Leere. - README, Profilvorlage: WLAN-Reste entfernt, zwei Falschaussagen aus dem ersten Review nachgezogen (Statistik rechnet echt, die 97-Prozent-Volltankungsregel wurde entfernt), Dateiuebersicht um die fuenf fehlenden pyscript-Dateien und entitaeten.py ergaenzt. - update.ps1 liefert jetzt auch shell_beleg_parser.py aus. Die Datei liegt in data/, ist aber Code - Aenderungen am Belegleser, dem einzigen getesteten Teil des Projekts, kamen bisher auf keiner Instanz an. - design/README: Zwei Dateien der Inhaltstabelle liegen gar nicht in dem Ordner, weshalb das Board aus der Repo-Kopie heraus leer bleibt - jetzt vermerkt. Ausserdem die Behauptung berichtigt, die Auflage ruehre audi-dashboard-app.js nicht an: der Stylesheet-Loader wurde dort ergaenzt. Geprueft: Panel laedt, alle neun pyscript-Entitaeten werden veroeffentlicht, Zuordnen und Zuruecksetzen funktionieren, keine neuen Fehler im Protokoll.
91 lines
4.2 KiB
PowerShell
91 lines
4.2 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Spielt Code-Updates (pyscript + Frontend) in eine laufende Home-Assistant-
|
|
Installation ein, ohne Neustart und ohne Cache-Probleme im Browser.
|
|
|
|
.BESCHREIBUNG
|
|
Kopiert nur Code, nie Daten:
|
|
- pyscript/* -> <Ziel>/pyscript/ (pyscript lädt das automatisch neu,
|
|
siehe Kopfkommentar dort - an
|
|
einer Testinstanz bestätigt: eine
|
|
geänderte Datei war innerhalb von
|
|
Millisekunden aktiv, ganz ohne
|
|
Neustart)
|
|
- www/*.js, www/*.css, www/badges/*, www/bilder/* -> <Ziel>/www/
|
|
(audi-dashboard-ios.css nicht vergessen: die App hängt sich dieses
|
|
Overlay-Stylesheet selbst per JS in den Shadow-Root - ohne es fehlt
|
|
nur der optische Feinschliff, kein Fehler, aber ein veralteter Stand)
|
|
- www/audi-dashboard-version.json wird IMMER neu geschrieben, mit der
|
|
aktuellen Uhrzeit als Versionsnummer - der Lade-Stub
|
|
(audi-dashboard-panel.js) liest diese Datei bei jedem Seitenaufruf
|
|
ohne Cache und lädt den eigentlichen Code darüber immer frisch nach
|
|
(siehe Kopfkommentar in www/audi-dashboard-panel.js).
|
|
|
|
Absichtlich NICHT kopiert: die Datenbestände in data/ - das würde ein
|
|
bereits laufendes Fahrzeugprofil, die Fahrten- und Tankvorgänge-Archive
|
|
sowie die Sensor-Zuordnung überschreiben. Diese Dateien sind nur die
|
|
Erstbefüllung für die einmalige Installation (siehe INSTALL.md Schritt 2).
|
|
|
|
Eine Ausnahme davon ist shell_beleg_parser.py: die Datei liegt zwar in
|
|
data/, ist aber Code, kein Datenbestand - belegverarbeitung.py ruft sie
|
|
als Unterprozess aus /config/audi_dashboard/ auf. Ohne diese Ausnahme
|
|
käme jede Änderung am Belegleser (dem einzigen getesteten Teil des
|
|
Projekts) auf keiner Instanz an.
|
|
|
|
.PARAMETER Ziel
|
|
Pfad zum config-Verzeichnis von Home Assistant, z. B. ein per Samba
|
|
eingebundenes Laufwerk (\\<HA-IP>\config) oder ein lokal gemounteter Pfad.
|
|
|
|
.BEISPIEL
|
|
.\update.ps1 -Ziel "\\homeassistant.local\config"
|
|
#>
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Ziel
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$hier = $PSScriptRoot
|
|
|
|
if (-not (Test-Path $Ziel)) {
|
|
throw "Ziel nicht erreichbar: $Ziel — Samba-Share verbunden? Pfad korrekt?"
|
|
}
|
|
|
|
Write-Host "Kopiere pyscript/ ..." -ForegroundColor Cyan
|
|
robocopy "$hier\pyscript" "$Ziel\pyscript" /MIR /NFL /NDL /NJH /NJS | Out-Null
|
|
|
|
Write-Host "Kopiere www/ (ohne bilder/ und badges/, die separat behandelt werden) ..." -ForegroundColor Cyan
|
|
New-Item -ItemType Directory -Force -Path "$Ziel\www" | Out-Null
|
|
Copy-Item "$hier\www\audi-dashboard-app.js" "$Ziel\www\audi-dashboard-app.js" -Force
|
|
Copy-Item "$hier\www\audi-dashboard-panel.js" "$Ziel\www\audi-dashboard-panel.js" -Force
|
|
Copy-Item "$hier\www\audi-dashboard.css" "$Ziel\www\audi-dashboard.css" -Force
|
|
Copy-Item "$hier\www\audi-dashboard-ios.css" "$Ziel\www\audi-dashboard-ios.css" -Force
|
|
|
|
# Code, der in data/ liegt (siehe Kopfkommentar) - der Ordner selbst wird
|
|
# bewusst nicht gespiegelt, diese eine Datei aber schon.
|
|
if (Test-Path "$Ziel\audi_dashboard") {
|
|
Copy-Item "$hier\data\shell_beleg_parser.py" "$Ziel\audi_dashboard\shell_beleg_parser.py" -Force
|
|
Write-Host " Belegleser aktualisiert"
|
|
}
|
|
|
|
if (Test-Path "$hier\www\bilder") {
|
|
Write-Host "Kopiere www/bilder/ ..." -ForegroundColor Cyan
|
|
New-Item -ItemType Directory -Force -Path "$Ziel\www\bilder" | Out-Null
|
|
Copy-Item "$hier\www\bilder\*" "$Ziel\www\bilder\" -Force -Recurse
|
|
}
|
|
|
|
if (Test-Path "$hier\www\badges") {
|
|
Write-Host "Kopiere www/badges/ ..." -ForegroundColor Cyan
|
|
New-Item -ItemType Directory -Force -Path "$Ziel\www\badges" | Out-Null
|
|
Copy-Item "$hier\www\badges\*" "$Ziel\www\badges\" -Force -Recurse
|
|
}
|
|
|
|
$version = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
|
|
"{ ""version"": $version }" | Out-File -FilePath "$Ziel\www\audi-dashboard-version.json" -Encoding utf8 -NoNewline
|
|
|
|
Write-Host ""
|
|
Write-Host "Fertig. Version $version." -ForegroundColor Green
|
|
Write-Host "pyscript-Änderungen sind bereits aktiv (Auto-Reload, kein Neustart nötig)."
|
|
Write-Host "Frontend-Änderungen: im Browser einmal ganz normal neu laden (F5) reicht -"
|
|
Write-Host "kein Hard-Refresh, kein HA-Neustart."
|