#!/usr/bin/env bash # # TP25 — eine komplette Runde. Ein Befehl, ohne Claude. # # bash docs/tp25-runde.sh # Verzeichnis wird nach Datum/Uhrzeit benannt # bash docs/tp25-runde.sh ap2-hoehe # eigener Name # # Startet die Klick-Konsole (Port 3031) und die Messung, sagt die Adresse fuer das Telefon # an und raeumt beim Beenden auf. Zum Beenden: Ctrl-C in diesem Fenster. # # 🔴 Der Grund fuer dieses Skript: die beiden Einzelteile hatten als Standard-Laufverzeichnis # einen Pfad in ein Sitzungs-Scratchpad. Wer sie ohne die passende Umgebungsvariable # startete, mass in ein totes Verzeichnis -- und merkte es erst bei der Auswertung. # Hier wird das Verzeichnis EINMAL bestimmt und an beide durchgereicht. set -uo pipefail HERE="$(cd "$(dirname "$0")/.." && pwd)" cd "$HERE" NAME="${1:-$(date +%Y%m%d-%H%M)}" export TP6_RUN_DIR="$HERE/docs/messdaten/tp25-runde-$NAME" # N-Geraete-Liste (name|ip|mac;...). Default = die bisherigen zwei, damit alte Aufrufe # unveraendert weiterlaufen. Wird an tp25-walk-messung.sh durchgereicht. export TP25_PHONES="${TP25_PHONES:-iphone|10.40.10.196|F2:62:4C:E1:AF:09;s22|10.40.10.178|2A:0D:B0:5D:AD:A7}" mkdir -p "$TP6_RUN_DIR" # Konsole: nur starten, wenn der Port frei ist -- eine zweite Instanz wuerde sofort sterben # und die Marker der ersten waeren weg. KONSOLE="" if lsof -nP -iTCP:3031 -sTCP:LISTEN >/dev/null 2>&1; then echo "Konsole laeuft bereits auf 3031 -- wird weiterverwendet." else python3 docs/tp6-marker/server.py > "$TP6_RUN_DIR/konsole.log" 2>&1 & KONSOLE=$! sleep 2 fi echo echo "════════════════════════════════════════════════════════════" echo " Konsole am Telefon oeffnen:" # 🔴 Adresse vom Interface lesen, nicht hartkodieren (Fehler vom 2026-08-22: die angesagte # IP gehoerte einem Geraet, das seit 22 h nicht mehr im Netz war). ifconfig | awk '/^[a-z0-9]+:/{i=substr($1,1,length($1)-1)} /inet /{if ($2 !~ /^127\.|^169\.254\./) printf " http://%s:3031/ (%s)\n", $2, i}' echo echo " 1) Auf dem Telefon einmal irgendwo tippen -> schaltet den Signalton frei" echo " 2) In der Konsole pinnen (Multi-Pin) -> je Client AP/Band waehlen, 'Pin setzen'" echo " 3) Losgehen. Raum antippen, weiter -> Alarm = gepinnter Client haengt nirgends" echo echo " Lauf: $TP6_RUN_DIR" echo "════════════════════════════════════════════════════════════" echo aufraeumen() { echo echo "Runde beendet. Aufraeumen …" # 🔴 REIHENFOLGE: erst die Konsole toeten, dann den Pin loesen. Die Konsole pinnt nicht # mehr automatisch (die alte Gegen-AP-Automatik ist mit dem Multi-Pin-Umbau 2026-09-04 # entfallen), aber sie haelt ggf. noch SSH-Sitzungen zum Manager offen -- die erst # beenden, bevor der Pin geloest wird. [[ -n "$KONSOLE" ]] && kill "$KONSOLE" 2>/dev/null && echo " Konsole beendet." # Muster bewusst ohne -e/-p: es gab beide Varianten, und die enge Fassung liess den # Sampler stehen. pkill -f 'sshpass.*10.40.99.1' 2>/dev/null pkill -f 'tp6-monitor-core.sh' 2>/dev/null sleep 1 bash docs/tp25-pin-multi.sh off >/dev/null 2>&1 && echo " Multi-Pin geloest." echo echo "Auswertung:" echo " python3 docs/tp25-gehweg-auswertung.py --dir $TP6_RUN_DIR" } trap aufraeumen EXIT bash docs/tp25-walk-messung.sh