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 launchd
processo, essa é basicamente uma tarefa agendada que é executada a cada x
minuto. 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\LaunchDaemons
e é 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.BatteryInfo
na LaunchDaemons
pasta mencionada acima, ele criará uma tarefa agendada que será executada a cada 30 minutos. O número, 1800
diretamente 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.app
abrirá o aplicativo Notes; você pode alterar o diretório para abrir um aplicativo diferente.
$percent > 95
Isso indica à próxima linha para funcionar somente quando a bateria estiver mais do que 95
carregada. 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 x
número de minutos. Isso significa que, se você open \Applications\Notes.app
inserir seu script, o aplicativo Notes será iniciado a cada x
minuto (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.