Eu quero que isso seja baseado no sistema operacional, então não preciso de uma conexão à Internet ou de um navegador aberto, etc. Apenas algo que pode acontecer em segundo plano
A maneira mais fácil de fazer isso seria com um aplicativo, mas veja como fazê-lo apenas com comandos do sistema operacional interno. Sei que você deseja que ele seja direcionado a eventos, mas não tenho certeza de como fazer isso, então aqui está uma maneira de verificar o nível da bateria e fazer outra coisa se estiver acima / abaixo de um limite.
Você pode considerar um launchdprocesso, essa é basicamente uma tarefa agendada que é executada a cada xminuto. Eles geralmente são usados por usuários avançados, mas não são muito difíceis de configurar. Você configura uma tarefa agendada launchd com um arquivo .plist que você coloca neste diretório: Macintosh HD\Library\LaunchDaemonse é assim que você estrutura o arquivo .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 você salvar esse arquivo como com.me.BatteryInfona LaunchDaemonspasta mencionada acima, ele criará uma tarefa agendada que será executada a cada 30 minutos. O número, 1800diretamente acima, </dict>é o tempo em segundos da frequência com que você deseja que a tarefa seja executada. Onde diz <string>/Users/yourusername/batt.sh</string>é onde você especifica qual script é executado dentro do cronograma. Você deve sair <string>e </sting>intacto.
A linha <string>com.me.BatteryInfo</string>é o nome exclusivo da tarefa agendada. Se você quiser criar mais de um, verifique se cada .plist tem um nome exclusivo aqui.
A próxima coisa que você precisa fazer é alterar a propriedade do .plist para root. Isso é necessário como um recurso de segurança (para impedir que software / usuários criem tarefas maliciosas agendadas, presumo). Para alterar a propriedade do arquivo, faça sudo chown root \Library\LaunchDaemons\yourtask.plist(substitua yourtask.plist pelo nome real do arquivo .plist que você criou). Esta tarefa solicitará uma senha.
Agora você precisa criar o script que será executado periodicamente. Você precisa criar um arquivo .sh (um script do bash) para informar ao computador o que fazer. Para criar um arquivo .sh, abra um editor de texto de programadores, como Sublime Text ou Komodo Edit . NÃO use o Text Edit, pois geralmente adiciona texto aos seus arquivos, o que interferiria no seu script. A edição de texto não deve realmente ser usada para código.
Crie um script (arquivo .sh) com o seguinte 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
Substitua echo 'charged.'pelo (s) comando (s) do terminal que você deseja executar quando a bateria estiver carregada. open /Applications/Notes.appabrirá o aplicativo Notes; você pode alterar o diretório para abrir um aplicativo diferente.
$percent > 95Isso indica à próxima linha para funcionar somente quando a bateria estiver mais do que 95carregada. Você pode mudar isso para o que quiser. O nível da bateria aqui geralmente será ligeiramente diferente do que é exibido na barra de menus na parte superior. Se você quiser 'funcionar com a bateria totalmente carregada', recomendo deixá-lo como> 95 . Se você deseja que a tarefa seja executada quando a bateria ficar abaixo de 20%, por exemplo, altere-a para$percent < 20
NOTA: Como essa é uma tarefa agendada, seu script será executado a cada xnúmero de minutos. Isso significa que, se você open \Applications\Notes.appinserir seu script, o aplicativo Notes será iniciado a cada xminuto (se a bateria estiver carregada)
Esta tarefa será executada mesmo se ninguém estiver conectado.
Sei que você fez essa pergunta há um tempo, mas espero que isso ajude alguém.