Comment puis-je jouer un son personnalisé lorsque ma batterie est faible?

13

Je veux que mon ordinateur joue un fichier son personnalisé lorsque ma batterie est faible (disons 10%). Comment puis-je faire ceci? Merci

vyb
la source

Réponses:

6

Je voulais juste répondre car j'ai utilisé les conseils de cette page pour configurer mon propre crontab -etravail.

Je dirige Lubuntu (fidèle) et ce qui précède n'a pas fonctionné pour moi, mais avec un petit ajustement, cela a fonctionné. Mon niveau d'expérience (in) est que je suis relativement capable de lire des scripts et des commandes de base, mais moins capable de les écrire à partir de zéro dans les disto de Linux. Je mentionne cela parce que si je peux bricoler une alarme de batterie qui fonctionne, la plupart d'entre vous qui lisez ceci devraient également pouvoir!

SO .... le script et une explication de base ....

Selon les articles ci-dessus de Glutanimate et Scott Goodgame (merci les gars!), J'ai essentiellement fait ce qui suit:

Pour obtenir mpg123 et pouvoir lire de l'audio:

sudo apt-get install acpi mpg123

Fichier à ouvrir pour écrire la commande:

crontab -e

Commande à saisir à la fin du fichier:

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

Explication de ce qui précède

Astérisques au début

Les cinq astérisques représentent la fréquence à laquelle exécuter les commandes.

  • Première étoile = minutes: 0-59
  • Deuxième étoile = Heures: 0-23
  • Troisième étoile = jour du mois: 0 - 31
  • Quatrième étoile = Mois: 0 - 12
  • Cinquième étoile = jour de la semaine: 0 - 6 (0 signifie dimanche)

*/1 * * * *

signifie «exécuter cela toutes les minutes».

SI / ALORS / FI:

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

J'imagine que la plupart d'entre vous connaissent très bien les déclarations IF / THEN. L'IF à la fin conclut la déclaration du CI

Lecture de l'audio:

mpg123 /home/andy/Alarm.mp3

cela permet simplement mpg123de lire un fichier appelé Alarm.mp3situé dans mon répertoire personnel /home/andy/.

Informations sur la batterie de sortie:

acpi -b

cela émet simplement l'état de la batterie. Sur mon ordinateur portable, cela donne des résultats tels que:

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

Commande Pipe to awk

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

D'accord, nous canalisons la sortie de l'état de la batterie ci-dessus et imprimons la deuxième valeur de fin (NF-2) qui dans l'exemple ci-dessus est '74% '. Cependant, nous devons supprimer le «pourcentage» -0 . Nous voulons comparer la valeur actuelle avec la valeur 15 -lt "15" . Donc, pour résumer en anglais simple,

SI la valeur de la batterie est inférieure à 15% ALORS lire un fichier audio

J'apprécie de l'avoir un peu abruti et peut-être que mon explication pourrait être améliorée, mais j'espère que cela aidera quelqu'un d'autre à comprendre comment ajouter une alarme pour la batterie et éviter que leurs ordinateurs portables ne s'éteignent tout d'un coup!

Bonne chance!


ÉDITER

D'accord ... il s'avère donc que lorsque mon ordinateur portable est en charge, la sortie de

acpi -b

est:

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

tandis que sur batterie est

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

donc en utilisant le paramètre mentionné initialement

print ( $(NF-2)-0)

génère des résultats différents, car rappelez-vous, le bit de valeur NF spécifie le nombre d'éléments vers l'arrière depuis la fin de la sortie à afficher, donc avec la sortie sur batterie de

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

$(NF-2) produit "36%" alors qu'avec l'ordinateur portable en charge,

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

$(NF-2) sorties '00: 50: 12 ', c'est-à-dire le temps restant avant la charge.

L' -0après $(NF-2)réduit zéro de la valeur, donc lorsque la valeur est un pourcentage -0, elle passe de quelque chose comme '36% 'à' 36 '. Lorsque la valeur de sortie est perçue comme non numérique, telle que la sortie de temps de '01: 04: 08 'comme ci-dessus, la valeur -0renvoyée est' 0 '. Vous pouvez donc voir mon problème - lorsque mon ordinateur portable est en charge, la valeur de sortie est toujours «0». Comme je veux jouer une alarme lorsque la valeur de sortie est inférieure à 15, cela se traduit par une alarme de batterie qui se déclenche toutes les minutes lorsqu'il est en charge!

J'ai lu un peu plus sur la sortie de la awkcommande et il s'est avéré que je n'avais pas besoin de lui faire lire la deuxième valeur depuis la fin, je pouvais commencer depuis le début de la sortie et avancer. C'est beaucoup mieux car l'état de ma batterie commence de la même manière, qu'il soit en charge ou sur batterie en termes de nombre de paramètres, c'est-à-dire que le quatrième paramètre depuis le début est toujours la valeur de charge en pourcentage.

SO ... pour lui faire lire la quatrième valeur, la commande passe de

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

