Como posso tocar um som personalizado quando minha bateria está fraca?

13

Quero que meu computador reproduza um arquivo de som personalizado quando minha bateria estiver fraca (digamos 10%). Como posso fazer isso? obrigado

vyb
fonte

Respostas:

6

Eu só queria responder, pois usei o conselho desta página para configurar meu próprio crontab -etrabalho.

Estou executando o Lubuntu (confiável) e as opções acima não funcionaram para mim, mas com um pouco de ajustes, funcionou. Meu nível de (in) experiência é que sou relativamente capaz de ler scripts e comandos básicos, mas menos capaz de escrevê-los do zero nos linux disto. Menciono isso porque, se eu puder montar um alarme de bateria funcionando, a maioria de vocês lendo isso também poderá!

SO .... o script e uma explicação básica ....

De acordo com os posts acima de Glutanimate e Scott Goodgame (obrigado pessoal!), Basicamente fiz o seguinte:

Para obter o mpg123 e poder reproduzir áudio:

sudo apt-get install acpi mpg123

Arquivo a ser aberto para gravar o comando:

crontab -e

Comando para inserir no final do arquivo:

*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi

Explicação do acima

Asteriscos no início

Os cinco asteriscos representam a frequência com que os comandos são executados.

  • Primeira estrela = Minutos: 0-59
  • Segunda estrela = Horas: 0-23
  • Terceira estrela = Dia do mês: 0 - 31
  • Quarta estrela = Mês: 0 - 12
  • Quinta estrela = Dia da semana: 0 - 6 (0 significa domingo)

*/1 * * * *

significa 'execute isso a cada minuto'.

SE / ENTÃO / FI:

IF [ stuff inside these brackets ] ; THEN do something ; FI

A maioria de vocês, imagino, está muito familiarizada com as declarações IF / THEN. O FI no final conclui a declaração IF

Reproduzindo o áudio:

mpg123 /home/andy/Alarm.mp3

isso simplesmente usa mpg123para reproduzir um arquivo chamado Alarm.mp3localizado no meu diretório pessoal /home/andy/.

Informações da bateria de saída:

acpi -b

isso simplesmente gera o status da bateria. No meu laptop, ele produz resultados como:

Battery 0: Discharging, 74%, 02:35:18 remaining

