#!/bin/bash # Spike A, Teil 2 — SMC-Differenzmessung # # Identifiziert den Ladelimit-Key, ohne je in den SMC zu schreiben: zwei # vollständige Dumps vergleichen, zwischen denen macOS selbst die Ladegrenze # umgestellt hat. # # Ablauf: # ./smc-diff.sh vorher # Ladegrenze AUS # (in den Systemeinstellungen umschalten, ~30 s warten) # ./smc-diff.sh nachher # Ladegrenze AN # ./smc-diff.sh vergleich # # Lesend. Dieses Skript ruft nur smc-dump auf, das keinen Schreibpfad besitzt. set -euo pipefail DIR="${TMPDIR:-/tmp}/onyx-smc-diff" DUMP="${DUMP:-/tmp/smc-dump}" mkdir -p "$DIR" if [[ ! -x "$DUMP" ]]; then echo "smc-dump nicht gefunden unter $DUMP" >&2 echo "Bauen mit: xcrun swiftc -O Spikes/smc-dump.swift -o /tmp/smc-dump" >&2 exit 1 fi # Werte, die sich ohnehin ständig ändern — sie würden die Differenz zumüllen. # Temperaturen (T*), Lüfter (F*), Leistung (P*), Spannungen/Ströme und Zähler. RAUSCHEN='^ (T|F[0-9]|P[A-Z]|V|I|B0A|B0R|BRSC|CH0V|CHA|CHB|CHI[0-9]|CHNI|MSS|D[0-9])' snapshot() { "$DUMP" --all | awk '/ALLE KEYS/,0' | grep -E '^ [A-Za-z#]' \ | grep -vE "$RAUSCHEN" | sort > "$DIR/$1.txt" echo "→ $DIR/$1.txt ($(wc -l < "$DIR/$1.txt" | tr -d ' ') Keys nach Rauschfilter)" } case "${1:-}" in vorher|nachher) echo "Nehme Snapshot '$1' auf …" snapshot "$1" [[ "$1" == "vorher" ]] && echo "Jetzt die Ladegrenze in den Systemeinstellungen umschalten, dann: $0 nachher" ;; vergleich) for f in vorher nachher; do [[ -f "$DIR/$f.txt" ]] || { echo "Snapshot '$f' fehlt." >&2; exit 1; } done echo "Geänderte Keys zwischen 'vorher' und 'nachher':" echo "────────────────────────────────────────────────────────────────" if diff "$DIR/vorher.txt" "$DIR/nachher.txt" | grep -E '^[<>]'; then echo echo "Ein Key, der hier auftaucht und nach CH*/bf*/AC* aussieht, ist der Kandidat." else echo "Keine Unterschiede — wurde die Einstellung wirklich umgeschaltet?" echo "Manche Änderungen brauchen bis zu einer Minute, bis der SMC sie übernimmt." fi ;; *) sed -n '2,14p' "$0" | sed 's|^# \{0,1\}||' exit 1 ;; esac