85 lines
4.0 KiB
Bash
Executable File
85 lines
4.0 KiB
Bash
Executable File
#!/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"
|
|
export TP25_PHONE_IP="${TP25_PHONE_IP:-10.40.10.178}" # S22 -- wird gepingt
|
|
export TP25_PHONE_MAC="${TP25_PHONE_MAC:-2A:0D:B0:5D:AD:A7}"
|
|
export TP25_IPHONE_MAC="${TP25_IPHONE_MAC:-F2:62:4C:E1:AF:09}"
|
|
|
|
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
|
|
|
|
# 🔴 Gegen-AP-Automatik gleich einschalten. Sie war bisher ein Klick auf der Konsole -- und
|
|
# wer ihn vergisst, geht die ganze Runde mit beiden Telefonen auf DEMSELBEN AP und merkt
|
|
# es erst bei der Auswertung (im Test am 2026-08-22 genau so passiert). Abschalten geht
|
|
# weiter jederzeit ueber den Knopf.
|
|
curl -s -X POST --max-time 10 "http://127.0.0.1:3031/auto?an=1" >/dev/null 2>&1 \
|
|
&& echo "Gegen-AP-Automatik: EIN" \
|
|
|| echo "⚠️ Automatik konnte nicht eingeschaltet werden -- auf der Konsole nachholen!"
|
|
|
|
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) Gegen-AP-Automatik laeuft bereits -> S22 folgt dem iPhone spiegelverkehrt"
|
|
echo " 3) Losgehen. Doppelton = beide angemeldet -> Raum antippen, weiter"
|
|
echo
|
|
echo " Lauf: $TP6_RUN_DIR"
|
|
echo "════════════════════════════════════════════════════════════"
|
|
echo
|
|
|
|
aufraeumen() {
|
|
echo
|
|
echo "Runde beendet. Aufraeumen …"
|
|
# 🔴 REIHENFOLGE: erst die Konsole toeten, dann den Pin loesen. Andersherum ist es ein
|
|
# Wettlauf, den man verliert -- die Automatik der noch laufenden Konsole sieht den
|
|
# geloesten Pin und setzt ihn binnen zwei Sekunden wieder. Am 2026-08-22 meldete der
|
|
# Aufraeumer brav "AP-Pin geloest", und danach standen die Regeln trotzdem am Core:
|
|
# das Telefon waere nach jeder Runde gepinnt geblieben.
|
|
[[ -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-s22.sh off >/dev/null 2>&1 && echo " AP-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
|