Zwei Maengel aus dem Rundgang vom 22.8. behoben. 1. STOPP-KNOPF. Die Konsole nannte "⏹ Aufzeichnung stoppen", es gab ihn nicht. Christoph drueckte "Call beendet" und den Not-Aus -- beide schreiben nur Marken -- und die Messung lief weiter, waehrend der Core sein Telefon mit 5 Pings/s bearbeitete. Jetzt legt der Knopf stop.flag ab, und die Warteschleife des Messskripts bricht darauf ab. 2. ZWEITES TELEFON. Der Beobachter las immer schon beide Geraete, hielt die Zahlen aber nur im Speicher fuer die Anzeige. Da das S22 per Automatik immer auf dem GEGEN-AP sitzt, fehlte damit ausgerechnet die Strecke, die die Alltagsabdeckung zeigt -- der Terrassen-Vergleich war nicht zu fuehren. Jetzt: zweiter Ping (walk-ping-iphone.csv) und beide-telefone.csv im 2-s-Takt mit iface + Signal je Geraet. Beim Testen kamen zwei Fehler ans Licht, die den naechsten Lauf gekostet haetten: - `PINGER=$(ping_lauf ...)` blockiert. Die Kommandosubstitution wartet, bis die stdout-Pipe schliesst, und der Hintergrundjob darin haelt sie offen. Das Skript stand in dieser Zeile, der zweite Ping wurde nie gestartet -- und es sah von aussen aus wie ein normal laufender Lauf. Die Funktion laeuft in der aktuellen Shell, also liefert $! danach die richtige PID. - `kill $SAMPLER` traf nur den Wrapper. Dessen Subshell samt SSH-Sitzung wurde dabei verwaist und lief weiter: nach dem Stopp hielt der Core stumm eine Sampler-Sitzung offen. Wer den Vater zuerst killt, verliert den Zugriff auf die Kinder -- jetzt killbaum(), Kinder zuerst. Mitgenommen von der Rotationsliste: tp6-monitor-core.sh und der Ping in tp25-walk-messung.sh laufen jetzt ueber `sshpass -e` statt `-p`. Damit steht das Router-Passwort in keiner Kommandozeile mehr. `pgrep -fl "sshpass -p"` ist leer. Offen bleibt tp25-pin-s22.sh. Abnahme: Lauf gestartet, beide Ziele gepingt (10.40.10.178 + .196), ein Klick auf den Stopp-Knopf, danach kein Prozess und keine SSH-Sitzung mehr uebrig, Pin geloest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
71 lines
3.0 KiB
Bash
Executable File
71 lines
3.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
|
|
|
|
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 automatisch' einschalten -> 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 …"
|
|
bash docs/tp25-pin-s22.sh off >/dev/null 2>&1 && echo " AP-Pin geloest."
|
|
[[ -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
|
|
echo
|
|
echo "Auswertung:"
|
|
echo " python3 docs/tp25-gehweg-auswertung.py --dir $TP6_RUN_DIR"
|
|
}
|
|
trap aufraeumen EXIT
|
|
|
|
bash docs/tp25-walk-messung.sh
|