à

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

ou dans toute sa splendeur:

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

Encore une fois, j'espère que cela aide quelqu'un! Bonne chance et merci pour la lecture!


BONUS EDIT

D'accord, donc un peu de fouille supplémentaire et j'ai également trouvé comment régler le volume à 100% et réactiver le son avant de jouer l'alarme - car avouons-le, à quoi sert une alarme de batterie si vous ne pouvez pas l'entendre parce que vous '' ai-je réglé le volume sur faible ou coupé?!

Quoi qu'il en soit, la commande dont vous avez besoin est:

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

comme vous pouvez le voir, tout ce que j'ai fait est inséré la chaîne de commande

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

(il &&suffit de lier plusieurs commandes ensemble)

Encore une fois, bonne chance à tous!

DERNIÈRE ÉDITION

D'accord, donc ... une dernière édition (espérons-le!) ... apparemment, le signe de pourcentage est un signe spécial lors de l'exécution de tâches cron. Par conséquent, vous devez «échapper» au signe de pourcentage en plaçant une barre oblique inverse ( \) devant chacun %afin qu'il ne soit pas (mal) interprété par le shell.

Donc, en gros, remplacez

100%

avec

100\%

Par conséquent, la commande dont vous avez vraiment VRAIMENT besoin est:

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

ouf j'espère que ça le trie pour vous comme ça l'a fait pour moi !! (finalement!)

Andy Pyne
la source
Ceci est une excellente explication! Malheureusement, il émet également un son toutes les minutes lors de la charge.
OpnSrcFan
5

Vous pouvez configurer une tâche cron qui vérifiera l'état de la batterie toutes les 5/10 minutes, puis en fonction du pourcentage de la batterie, un son sera émis.

Pour jouer le son, vous pouvez utiliser

mpg123 filename.mp3

Pour l'installer

sudo apt-get install mpg123

Pour obtenir l'état de la batterie à partir de la ligne de commande, vous pouvez utiliser cette commande

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

en utilisant, grepvous pouvez extraire les informations exactes comme suit

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

Maintenant, vous pouvez mettre toutes ces choses dans un script shell (et également une ifcondition pour vérifier si l'état de la batterie est inférieur à 10%) et donner simplement le chemin de ce script shell au travail cron.

donc toutes les 5 minutes (vous pouvez modifier cet intervalle), l'état de votre batterie sera vérifié et si la batterie est inférieure à 10%, votre fichier audio fourni sera lu!

J'espère que cela t'aides!

Pointeur nul
la source
3
C'est vrai, seuls les gens sympas utilisent mpg123 :)
Scott Goodgame
3

Une façon simple de le faire est d'ajouter une simple vérification à votre crontab (cron est un système pour exécuter les choses sur une base régulière définie par l'utilisateur en arrière-plan.)

Vous devez d'abord installer un lecteur mp3 en ligne de commande et acpi pour pouvoir lire l'état de la batterie.

À partir d'un terminal, exécutez ce qui suit pour installer les packages.

sudo apt-get install acpi mpg123

Ensuite, pendant que vous êtes encore dans le terminal, saisissez crontab -eet entrez ce qui suit à la fin du fichier. Modifiez simplement l'utilisateur par votre nom d'utilisateur et le .mp3 par votre nom de fichier dans votre répertoire personnel.

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

Appuyez sur Control-O (la lettre) et Entrée pour enregistrer. Appuyez sur Control-x pour quitter

Des trucs supplémentaires que vous voudrez peut-être lire ...

Ubuntu CronHowto

Guide Ubuntu

Scott Goodgame
la source
N'a pas fonctionné ici: ➜ ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; puis aplay /home/felipelalli/Music/siren.wav; fi [: expression entière attendue: restant dans ➜ ~ acpi Batterie 0: Décharge, 9%, 00:17:56 restante
Felipe
2

En fait, j'ai utilisé la réponse d' Andy Pyne mais cela n'a pas fonctionné pour moi. Le cron a exécuté le code, mais il n'a pas joué le son. Enfin, j'ai trouvé la solution et je la partage ici:

Étape 1: installez mpg3

sudo apt-get install acpi mpg123

Étape 2: enregistrez la commande suivante dans~/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

Ce script joue battery_low.mp3 si l'ordinateur portable se décharge et que la charge est inférieure ou égale à 15%. (Si l'alimentation secteur est connectée, elle ne vous alertera pas). Ce code vous avertit également, si la charge est de 100%. Si vous ne voulez pas d'alerte pour l'état complètement chargé, supprimez la partie else de ce code.

Étape 3: rendez le fichier exécutable à l'aide de la commande suivante.

chmod +x ~/bin/battery_alert

Étape 4: exécutez ce fichier à l'aide de cron en ajoutant la commande suivante à la fin du fichier opend by crontrab -ecommand.

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

(N'oubliez pas d'avoir une ligne vide après cette commande)

Gobinath
la source