Bueno, me voy a dar una respuesta a mi propia pregunta, probado en Yosemite, pero no mucho. Este es el código bash:
#!/bin/bash
humantime () { printf -v $1 "%dh%02dm%02ds" $(($2/3600)) $((($2/60)%60)) $(($2%60)); }
#unplugged=`pmset -g log | grep 'Summary- \[System: DeclUser.*\] Using Batt' | tail -1 | cut -f1,2 -d' '`
unplugged=`syslog -u -k Sender loginwindow | grep 'magsafeStateChanged state changed old 1 new 2' | tail -n 1 | cut -f1 -dZ`
onbatt=$((`date +%s` - `date -j -f "%Y-%m-%d %H:%M:%S" "$unplugged" +%s`))
slept=`pmset -g log | sed -n "/^$unplugged/,//p" | awk '/Entering Sleep.*[0-9]+ secs/ {n=split($0,a," ");sum+=a[n-1]} END {print sum}'`
[[ -z $slept ]] && slept=0
awake=$((onbatt-slept))
humantime hawake $awake
humantime hslept $slept
printf "Awake on battery for $hawake (%.1f%%)\n" `echo "$awake*100/$onbatt" | bc -l`
printf "Slept on battery for $hslept (%.1f%%)\n" `echo "$slept*100/$onbatt" | bc -l`
No voy a responder por su precisión, pero parece que funciona. Ya no sé de Apple interna (soy nuevo en el MacOSX) que revocó diseñado con un par de ensayo y errores de enchufar y desenchufar el adaptador, tanto durante el sueño, y también mientras se está despierto, para ver cual de las entradas de registro confiable.
Usted notará que he intentado utilizar pmset -g log
para detectar cuando el poder estaba desconectado, pero es poco confiable. Después de desconectar el aparato, el registro de entrada es Summary- [System: DeclUser kDisp] Using Batt
pero por desgracia, el mismo registro de entrada se produce durante el sueño, mientras está desenchufado por lo que es poco fiable. He recurrido a syslog
lugar.
NOTA: Este informe de el tiempo desde la última unplugged evento. Esto puede no ser cuando la batería estaba al 100%.
Problema potencial: El código de arriba lleva la marca de tiempo de syslog y de los partidos contra pmset. Si pmset no tiene una entrada (cualquier entrada) en la misma marca de tiempo, esto no funciona. Eso no debería suceder, pero si lo hace, entonces usted puede convertir las marcas de tiempo a la época de segundos y detectar el más cercano de hora en pmset de esa manera.