Evento basado en el nivel de carga de la batería

8

Todavía no he encontrado nada, así que esperaba que alguien aquí tuviera una idea.

Quiero comenzar con una batería uniforme en una computadora portátil Apple que alcance cierto nivel de carga o cuando la batería esté completamente cargada.

Sé que puedo hacer que algo se ejecute periódicamente, verifique el nivel de la batería y decida qué hacer, pero prefiero el evento si es posible.

    
pregunta FaultyJuggler 29.07.2013 - 20:39

3 respuestas

2

Power Manager no es gratis pero admite eventos de activación basados en niveles de batería (interno o UPS). Los eventos pueden ejecutar scripts, iniciar aplicaciones o realizar tareas como apagar.

El Administrador de energía está controlado por eventos y no busca cambios en la batería.

En su lugar, Power Manager se enlaza con la capa IOKit de OS X y espera actualizaciones del hardware. Los eventos pueden ser activados cuando nadie ha iniciado sesión; no se basa en un usuario activo.

LastareasintegradasdeScheduleAssistantseenfocaneneldesempeñocuandolabateríacaeaunnivelparticular,perosepuedenajustarparaverificarelaumentoenelporcentajedebateríaoeltiemporestante.

EstasdospublicacioneshablansobrelasfuentesdeenergíadeUPS,peroseadaptanfácilmenteparalabateríainternadesuMacBook:

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

    
respondido por el Graham Miln 09.01.2014 - 12:00
2
  

Quiero que esto se base en el sistema operativo, por lo que no necesito una conexión a Internet o un navegador abierto, etc. Solo algo que pueda suceder en segundo plano

La forma más sencilla de hacerlo sería con una aplicación, pero a continuación se explica cómo hacerlo solo con los comandos integrados del sistema operativo. Sé que quieres que sea impulsado por un evento, pero no estoy seguro de cómo lograrlo, así que aquí hay una forma de verificar el nivel de la batería y luego hacer otra cosa si está por encima o por debajo de un umbral.

Puede considerar un proceso launchd , esto es básicamente una tarea programada que se ejecuta cada x minutos. A menudo son utilizados por usuarios avanzados, pero no son demasiado difíciles de configurar. Configura una tarea programada launchd con un archivo .plist que coloca en este directorio: Macintosh HD\Library\LaunchDaemons y así es como se estructura el archivo .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>

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

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

Lo siguiente que debe hacer es cambiar la propiedad de .plist a root . Esto se requiere como una función de seguridad (para evitar que los usuarios / software creen tareas maliciosas programadas, supongo). Para cambiar la propiedad del archivo, haga sudo chown root \Library\LaunchDaemons\yourtask.plist (reemplace yourtask.plist con el nombre de archivo real de la lista que creó). Esta tarea le pedirá una contraseña.

Ahora necesita crear el script que se ejecutará periódicamente. Debe crear un archivo .sh (un script de bash) para decirle a la computadora qué hacer. Para crear un archivo .sh, abra un editor de texto para programadores, como Sublime Text o Edición de Komodo . NO use Text Edit, ya que a menudo agrega texto a sus archivos que podría interferir con su script. La Edición de texto no debería usarse para el código.

Haga un script (archivo .sh) 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 los comandos de terminal que le gustaría ejecutar cuando la batería está cargada. open /Applications/Notes.app abrirá la aplicación Notas; puede cambiar el directorio para abrir una aplicación diferente.

$percent > 95 Esto le indica a la siguiente línea que solo se ejecute cuando la batería tenga más de 95 cargado. Puedes cambiar esto a lo que quieras. El nivel de batería aquí será a menudo ligeramente diferente al que se muestra en la barra de menú en la parte superior. Si desea 'ejecutar cuando la batería está completamente cargada', recomiendo dejar esto como > 95 . Si desea que la tarea se ejecute cuando su batería esté por debajo del 20%, por ejemplo, cámbiela a $percent < 20

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

Esta tarea se ejecutará incluso si nadie ha iniciado sesión.

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

    
respondido por el Joseph 09.01.2014 - 11:33
1

Esto no es específico de Mac, pero Mozilla Aurora tiene una API incorporada que contiene una variedad de funciones relacionadas con la batería. Uno puede detectar el estado de la batería (ya sea que se esté cargando o no), cuánto tiempo más tardará en descargarse / cargarse la batería 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.

    
respondido por el Andrew Ng 29.07.2013 - 20:46

Lea otras preguntas en las etiquetas