#!/usr/bin/env bash # Setzt die Wegwerf-Testinstanz auf. Mehrfach ausfuehrbar. # Siehe README.md im selben Ordner. set -euo pipefail HIER="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJEKT="$(dirname "$HIER")" NAME="audi_ha_test" PORT="18123" ZIEL="${AUDI_TEST_CONFIG:-${TMPDIR:-/tmp}/audi-ha-test-config}" BASIS="http://localhost:${PORT}" echo "==> Zielordner: $ZIEL" rm -rf "$ZIEL" mkdir -p "$ZIEL" echo "==> Alten Container entfernen (falls vorhanden)" docker rm -f "$NAME" >/dev/null 2>&1 || true echo "==> Image laden" docker pull ghcr.io/home-assistant/home-assistant:stable echo "==> Container starten" docker run -d --name "$NAME" -p "${PORT}:8123" -v "$ZIEL:/config" \ ghcr.io/home-assistant/home-assistant:stable >/dev/null echo "==> Auf Home Assistant warten" for _ in $(seq 1 60); do if [ "$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 "$BASIS/" || true)" != "000" ]; then break fi sleep 5 done echo "==> Nutzer anlegen und Token erzeugen" TOKEN="$(node "$HIER/einrichten.mjs" "$BASIS")" if [ -z "$TOKEN" ]; then echo "FEHLER: kein Token erhalten" >&2 exit 1 fi # Seit dem Umbau zur eigenen Integration (2026-08-23) faellt hier einiges weg, # was frueher noetig war: pyscript herunterladen und entpacken, das Backend # nach pyscript/ kopieren, die Oberflaeche nach www/ kopieren, ein # Fahrzeugprofil aus der Vorlage anlegen, den Belegleser ablegen und das # Zugriffstoken in eine Datei schreiben. Alles davon macht die Integration # jetzt selbst - hier bleibt ein einziger Kopiervorgang. echo "==> Integration einspielen" cp "$HIER/konfiguration.yaml" "$ZIEL/configuration.yaml" mkdir -p "$ZIEL/custom_components" cp -r "$PROJEKT/custom_components/audi_dashboard" "$ZIEL/custom_components/" find "$ZIEL/custom_components/audi_dashboard" -name __pycache__ -type d -exec rm -rf {} + 2>/dev/null || true echo "==> Neu starten" docker restart "$NAME" >/dev/null echo "==> Auf Home Assistant warten" for _ in $(seq 1 60); do if [ "$(curl -s -o /dev/null -w '%{http_code}' --max-time 3 \ -H "Authorization: Bearer $TOKEN" "$BASIS/api/" || true)" = "200" ]; then break fi sleep 5 done # Der Konfigurationseintrag entsteht sonst nur ueber die Oberflaeche. Der # Ablauf hat keine Eingabefelder, deshalb genuegen zwei Aufrufe: Ablauf # starten, Ablauf mit leerem Formular bestaetigen. echo "==> Integration hinzufuegen" FLOW="$(curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{"handler":"audi_dashboard","show_advanced_options":false}' \ "$BASIS/api/config/config_entries/flow" | sed 's/.*"flow_id":"\([^"]*\)".*/\1/')" if [ -z "$FLOW" ]; then echo "FEHLER: Konfigurationsablauf liess sich nicht starten" >&2 exit 1 fi curl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{}' "$BASIS/api/config/config_entries/flow/$FLOW" >/dev/null echo "==> Pruefen, ob die Entitaeten da sind" ANZAHL="$(curl -s -H "Authorization: Bearer $TOKEN" "$BASIS/api/states" \ | tr ',' '\n' | grep -c '"entity_id":"sensor.audi_dashboard' || true)" echo " $ANZAHL Entitaeten sensor.audi_dashboard_*" echo "==> Token nach companion-app/.env.local schreiben" printf 'VITE_TEST_URL=%s\nVITE_TEST_TOKEN=%s\n' "$BASIS" "$TOKEN" \ > "$PROJEKT/companion-app/.env.local" echo echo "Fertig. $BASIS · Benutzer test · Passwort testtest123" echo "Token liegt in companion-app/.env.local (gitignored)." echo "Sensoren zuordnen: in der App unter Einstellungen -> Fahrzeug einrichten -> Setup."