Mac OS X - riporta il tempo sulla batteria dall'ultima CA scollega ma esclude il tempo di spegnimento

1

Esiste un'app o un comando esistente per riportare il tempo della batteria da quando il laptop è stato scollegato dalla presa di corrente, ma escludere il tempo speso durante il sonno con la batteria?

Questo può essere dedotto da pmset -g log quindi sto cercando un modo per farlo senza usare un'app che resti residente per rilevare gli eventi plug / scollegati.

    
posta Normadize 14.03.2015 - 22:06
fonte

1 risposta

1

Bene, fornirò una risposta alla mia domanda, testata su Yosemite ma non ampiamente. Questo è il codice 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'

Non cercherò la sua accuratezza ma sembra funzionare. Dal momento che non conosco i componenti interni di Apple (sono nuovo di Mac OS X) ho invertito la progettazione con alcuni tentativi ed errori collegando e scollegando l'adattatore, sia durante il sonno che durante la veglia, per vedere quali voci del registro sono affidabili.

Noterai che ho provato a usare pmset -g log per rilevare quando il potere è stato scollegato ma è inaffidabile. Al momento della disconnessione, la voce di registro è Summary- [System: DeclUser kDisp] Using Batt , ma sfortunatamente la stessa voce di registro si verifica durante la sospensione mentre scollegata, quindi non è affidabile. Ho fatto ricorso a syslog invece.

NOTA: riporta il tempo trascorso dall'ultimo evento non inserito. Questo potrebbe non essere quando la batteria è al 100%.

Potenziale problema: il codice sopra riportato prende il timestamp da syslog e le corrispondenze con pmset. Se pmset non ha una voce (qualsiasi voce) con lo stesso timestamp, allora non funzionerà. Questo non dovrebbe accadere, ma se lo fa, allora puoi convertire i timestamp in epoch secondi e rilevare il timestamp più vicino in pmset in questo modo.

    
risposta data 15.03.2015 - 02:33
fonte

Leggi altre domande sui tag