Files
bf-infra/docs/tp25-runde.sh
Christoph Emsenhuber ac4bce8cc2 Auswertung zeigt beide Rollen nebeneinander -- und drei Fallen aus dem Test
Die Auswertung liest jetzt beide Geraete und stellt sie je Raum untereinander:

  REFERENZ (iPhone, frei)     was du an dieser Stelle wirklich hast
  SONDE    (S22, Gegen-AP)    was die Rueckfallebene noch leisten koennte

Damit faellt der Terrassen-Vergleich beim naechsten Lauf von selbst raus, und
die Lesart wird eindeutig: gute Referenz + schlechte Sonde = alles haengt an
EINEM AP; beide schlecht = echtes Loch ohne Rueckfallebene (der Kuechenfall).

Rueckwaertskompatibel: Laeufe ohne walk-ping-iphone.csv/beide-telefone.csv
laufen einspaltig weiter und liefern fuer den Lauf vom 22.8. Ziffer fuer Ziffer
dieselben Zahlen wie vorher. Das Geraet heisst dort "Geraet" -- welches es war,
steht in den Dateien nicht, also wird es auch nicht behauptet.

Drei Fehler, die der Abnahmetest zutage foerderte und die alle den naechsten
Rundgang gekostet haetten:

1. Die Gegen-AP-Automatik war nach dem Start AUS. Wer den Klick vergisst, geht
   die ganze Runde mit beiden Telefonen auf DEMSELBEN AP -- im Test genau so
   passiert. tp25-runde.sh schaltet sie jetzt scharf; /auto nimmt dafuer ?an=1
   (ein Toggle waere falsch: bei schon laufender Konsole haette der Start sie
   ausgeschaltet).
2. "Funk da, aber keine einzige Ping-Antwort" erschien als "—", also wie eine
   Datenluecke. Beim Test lag das iPhone gesperrt auf dem Tisch: angemeldet mit
   -47 dBm und trotzdem stumm. Wer das als Luecke liest, sucht danach ein
   Funkloch, das es nicht gibt. Jetzt: "keine Antwort" + "⚠️ Display gesperrt?".
3. Der Aufraeumer meldete "AP-Pin geloest", und danach standen die Regeln
   trotzdem am Core. Wettlauf: er loeste den Pin, waehrend die Konsole noch
   lief, und deren Automatik setzte ihn binnen zwei Sekunden wieder. Das
   Telefon waere nach JEDER Runde gepinnt geblieben. Jetzt erst Konsole toeten,
   dann Pin loesen.

Zuletzt: tp25-pin-s22.sh laeuft auf sshpass -e. Damit steht das Router-Passwort
in keiner Kommandozeile mehr -- `grep -rn "sshpass -p" docs/ nautobot/` findet
nur noch die Erwaehnung in teilprojekte.md. Die Rotation kann jetzt kommen.

Abnahme (mehrere echte Laeufe): Automatik meldet EIN, beide Telefone stehen auf
verschiedenen APs, beide werden gepingt, ein Klick auf Stopp beendet alles,
Pin danach "off", kein Prozess uebrig.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 23:28:41 +02:00

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