Two latent bugs kept all SMC telemetry dead:
- IOServiceMatching("AppleSMCClient") never matched — the kernel service
is AppleSMC, so openWithError always failed and every SMC-gated provider
(thermal, fan, component, power) reported unavailable.
- #pragma pack(1) shrank SMCKeyData_t to 74 bytes; the SMC user client
requires the canonical 80-byte layout and rejected every
IOConnectCallStructMethod with kIOReturnBadArgument. Verified live on
Intel hardware: unpacked calls succeed and return key data.
Also sources the alert engine's batteryLevel from the SMC-independent
batteryHealth path (currentCapacity/maxCapacity), falling back to the
power provider.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>