Auswertung: Ruhezustand von Funkloch trennen -- und der Sideboard-Gang

Ein iPhone mit gesperrtem Display beantwortet ICMP nicht. In der Verlustspalte
sieht das exakt aus wie ein Funkloch, und heute haette es fast zu einem falschen
Befund gefuehrt: 58 Sekunden Ping-Luecke auf der Terrasse -- bei -53 dBm, 275 Mbps
PHY-Rate und weiterlaufenden 3 kbit/s Hintergrundverkehr. Das Geraet war
erreichbar, es wollte nur nicht antworten.

Die Auswertung markiert solche Luecken jetzt (gutes Durchschnittssignal plus hohe
PHY-Rate) und sagt dazu, dass sie NICHT als Funkloch zu lesen sind. Bewertet wird
der Durchschnitt des Abschnitts, nicht sein Minimum -- ein einzelner schwacher
Sample beim Durchgehen darf den Befund nicht kippen.

Dazu die Rohdaten des Gangs mit ap1 am Sideboard.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-21 20:49:49 +02:00
parent dc639b0a55
commit 31d1253fbe
4 changed files with 8939 additions and 1 deletions

View File

@@ -0,0 +1,30 @@
ts_epoch,ts_local,marker
1787336761,20:26:01,RAUM=Arbeitszimmer
1787336769,20:26:09,WALK
1787336781,20:26:21,RAUM=Technik OG
1787336792,20:26:32,RAUM=Diele OG
1787336801,20:26:41,RAUM=Treppe
1787336817,20:26:57,RAUM=Wohnzimmer
1787336841,20:27:21,RAUM=Küche
1787336861,20:27:41,RAUM=Wohnzimmer
1787336866,20:27:46,RAUM=Wohnzimmer
1787336869,20:27:49,RAUM=Diele UG
1787336875,20:27:55,RAUM=Technik OG
1787336878,20:27:58,RAUM=Diele UG
1787336883,20:28:03,RAUM=Kinderzimmer
1787336898,20:28:18,RAUM=Diele UG
1787336903,20:28:23,RAUM=Bad
1787336920,20:28:40,RAUM=Diele UG
1787336922,20:28:42,RAUM=Schlafzimmer
1787336942,20:29:02,RAUM=Diele UG
1787336946,20:29:06,RAUM=Kinderzimmer
1787336963,20:29:23,ARRIVED
1787337493,20:38:13,RAUM=Diele UG
1787337504,20:38:24,WALK
1787337511,20:38:31,RAUM=Treppe
1787337523,20:38:43,RAUM=Diele OG
1787337548,20:39:08,ARRIVED
1787337854,20:44:14,CAM_ON
1787337861,20:44:21,RAUM=Terrasse
1787337872,20:44:32,WALK
1787337904,20:45:04,ARRIVED
1 ts_epoch ts_local marker
2 1787336761 20:26:01 RAUM=Arbeitszimmer
3 1787336769 20:26:09 WALK
4 1787336781 20:26:21 RAUM=Technik OG
5 1787336792 20:26:32 RAUM=Diele OG
6 1787336801 20:26:41 RAUM=Treppe
7 1787336817 20:26:57 RAUM=Wohnzimmer
8 1787336841 20:27:21 RAUM=Küche
9 1787336861 20:27:41 RAUM=Wohnzimmer
10 1787336866 20:27:46 RAUM=Wohnzimmer
11 1787336869 20:27:49 RAUM=Diele UG
12 1787336875 20:27:55 RAUM=Technik OG
13 1787336878 20:27:58 RAUM=Diele UG
14 1787336883 20:28:03 RAUM=Kinderzimmer
15 1787336898 20:28:18 RAUM=Diele UG
16 1787336903 20:28:23 RAUM=Bad
17 1787336920 20:28:40 RAUM=Diele UG
18 1787336922 20:28:42 RAUM=Schlafzimmer
19 1787336942 20:29:02 RAUM=Diele UG
20 1787336946 20:29:06 RAUM=Kinderzimmer
21 1787336963 20:29:23 ARRIVED
22 1787337493 20:38:13 RAUM=Diele UG
23 1787337504 20:38:24 WALK
24 1787337511 20:38:31 RAUM=Treppe
25 1787337523 20:38:43 RAUM=Diele OG
26 1787337548 20:39:08 ARRIVED
27 1787337854 20:44:14 CAM_ON
28 1787337861 20:44:21 RAUM=Terrasse
29 1787337872 20:44:32 WALK
30 1787337904 20:45:04 ARRIVED

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -91,15 +91,28 @@ def main():
verloren += miss
luecke = max(luecke, miss * 0.2)
gesamt = (p[-1][1] - p[0][1] + 1) if len(p) > 1 else 0
# 🔴 Ruhezustand von Funkloch trennen. Ein iPhone mit gesperrtem Display
# beantwortet ICMP nicht — das sieht in der Verlustspalte aus wie ein Funkloch.
# Unterscheidbar ist es am Funk: bleibt das Signal gut UND die PHY-Rate hoch,
# war das Geraet erreichbar und wollte nur nicht antworten.
# (Am 2026-08-21 auf der Terrasse: 58 s Ping-Luecke bei -53 dBm und 275 Mbps.)
sig = [int(x["sta_signal"]) for x in r]
raten = [int(x["sta_tx_rate"] or 0) for x in r if x.get("sta_tx_rate")]
# Bewertet wird der DURCHSCHNITT des Abschnitts, nicht sein Minimum: ein
# einzelner schwacher Sample beim Durchgehen darf den Befund nicht kippen.
schlaefrig = (luecke >= 3 and sig and (sum(sig) / len(sig)) > -68
and raten and (sum(raten) / len(raten)) > 100e6)
ifaces = sorted({AP.get(x["sta_iface"], x["sta_iface"]) for x in r if x["sta_iface"]})
print("%-16s %5ds %-24s %-18s %s" % (
name, stop - start,
"%d / %.1f / %d dBm" % (min(sig), sum(sig) / len(sig), max(sig)) if sig else "—",
"%d von %d (%.0f %%)" % (verloren, gesamt, 100 * verloren / gesamt) if gesamt else "—",
("%.1f s" % luecke) if luecke else "keine"))
(("%.1f s ⚠️ eher Ruhezustand" % luecke) if schlaefrig
else ("%.1f s" % luecke)) if luecke else "keine"))
if ifaces:
print("%-16s auf %s" % ("", ", ".join(ifaces)))
print("\n⚠️ = Luecke bei gutem Signal und hoher PHY-Rate -> das Geraet war erreichbar und hat")
print(" nur nicht geantwortet (iOS-Ruhezustand). Solche Luecken NICHT als Funkloch lesen.")
print("\nLesehilfe: eine längste Lücke über ~2 s ist für einen Videocall eine hörbare Unterbrechung,")
print("über 10 s ist der Call praktisch tot. Signal unter −70 dBm ist die Zone, in der das passiert.")