Files
audi-app/testumgebung/aufsetzen.sh
T
Paul Nothaft 982bb04c1a Phase 1: reproduzierbare HA-Testumgebung als Skript
Die urspruengliche Wegwerf-Testinstanz war verloren, weil sie nur als
Anleitung existierte. testumgebung/aufsetzen.sh baut sie jetzt vollstaendig
neu auf: Container, Nutzer, langlebiges Token, pyscript als Custom Component,
Projektdateien und nachgebildete Fahrzeugsensoren als Template-Entitaeten,
die ueber Helfer zur Laufzeit steuerbar sind.

Verifiziert: pyscript veroeffentlicht alle acht Entitaeten, Fahrzeugsensoren
liefern Werte, beide Smoke-Tests gruen.
2026-08-11 10:44:50 +02:00

85 lines
2.7 KiB
Bash
Executable File

#!/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
echo "==> pyscript installieren"
VERSION="$(curl -s https://api.github.com/repos/custom-components/pyscript/releases/latest \
| grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4)"
TMPDL="$(mktemp -d)"
curl -sL -o "$TMPDL/pyscript.zip" \
"https://github.com/custom-components/pyscript/archive/refs/tags/${VERSION}.zip"
unzip -oq "$TMPDL/pyscript.zip" -d "$TMPDL"
mkdir -p "$ZIEL/custom_components"
cp -r "$TMPDL/pyscript-${VERSION}/custom_components/pyscript" "$ZIEL/custom_components/"
rm -rf "$TMPDL"
echo " pyscript $VERSION"
echo "==> Projektdateien einspielen"
cp "$HIER/konfiguration.yaml" "$ZIEL/configuration.yaml"
cp -r "$PROJEKT/homeassistant/pyscript" "$ZIEL/pyscript"
mkdir -p "$ZIEL/www" "$ZIEL/audi_dashboard"
cp -r "$PROJEKT/homeassistant/www/." "$ZIEL/www/"
cp "$PROJEKT/homeassistant/data/fahrzeugprofil.example.json" \
"$ZIEL/audi_dashboard/fahrzeugprofil.json"
cp "$PROJEKT/homeassistant/data/shell_beleg_parser.py" "$ZIEL/audi_dashboard/"
: > "$ZIEL/audi_dashboard/fahrten.jsonl"
: > "$ZIEL/audi_dashboard/tankvorgaenge.jsonl"
printf '%s' "$TOKEN" > "$ZIEL/audi_dashboard/ha_token.txt"
echo "==> Neu starten"
docker restart "$NAME" >/dev/null
echo "==> Auf Backend 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
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)."