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

12

Eu quero que meu computador reproduza um arquivo de som personalizado quando minha bateria estiver baixa (por exemplo, 10%). Como posso fazer isso? Obrigado

    
por vyb 23.05.2014 / 03:04

4 respostas

6

Eu só queria responder, pois usei os conselhos nesta página para configurar meu próprio trabalho crontab -e .

Eu estou rodando o Lubuntu (fiel) e o acima não funcionou para mim, mas com alguns ajustes ele funcionou. Meu nível de (in) experiência é que eu sou relativamente capaz de ler scripts e comandos básicos, mas menos capaz de escrevê-los a partir do zero no linux disto. Eu mencionei isso porque se eu puder consertar um alarme de bateria funcionando, a maioria de vocês que está lendo isso deve ser capaz também!

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

De acordo com os posts acima por Glutanimate e Scott Goodgame (obrigado pessoal!), eu 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 acima

Asteriscos no início

Os cinco asteriscos representam a frequência na qual os comandos são executados.

  • Primeira estrela = minutos: 0 a 59
  • Segunda estrela = horas: 0 a 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 mpg123 para reproduzir um arquivo chamado Alarm.mp3 localizado no meu diretório home /home/andy/ .

Informações sobre a bateria de saída:

acpi -b

isto simplesmente mostra 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, então estamos distribuindo a saída do status da bateria acima e imprimindo o valor do segundo a partir do final (NF-2) , que o exemplo acima é '74% '. No entanto, precisamos remover a "porcentagem" -0 . Queremos comparar o valor atual com o valor 15 -lt "15" . Então, para resumir em inglês simples,

  

SE o valor da bateria for inferior a 15%, então reproduza um arquivo de áudio

Eu apreciei ter diminuído um pouco e talvez minha explicação pudesse 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

acpi -b

é:

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

enquanto que na bateria é

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

usando o parâmetro mencionado inicialmente de

print ( $(NF-2)-0)

gera resultados diferentes, porque lembre-se, o bit NF- valor especifica quantos itens para trás a partir do final da saída para exibir, assim com a saída na bateria de

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

$(NF-2) saídas '36% ', enquanto com o laptop responsável,

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

$(NF-2) outputs '00: 50: 12 ', ou seja, o tempo restante até ser cobrado.

O -0 após $(NF-2) diminui o zero do valor, portanto, quando o valor é um percentual -0 , altera de algo como '36% 'para' 36 '. Quando o valor de saída é percebido como não numérico, como a saída de hora de '01: 04: 08 'como acima, o valor -0 returns é' 0 '. Então você pode ver o meu problema - quando o meu laptop está no comando, o valor de saída é sempre '0'. Como quero tocar um alarme quando o valor de saída for menor que 15, ele se traduz em um alarme de bateria que se apaga a cada um minuto quando estiver em carga!

Eu li um pouco mais sobre a saída do comando awk e, ao final, não precisei ler o segundo valor do final. Eu pude começar do início da saída e pular para frente. . Isso é muito melhor, pois o status da minha bateria começa do mesmo modo, seja no modo de carga ou na bateria em termos de número de parâmetros, ou seja, o quarto parâmetro do início é sempre o valor da carga em porcentagem.

SO ... para fazer com que ele leia o quarto valor, o comando muda de

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

para

awk ' { print ()-0}'

ou em toda a sua glória:

*/1 * * * * if [ 'acpi -b | awk ' { print ()-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, um pouco mais de atenção e eu também trabalhei em como ajustar o volume para 100% e ativar antes de tocar o alarme - porque, vamos encarar, qual é o objetivo de um alarme de bateria se você não consegue ouvi-lo? porque você definiu o volume como baixo ou mudo?!

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

*/1 * * * * if [ 'acpi -b | awk ' { print ()-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 que eu fiz foi inserir a string de comando

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

(os && apenas ligam vários comandos juntos)

Mais uma vez, boa sorte a todos!

ÚLTIMA EDIÇÃO

Ok, então ... uma final (esperançosamente!edite ... aparentemente, o sinal de porcentagem é um sinal especial ao executar tarefas do cron. Portanto, você precisa 'escapar' do sinal de porcentagem colocando uma barra invertida ( \ ) na frente de cada % , de modo que não seja (mal) interpretada pelo shell.

Então, basicamente, substitua

100%

com

100\%

Portanto, o comando que você realmente precisa é:

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

phew espero que o classifique para você como tem para mim !! (eventualmente!)

    
por Andy Pyne 19.02.2015 / 23:53
5

Você pode configurar uma tarefa cron que verificará o status da bateria após cada 5/10 minutos e, dependendo da porcentagem da bateria, reproduzirá algum som.

Para reproduzir o som que você pode usar

mpg123 nome_do_arquivo.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 grep , você pode extrair as informações exatas da seguinte forma

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 condição if para verificar se o status da bateria é menor que 10%) e apenas fornecer o caminho deste shell script para o cron job.

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

Espero que isso ajude!

    
por Null pointer 23.05.2014 / 04:59
3

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

Primeiro você precisa instalar um mp3 player de linha de comando e um acpi para poder ler o estado da bateria.

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

sudo apt-get install acpi mpg123

Em seguida, ainda no terminal, digite crontab -e e digite o seguinte no final do arquivo. Apenas mude o usuário para o seu nome de usuário e o .mp3 para o seu nome de arquivo no seu diretório pessoal.

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

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

Coisas extras que você pode querer ler ...

Ubuntu CronHowto

Guia do Ubuntu

    
por Scott Goodgame 23.05.2014 / 04:58
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 compartilhei aqui:

Passo 1: Instale 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 ()}''  == "Discharging," ] ; then
    # Discharging
    # Monitor for low battery
    if [ 'acpi -b | awk ' { print ()-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 ()-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

Este script reproduz battery_low.mp3 se o laptop estiver descarregando e a carga for menor ou igual a 15%. (Se a energia CA estiver conectada, ela não irá alertá-lo). Esse código também avisa, se a cobrança for 100%. Se você não quiser 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 o cron adicionando o seguinte comando ao final do arquivo aberto pelo comando crontrab -e .

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

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

    
por Gobinath 08.11.2015 / 08:29