11 votos

El evento basado en nivel de carga de batería

No he encontrado nada todavía, así que estaba esperando tal vez alguien de aquí tuvo una idea.

Quiero inaugurar una incluso en función de la batería en un portátil de Apple alcanzar un cierto nivel de carga, o cuando la batería está completamente cargada.

Sé que puedo tener algo que se ejecute periódicamente, compruebe el nivel de batería, y decidir qué hacer, pero yo prefiero por evento, si es posible.

6voto

user2370602 Puntos 371

Yo quiero que esto sea sistema operativo basado, por lo que no necesita una conexión a internet o un navegador abierto, etc. Sólo algo que puede suceder en el fondo

La manera más sencilla de hacerlo sería con una aplicación, pero aquí está cómo hacerlo con construido-en OS comandos solo. Yo sé que usted quiere que sea por evento, pero no estoy seguro de cómo hacerlo, así que aquí es una forma de comprobar el nivel de batería, a continuación, hacer algo más si es por encima/por debajo de un umbral.

Usted puede considerar un launchd proceso, esto es, básicamente, una tarea programada que se ejecuta cada x minutos. A menudo son utilizados por los usuarios avanzados, pero no son demasiado difíciles de configurar. Configurar un launchd tarea programada con una .plist archivo que usted pone en este directorio: Macintosh HD\Library\LaunchDaemons y esta es la forma en que la estructura de la .plist archivo;

<?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>

Si se va a guardar el archivo como com.me.BatteryInfo en la LaunchDaemons carpeta mencionada arriba, se podría crear una tarea programada que se ejecuta cada 30 minutos. El número, 1800, directamente arriba de la </dict> es el tiempo en segundos de la frecuencia con que desea que se ejecute la tarea. Donde dice <string>/Users/yourusername/batt.sh</string> es donde se especifica que se ejecuta la secuencia de comandos de programación. Usted debe dejar <string> y </sting> intacto.

La línea <string>com.me.BatteryInfo</string> es el nombre único de la tarea programada. Si usted va a hacer más de uno, asegúrese de que cada uno de ellos .plist tiene un nombre único aquí.

La siguiente cosa que usted necesita hacer es cambiar la propiedad de la .plist a root. Esto es necesario como una característica de seguridad (para dejar de software/usuarios crear programadas tareas maliciosos, supongo). Para cambiar la propiedad del archivo, realice sudo chown root \Library\LaunchDaemons\yourtask.plist (reemplazar yourtask.plist con el nombre de archivo real de la .plist que creó). Esta tarea se le pide una contraseña.

Ahora lo que necesita para crear la secuencia de comandos que se ejecute periódicamente. Usted necesita para hacer una .sh archivo (un script de bash) para decirle a la computadora qué hacer. Para hacer una .sh archivo, abrir una programadores editor de texto, como Sublime Text o Komodo Edit. NO utilizar para la Edición de Texto, como a menudo se añade texto a tus archivos que podrían interferir con la secuencia de comandos. Edición de texto no debe ser utilizado para el código.

Hacer una secuencia de comandos (.sh archivo) con el siguiente código;

#!/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

Reemplace echo 'charged.' con el terminal de comandos(s) que desea ejecutar cuando la batería está cargada. open /Applications/Notes.app se abrirá la aplicación de Notas; puede cambiar el directorio para abrir una aplicación diferente.

$percent > 95 Esto indica la siguiente línea para que sólo se ejecute cuando la batería es de más de 95 cargada. Usted puede cambiar esto a lo que usted desea. El nivel de la batería aquí a menudo ser un poco diferente a lo que se muestra en la barra de menú en la parte superior. Si desea ejecutar cuando la batería está completamente cargada' yo recomiendo dejar este como > 95. Si desea que la tarea se ejecute cuando la batería esté por debajo del 20% por ejemplo, cambiar a $percent < 20

NOTA: Debido a que esta es una tarea programada, el script se ejecutará cada x número de minutos. Esto significa que si usted pone open \Applications\Notes.app dentro de la secuencia de comandos, la aplicación de Notas comenzará a cada x minutos (si la batería está cargada)

Esta tarea se ejecutará incluso si nadie está en sesión.

Sé que esta pregunta hace un tiempo, pero esperemos que esto ayude a alguien.

5voto

Steve Evans Puntos 155

El Gestor de energía no es gratis, pero es compatible con el desencadenamiento de los eventos basados en niveles de batería (interno o UPS). Los eventos pueden ejecutar secuencias de comandos, iniciar aplicaciones, o para realizar tareas tales como apagar.

El Gestor de energía es por evento y no encuesta para cambios de batería.

En lugar del Gestor de Energía de los ganchos en el IOKit capa de OS X y está a la espera de actualizaciones de hardware. Los eventos pueden ser activadas cuando no hay nadie conectado; no se basa en un usuario activo.

Power Manager - Run a script on battery remaining

La incorporada en el Horario de Ayudante de tareas se centran en la realización de cuando la batería baja a un nivel particular, pero que pueden ser ajustados para comprobar sube en porcentaje de la batería o el tiempo restante.

Estos dos puestos a hablar de UPS, fuentes de alimentación, pero que se adaptan fácilmente para tu MacBook de la batería interna:

Divulgación: yo soy un ingeniero de software detrás de Power Manager.

2voto

parkr Puntos 1140

Esto no es Mac-específico, pero Mozilla Aurora se ha incorporado en la API que contiene una variedad de la batería de funciones relacionadas. Uno puede detectar el estado de la batería (si es de carga o no), ¿cuánto más tiempo tomará para que la batería de carga/descarga, y su nivel. Hay un ejemplo simple de cómo agregar un EventListener para llamar a una función cuando el nivel de la batería está en un punto determinado.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X