Comando Pipe to awk

 | awk ' { print ( $(NF-2)-0)}'`  -lt "15"

Ok, estamos canalizando a saída do status da bateria acima e imprimindo o valor do segundo da ponta (NF-2), que no exemplo acima é '74% '. No entanto, precisamos remover a 'porcentagem' -0 . Queremos comparar o valor atual com o valor 15 -lt "15" . Então, resumindo em inglês simples,

SE o valor da bateria for MENOS DE 15%, ENTÃO reproduza um arquivo de áudio

Aprecio que tenha diminuído um pouco e talvez minha explicação possa ser melhorada, mas espero que ajude alguém a entender como adicionar um alarme para a bateria e evitar que seus laptops desliguem de repente!

Boa sorte!


EDITAR

Ok ... então, quando meu laptop está carregando, a saída de

acpi -b

é:

Battery 0: Charging, 35%, 01:04:08 until charged

enquanto que na bateria está

Battery 0: Discharging, 36%, 01:22:36 remaining

portanto, usando o parâmetro mencionado inicialmente em

print ( $(NF-2)-0)

produz resultados diferentes, porque lembre-se de que o bit de valor NF especifica quantos itens ao contrário do final da saída serão exibidos, portanto, com a saída na bateria de

Battery 0: Discharging, 36%, 01:22:36 remaining

$(NF-2) produz '36%', enquanto o laptop é carregado,

Battery 0: Charging, 35%, 01:04:08 until charged

$(NF-2) produz '00: 50: 12 ', ou seja, a quantidade de tempo restante até ser carregada.

O -0depois $(NF-2)diminui o valor zero do valor, portanto, quando o valor é um percentual, -0muda de algo como '36% 'para' 36 '. Quando o valor de saída é percebido como não numérico, como a saída de tempo de '01: 04: 08 'conforme acima, o valor -0retornado é' 0 '. Assim, você pode ver meu problema - quando meu laptop está carregando, o valor da saída é sempre '0'. Como eu quero tocar um alarme quando o valor de saída é menor que 15, ele se traduz em um alarme de bateria que dispara a cada minuto quando está sendo carregado!

Eu li um pouco mais sobre a saída do awkcomando e, por fim, não precisei fazer com que ele lesse o segundo valor a partir do final; eu poderia começar do início da saída e avançar. Isso é muito melhor, pois o status da minha bateria começa da mesma forma, seja na carga ou na bateria em termos de número de parâmetros, ou seja, o quarto parâmetro desde o início é sempre o valor da carga em porcentagem.

SO ... para fazê-lo ler o quarto valor, o comando muda de

awk ' { print ($(NF-2)-0)}'

para

awk ' { print ($4)-0}'

ou em toda a sua glória:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi

Mais uma vez espero que ajude alguém! Boa sorte e obrigado pela leitura!


EDIÇÃO DE BÔNUS

Ok, então, um pouco mais de cutucada e eu também aprendi como definir o volume para 100% e ativar o som antes de tocar o alarme. definimos o volume para baixo ou o silenciamos ?!

De qualquer forma, o comando que você precisa é:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi

como você pode ver, tudo o que fiz foi inserir a sequência de comandos

pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&

( &&apenas ligam vários comandos)

Mais uma vez, boa sorte a todos!

ÚLTIMA EDIÇÃO

Ok, então ... uma edição final (espero!) ... aparentemente, o sinal de porcentagem é um sinal especial ao executar tarefas cron. Portanto, você precisa "escapar" do sinal de porcentagem colocando uma barra invertida ( \) na frente de cada um %para que não seja (mis) interpretado pelo shell.

Então basicamente substitua

100%

com

100\%

Portanto, o comando que você realmente precisa é:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi

ufa espero que isso classifique para você como para mim !! (eventualmente!)

Andy Pyne
fonte
Esta é uma ótima explicação! Infelizmente, ele também reproduz um som a cada minuto ao carregar também.
OpnSrcFan
5

Você pode configurar um trabalho cron que verificará o status da bateria a cada 5/10 minutos e, dependendo da porcentagem da bateria, ele reproduzirá algum som.

Para reproduzir o som, você pode usar

mpg123 filename.mp3

Para instalá-lo

sudo apt-get install mpg123

Para obter o status da bateria na linha de comando, você pode usar este comando

upower -i /org/freedesktop/UPower/devices/battery_BAT0

usando grepvocê pode extrair as informações exatas da seguinte maneira

upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"

Agora você pode colocar todas essas coisas em um script de shell (e também uma ifcondição para verificar se o status da bateria é inferior a 10%) e apenas fornecer o caminho desse script de shell para o cron job.

então, a cada 5 minutos (você pode alterar esse intervalo), o status da bateria será verificado e, se a bateria for inferior a 10%, o arquivo de som fornecido será reproduzido!

Espero que isto ajude!

Ponteiro nulo
fonte
3
Isso é direito, apenas as pessoas legais usar mpg123 :)
Scott Goodgame
3

Uma maneira fácil de fazer isso é adicionar uma verificação simples ao seu crontab (o cron é um sistema para executar as coisas regularmente, em uma base definida pelo usuário).

Primeiro, você precisa instalar um mp3 player e um ACPI para poder ler o estado da bateria.

Em um terminal, execute o seguinte para instalar os pacotes.

sudo apt-get install acpi mpg123

Em seguida, enquanto ainda estiver no terminal, digite crontab -ee digite o seguinte no final do arquivo. Apenas altere o usuário para seu nome de usuário e o arquivo .mp3 para seu nome de arquivo no diretório inicial.

*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'`  -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3   ;fi

Pressione Control-O (a letra) e Enter para salvar. Pressione Control-x para sair

Coisas extras que você pode querer ler ...

Ubuntu CronHowto

Guia do Ubuntu

Scott Goodgame
fonte
Não funcionou aqui: if ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; em seguida, /home/felipelalli/Music/siren.wav aplay; fi [: expressão inteiro esperado: remainin ➜ ~ ACPI bateria 0: Descarga, 9%, 00:17:56 restante
Felipe
2

Na verdade, usei a resposta de Andy Pyne, mas não funcionou para mim. O cron executou o código, mas não tocou o som. Finalmente encontrei a solução e a compartilhei aqui:

Etapa 1: instalar o mpg3

sudo apt-get install acpi mpg123

Etapa 2: salve o seguinte comando em~/bin/battery_alert

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ `acpi -b | awk ' { print ($3)}'`  == "Discharging," ] ; then
    # Discharging
    # Monitor for low battery
    if [ `acpi -b | awk ' { print ($4)-0}'`  -le "15" ] ; then
        pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_low.mp3 ;
    fi
else
    # Charging
    if [ `acpi -b | awk ' { print ($4)-0}'`  -eq "100" ] ; then
        # Fully charged
        pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_full.mp3 ;
    fi
fi

Esse script reproduz o arquivo battery_low.mp3 se o laptop estiver descarregando e a carga for menor ou igual a 15%. (Se a energia CA estiver conectada, não o alertará). Este código também alerta você, se a cobrança for 100%. Se você não deseja um alerta para o estado totalmente carregado, remova a parte else deste código.

Etapa 3: Torne o arquivo executável usando o seguinte comando.

chmod +x ~/bin/battery_alert

Etapa 4: execute este arquivo usando cron adicionando o seguinte comando ao final do arquivo opend by crontrab -ecommand.

*/5 * * * * /home/user/bin/battery_alert

(Não esqueça de ter uma linha vazia após este comando)

Gobinath
fonte