Evento basato sul livello di carica della batteria

8

Non ho ancora trovato nulla quindi speravo che forse qualcuno qui avesse un'idea.

Voglio dare il via ad una batteria basata su un laptop Apple che raggiunge un certo livello di carica o quando la batteria è completamente carica.

So che posso avere qualcosa da eseguire periodicamente, controllare il livello della batteria e decidere cosa fare, ma preferisco guidare l'evento se possibile.

    
posta FaultyJuggler 29.07.2013 - 20:39
fonte

3 risposte

2

Power Manager non è gratuito ma supporta l'attivazione di eventi in base ai livelli della batteria (interno o UPS). Gli eventi possono eseguire script, avviare applicazioni o eseguire attività come lo spegnimento.

Power Manager è guidato dagli eventi e non esegue il polling delle modifiche della batteria.

Invece Power Manager si aggancia al livello IOKit di OS X e attende gli aggiornamenti dall'hardware. Gli eventi possono essere attivati quando nessuno è connesso; non si basa su un utente attivo.

LeattivitàdiScheduleAssistantincorporatesiconcentranosull'esecuzionequandolabatteriascendeaundeterminatolivello,mapossonoessereottimizzateperverificarel'aumentodellapercentualedellabatteriaoiltemporimanente.

QuestiduepostparlanodialimentatoriUPS,masiadattanofacilmenteallabatteriainternadeltuoMacBook:

Divulgazione: sono un ingegnere del software dietro Power Manager.

    
risposta data 09.01.2014 - 12:00
fonte
2

I want this to be OS based, so I don't need an internet connection or a browser open etc. Just something that can happen in the background

Il modo più semplice per farlo sarebbe con un'applicazione, ma ecco come farlo solo con i comandi OS incorporati. So che vuoi che sia guidato dagli eventi, ma non sono sicuro di come ottenerlo, quindi ecco un modo per controllare il livello della batteria, quindi fare qualcos'altro se è sopra / sotto una soglia.

Potresti prendere in considerazione un processo launchd , questa è fondamentalmente un'attività pianificata che esegue ogni x minuti. Sono spesso utilizzati dagli utenti esperti, ma non sono troppo difficili da configurare. Configura un'attività avviata di launchd con un file .plist che inserisci in questa directory: Macintosh HD\Library\LaunchDaemons e questo è il modo in cui strutturi il file .plist;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
    <string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>

Se dovessi salvare quel file come com.me.BatteryInfo nella cartella LaunchDaemons menzionata sopra, creerebbe un'attività pianificata che viene eseguita ogni 30 minuti. Il numero, 1800 , direttamente sopra </dict> è il tempo in secondi della frequenza con cui si desidera eseguire l'attività. Dove dice <string>/Users/yourusername/batt.sh</string> è dove si specifica quale script viene eseguito in base alla pianificazione. Devi lasciare <string> e </sting> intatto.

La riga <string>com.me.BatteryInfo</string> è il nome univoco dell'attività pianificata. Se ne vuoi fare più di uno, assicurati che ogni .plist abbia un nome univoco qui.

La prossima cosa che devi fare è cambiare la proprietà di .plist in root . Questo è richiesto come funzionalità di sicurezza (per impedire al software / agli utenti di creare attività maligne pianificate, presumo). Per modificare la proprietà del file, fai sudo chown root \Library\LaunchDaemons\yourtask.plist (sostituisci yourtask.plist con il nome file effettivo del file .plist che hai creato). Questa attività ti richiederà una password.

Ora è necessario creare lo script che verrà eseguito periodicamente. È necessario creare un file .sh (uno script di bash) per dire al computer cosa fare. Per creare un file .sh, apri un editor di testo per programmatori, come Testo sublime o Komodo Modifica . NON utilizzare Text Edit, poiché spesso aggiunge del testo ai tuoi file che interferirebbe con il tuo script. La modifica del testo non deve essere realmente utilizzata per il codice.

Crea uno script (file .sh) con il seguente codice;

#!/bin/sh

percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')

if [ $percent > 95 ]
    then
        echo 'charged.'
fi
exit 0

Sostituisci echo 'charged.' con i comandi del terminale che desideri eseguire quando la batteria è carica. open /Applications/Notes.app aprirà l'applicazione Notes; puoi cambiare la directory per aprire un'applicazione diversa.

$percent > 95 Indica alla riga successiva di eseguire solo quando la batteria è caricata per più di 95 . Puoi cambiarlo in qualsiasi cosa tu voglia. Il livello della batteria qui sarà spesso leggermente diverso da quello che viene visualizzato nella barra dei menu in alto. Se si desidera "eseguire quando la batteria è completamente carica", si consiglia di lasciare questo come > 95 . Ad esempio, se si desidera eseguire l'attività quando la batteria scende al di sotto del 20%, modificarla in $percent < 20

NOTA: poiché questa è un'attività pianificata, lo script eseguirà ogni x numero di minuti. Ciò significa che se inserisci open \Applications\Notes.app all'interno del tuo script, l'applicazione Notes inizierà ogni x minuti (se la batteria è carica)

Questa attività verrà eseguita anche se nessuno ha effettuato l'accesso.

So che hai fatto questa domanda qualche tempo fa, ma spero che questo possa aiutare qualcuno.

    
risposta data 09.01.2014 - 11:33
fonte
1

Questo non è specifico per Mac, ma Mozilla Aurora ha un'API incorporata che contiene una serie di funzioni relative alla batteria. Uno può rilevare lo stato della batteria (che sia in carica o meno), quanto tempo ci vorrà per scaricare / caricare la batteria e il suo livello. C'è un semplice esempio di come aggiungere un EventListener per chiamare una funzione quando il livello della batteria si trova a un certo punto.

    
risposta data 29.07.2013 - 20:46
fonte

Leggi altre domande sui tag