diff --git a/bin/status-go b/bin/status-go index cb33370..8e3e913 100755 Binary files a/bin/status-go and b/bin/status-go differ diff --git a/cmd/status/metrics_battery.go b/cmd/status/metrics_battery.go index a698015..84161db 100644 --- a/cmd/status/metrics_battery.go +++ b/cmd/status/metrics_battery.go @@ -177,54 +177,20 @@ func collectThermal() ThermalStatus { } } - // 1. Try osx-cpu-temp (most accurate for users without sudo) - if commandExists("osx-cpu-temp") { - ctxTemp, cancelTemp := context.WithTimeout(context.Background(), 500*time.Millisecond) - defer cancelTemp() - if out, err := runCmd(ctxTemp, "osx-cpu-temp"); err == nil { - valStr := strings.TrimSpace(out) - valStr = strings.TrimSuffix(valStr, "°C") - valStr = strings.TrimSuffix(valStr, "C") - valStr = strings.TrimSpace(valStr) - if t, err := strconv.ParseFloat(valStr, 64); err == nil && t > 0 { - thermal.CPUTemp = t - return thermal - } + // 1. Try ioreg battery temperature (simple, no sudo needed) + ctxIoreg, cancelIoreg := context.WithTimeout(context.Background(), 500*time.Millisecond) + defer cancelIoreg() + if out, err := runCmd(ctxIoreg, "sh", "-c", "ioreg -rn AppleSmartBattery | awk '/\"Temperature\"/ {print $3}'"); err == nil { + valStr := strings.TrimSpace(out) + if tempRaw, err := strconv.Atoi(valStr); err == nil && tempRaw > 0 { + thermal.CPUTemp = float64(tempRaw) / 100.0 + return thermal } } - // 2. Try powermetrics (requires sudo, works on Apple Silicon) - if commandExists("powermetrics") { - // Only run if we are effectively root to avoid password prompt/failure delays - if os.Geteuid() == 0 { - ctxPower, cancelPower := context.WithTimeout(context.Background(), 2*time.Second) - defer cancelPower() - // Use thermal sampler - out, err := runCmd(ctxPower, "powermetrics", "-n", "1", "--samplers", "thermal", "-i", "100") - if err == nil { - lines := strings.Split(out, "\n") - for _, line := range lines { - if strings.Contains(line, "CPU die temperature") { - // Format: "CPU die temperature: 35.43 C" - parts := strings.Split(line, ":") - if len(parts) == 2 { - valStr := strings.TrimSpace(parts[1]) - valStr = strings.TrimSuffix(valStr, " C") - if t, err := strconv.ParseFloat(valStr, 64); err == nil { - thermal.CPUTemp = t - return thermal - } - } - } - } - } - } - } - - // 3. Try thermal level as a proxy (fallback) + // 2. Try thermal level as a proxy (fallback) ctx2, cancel2 := context.WithTimeout(context.Background(), 500*time.Millisecond) defer cancel2() - out2, err := runCmd(ctx2, "sysctl", "-n", "machdep.xcpm.cpu_thermal_level") if err == nil { level, _ := strconv.Atoi(strings.TrimSpace(out2))