mirror of
https://github.com/jimeh/macos-battery-exporter.git
synced 2026-02-19 01:16:40 +00:00
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
//go:build darwin
|
|
|
|
package battery
|
|
|
|
import (
|
|
"bytes"
|
|
"os/exec"
|
|
|
|
"howett.net/plist"
|
|
)
|
|
|
|
// batteryRaw is the raw data structure returned by ioreg.
|
|
type batteryRaw struct {
|
|
Amperage int64 `plist:"Amperage"`
|
|
AvgTimeToEmpty int `plist:"AvgTimeToEmpty"`
|
|
AvgTimeToFull int `plist:"AvgTimeToFull"`
|
|
BatteryCellDisconnectCount int `plist:"BatteryCellDisconnectCount"`
|
|
BuiltIn bool `plist:"built-in"`
|
|
CurrentCapacity int `plist:"AppleRawCurrentCapacity"`
|
|
CurrentPercentage int `plist:"CurrentCapacity"`
|
|
CycleCount int `plist:"CycleCount"`
|
|
DesignCapacity int `plist:"DesignCapacity"`
|
|
DeviceName string `plist:"DeviceName"`
|
|
DesignCycleCount int `plist:"DesignCycleCount9C"`
|
|
ExternalConnected bool `plist:"ExternalConnected"`
|
|
FullyCharged bool `plist:"FullyCharged"`
|
|
Health int `plist:"MaxCapacity"`
|
|
IsCharging bool `plist:"IsCharging"`
|
|
MaxCapacity int `plist:"AppleRawMaxCapacity"`
|
|
Serial string `plist:"Serial"`
|
|
Temperature int `plist:"Temperature"`
|
|
TimeRemaining int `plist:"TimeRemaining"`
|
|
Voltage int64 `plist:"Voltage"`
|
|
}
|
|
|
|
func getAllRaw() ([]*batteryRaw, error) {
|
|
ioreg, err := exec.LookPath("ioreg")
|
|
if err != nil {
|
|
ioreg, err = exec.LookPath("/usr/sbin/ioreg")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
b, err := exec.Command(ioreg, "-ra", "-c", "AppleSmartBattery").Output()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
batteries := []*batteryRaw{}
|
|
|
|
if len(bytes.TrimSpace(b)) == 0 {
|
|
return batteries, nil
|
|
}
|
|
|
|
_, err = plist.Unmarshal(b, &batteries)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return batteries, nil
|
|
}
|