Come posso riprodurre un suono personalizzato quando la batteria è scarica?


13

Voglio che il mio computer riproduca un file audio personalizzato quando la batteria è scarica (diciamo 10%). Come posso fare questo? Grazie

Risposte:


6

Volevo solo rispondere mentre utilizzavo i consigli in questa pagina per configurare il mio crontab -elavoro.

Sto eseguendo Lubuntu (fidato) e quanto sopra non ha funzionato per me, ma con un po 'di modifiche ha funzionato. Il mio livello di esperienza (in) è che sono relativamente in grado di leggere script e comandi di base, ma meno in grado di scriverli da zero in Linux Disto. Lo dico perché se riesco a mettere insieme un allarme di batteria funzionante, la maggior parte di voi che leggono questo dovrebbe essere in grado di farlo!

Quindi .... la sceneggiatura e una spiegazione di base ....

Come per i post sopra di Glutanimate e Scott Goodgame (grazie ragazzi!), Ho praticamente fatto quanto segue:

Per ottenere mpg123 ed essere in grado di riprodurre l'audio:

sudo apt-get install acpi mpg123

File da aprire per scrivere il comando:

crontab -e

Comando per inserire alla fine del file:

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

Spiegazione di quanto sopra

Asterischi all'inizio

I cinque asterischi rappresentano la frequenza con cui eseguire i comandi.

  • Prima stella = minuti: 0-59
  • Seconda stella = Ore: 0-23
  • Terza stella = Giorno del mese: 0 - 31
  • Quarta stella = mese: 0-12
  • Quinta stella = Giorno della settimana: 0 - 6 (0 significa domenica)

*/1 * * * *

significa "esegui questo ogni minuto".

If / then / FI:

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

La maggior parte di voi, immagino, hanno molta familiarità con le affermazioni IF / THEN. L'IF alla fine conclude la dichiarazione IF

Riproduzione dell'audio:

mpg123 /home/andy/Alarm.mp3

questo semplicemente utilizza mpg123per riprodurre un file chiamato Alarm.mp3situato nella mia home directory /home/andy/.

Informazioni sulla batteria di uscita:

acpi -b

questo semplicemente emette lo stato della batteria. Sul mio laptop produce risultati come:

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

Comando pipe to awk

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

Ok, quindi stiamo eseguendo il piping dell'output dello stato della batteria sopra e stampando il valore secondo dalla fine (NF-2) che nell'esempio sopra è '74% '. Tuttavia, dobbiamo rimuovere la 'percentuale' -0 . Vogliamo confrontare il valore corrente con il valore 15 -lt "15" . Quindi per riassumere in un inglese semplice,

SE il valore della batteria è MENO DEL 15% ALLORA, riprodurre un file audio

Apprezzo di averlo attenuato un po 'e forse la mia spiegazione potrebbe essere migliorata, ma spero che possa aiutare qualcun altro a capire come aggiungere un allarme per la batteria ed evitare che i loro laptop si spengano all'improvviso!

In bocca al lupo!


MODIFICARE

Va bene ... quindi si scopre che quando il mio laptop si sta caricando, l'output di

acpi -b

è:

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

mentre sulla batteria è

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

quindi usando il parametro menzionato inizialmente di

print ( $(NF-2)-0)

genera risultati diversi, perché ricorda, il bit del valore NF specifica quanti elementi indietro dalla fine dell'output visualizzare, quindi con l'output sulla batteria di

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

$(NF-2) genera "36%" mentre con il laptop in carica,

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

$(NF-2) genera '00: 50: 12 ', ovvero la quantità di tempo rimanente fino alla carica.

Il -0dopo $(NF-2)svuota lo zero dal valore, quindi quando il valore è una percentuale lo -0cambia da qualcosa come '36% 'a' 36 '. Quando il valore di output viene percepito come non numerico, come nel caso dell'output temporale di '01: 04: 08 'come sopra, il valore -0restituito è' 0 '. Quindi puoi vedere il mio problema: quando il mio laptop è in carica, il valore di output è sempre "0". Dal momento che voglio suonare un allarme quando il valore di uscita è inferiore a 15, si traduce in un allarme della batteria che si spegne ogni minuto quando è in carica!

Ho letto un po 'di più sull'output del awkcomando e risulta che non avevo bisogno di farlo leggere il secondo valore dalla fine, potevo iniziare dall'inizio dell'output e saltare avanti. Questo è molto meglio poiché lo stato della mia batteria inizia allo stesso modo sia in carica che in batteria in termini di numero di parametri, ovvero il quarto parametro dall'inizio è sempre il valore della carica in percentuale.

SO ... per farlo leggere il quarto valore, il comando cambia da

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

per

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

o nella sua piena gloria:

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

Spero di nuovo che aiuti qualcuno! Buona fortuna e grazie per aver letto!


BONUS EDIT

Va bene, quindi un po 'di più in giro e ho anche scoperto come impostare il volume al 100% e riattivare l'audio prima di suonare l'allarme - perché ammettiamolo, qual è il punto di un allarme della batteria se non riesci a sentirlo perché tu' hai impostato il volume su basso o disattivato ?!

Ad ogni modo, il comando che ti serve è:

*/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

come puoi vedere, tutto quello che ho fatto è stata inserita la stringa di comando

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

(si &&collegano solo più comandi insieme)

Ancora buona fortuna a tutti!

ULTIMA MODIFICA

Ok, quindi ... un'ultima modifica (si spera!) Apparentemente ... il segno di percentuale è un segno speciale quando si eseguono attività cron. Pertanto, devi 'sfuggire' al segno di percentuale mettendo una barra rovesciata ( \) davanti a ciascuna in %modo che non sia (mis) interpretata dalla shell.

Quindi, in sostanza, sostituire

100%

con

100\%

Pertanto, il comando di cui hai davvero bisogno è:

*/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

Spero che lo ordini per te come per me! (infine!)


Questa è un'ottima spiegazione! Sfortunatamente, durante la ricarica riproduce anche un suono ogni minuto.
OpnSrcFan

5

È possibile impostare un processo cron che controllerà lo stato della batteria ogni 5/10 minuti e quindi, in base alla percentuale della batteria, verrà riprodotto un suono.

Per riprodurre l'audio è possibile utilizzare

mpg123 filename.mp3

Per installarlo

sudo apt-get install mpg123

Per ottenere lo stato della batteria dalla riga di comando è possibile utilizzare questo comando

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

usando greppuoi estrarre le informazioni esatte come segue

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

Ora puoi mettere tutte queste cose in uno script di shell (e anche una ifcondizione per verificare se lo stato della batteria è inferiore al 10%) e dare semplicemente il percorso di questo script di shell al cron job.

quindi ogni 5 minuti (è possibile modificare questo intervallo) verrà verificato lo stato della batteria e se la batteria è inferiore al 10% verrà riprodotto il file audio fornito!

Spero che sia di aiuto!


3
Proprio così, solo le persone fantastiche usano mpg123 :)
Scott Goodgame,

3

Un modo semplice per farlo è quello di aggiungere un semplice controllo al tuo crontab (cron è un sistema per eseguire le cose su base regolare, definita dall'utente in background.)

Per prima cosa è necessario installare un lettore mp3 a riga di comando e acpi per poter leggere lo stato della batteria.

Da un terminale eseguire quanto segue per installare i pacchetti.

sudo apt-get install acpi mpg123

Quindi, mentre sei ancora nel terminale, digita crontab -ee inserisci quanto segue alla fine del file. Basta cambiare l'utente con il tuo nome utente e .mp3 con il tuo nome file nella tua home directory.

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

Premi Control-O (la lettera) e Invio per salvare. Premi Control-x per uscire

Altre cose che potresti voler leggere ...

Ubuntu CronHowto

Guida di Ubuntu


Non ha funzionato qui: ➜ ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; quindi aplay /home/felipelalli/Music/siren.wav; fi [: espressione intera prevista: rimanendo ➜ ~ acpi Batteria 0: scarica, 9%, 00:17:56 rimanente
Felipe

2

In realtà ho usato la risposta di Andy Pyne ma non ha funzionato per me. Il cron ha eseguito il codice, ma non ha riprodotto il suono. Finalmente ho trovato la soluzione e condividerla qui:

Passaggio 1: installare mpg3

sudo apt-get install acpi mpg123

Passaggio 2: salvare il comando seguente in~/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

Questo script riproduce battery_low.mp3 se il laptop si sta scaricando e la carica è inferiore o uguale al 15%. (Se l'alimentazione CA è collegata, non ti avviserà). Questo codice ti avvisa anche se l'addebito è del 100%. Se non si desidera un avviso per lo stato completamente carico, rimuovere la parte else da questo codice.

Passaggio 3: rendere eseguibile il file utilizzando il seguente comando.

chmod +x ~/bin/battery_alert

Passaggio 4: eseguire questo file utilizzando cron aggiungendo il comando seguente alla fine del file aperto dal crontrab -ecomando.

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

(Non dimenticare di avere una riga vuota dopo questo comando)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.