¿Cómo puedo reproducir un sonido personalizado cuando la batería está baja?

13

Quiero que mi computadora reproduzca un archivo de sonido personalizado cuando mi batería esté baja (digamos 10%). ¿Cómo puedo hacer esto? Gracias

vyb
fuente

Respuestas:

6

Solo quería responder, ya que usé los consejos de esta página para configurar mi propio crontab -etrabajo.

Estoy ejecutando Lubuntu (de confianza) y lo anterior no funcionó para mí, pero con un pequeño ajuste lo hizo. Mi nivel de (in) experiencia es que soy relativamente capaz de leer scripts y comandos básicos, pero menos capaz de escribirlos desde cero en Linux disto. Menciono eso porque si puedo armar una alarma de batería que funcione, ¡la mayoría de ustedes que lo lean también deberían poder hacerlo!

SO .... el guión y una explicación básica ...

Según las publicaciones anteriores de Glutanimate y Scott Goodgame (¡gracias chicos!) Básicamente hice lo siguiente:

Para obtener mpg123 y poder reproducir audio:

sudo apt-get install acpi mpg123

Archivo para abrir para escribir el comando:

crontab -e

Comando para ingresar al final del archivo:

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

Explicación de lo anterior

Asteriscos al inicio

Los cinco asteriscos representan la frecuencia con la que se ejecutan los comandos.

  • Primera estrella = Minutos: 0-59
  • Segunda estrella = Horas: 0-23
  • Tercera estrella = Día del mes: 0 - 31
  • Cuarta estrella = Mes: 0-12
  • Quinta estrella = Día de la semana: 0 - 6 (0 significa domingo)

*/1 * * * *

significa "ejecutar esto cada minuto".

SI / ENTONCES / FI:

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

La mayoría de ustedes, imagino, están muy familiarizados con las declaraciones IF / THEN. El FI al final concluye la declaración IF

Reproduciendo el audio:

mpg123 /home/andy/Alarm.mp3

esto simplemente se usa mpg123para reproducir un archivo llamado Alarm.mp3ubicado en mi directorio de inicio /home/andy/.

Información de la batería de salida:

acpi -b

esto simplemente muestra el estado de la batería. En mi computadora portátil produce resultados como:

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

Pipe to awk command

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

Bien, entonces estamos canalizando la salida del estado de la batería arriba e imprimiendo el segundo valor desde el final (NF-2) que en el ejemplo anterior es '74% '. Sin embargo, necesitamos eliminar el 'porcentaje' -0 . Queremos comparar el valor actual con el valor 15 -lt "15" . Para resumirlo en inglés simple,

SI el valor de la batería es MENOR DE 15% ENTONCES reproducir un archivo de audio

Aprecio que lo haya simplificado un poco y tal vez mi explicación podría mejorarse, pero espero que ayude a alguien más a comprender cómo agregar una alarma para la batería y evitar que sus computadoras portátiles se apaguen de repente.

¡Buena suerte!


EDITAR

De acuerdo ... resulta que cuando mi laptop se está cargando, la salida de

acpi -b

es:

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

mientras que en la batería es

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

entonces usando el parámetro mencionado inicialmente de

print ( $(NF-2)-0)

produce diferentes resultados, porque recuerde, el bit de valor NF especifica cuántos elementos hacia atrás desde el final de la salida para mostrar, por lo tanto, con la salida en batería de

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

$(NF-2) produce '36% 'mientras que con el portátil cargado,

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

$(NF-2) salidas '00: 50: 12 ', es decir, la cantidad de tiempo restante hasta la carga.

El -0después de $(NF-2)sus menos cero desde el valor, por lo que cuando el valor es un porcentaje -0cambia de algo como '36%' a '36'. Cuando el valor de salida se percibe como no numérico, como la salida de tiempo de '01: 04: 08 'como se indicó anteriormente, el valor -0devuelto es' 0 '. Entonces puede ver mi problema: cuando mi computadora portátil está en carga, el valor de salida siempre es '0'. Como quiero reproducir una alarma cuando el valor de salida es inferior a 15, ¡se traduce en una alarma de batería que se activa cada minuto cuando se está cargando!

Leí un poco más sobre la salida del awkcomando y resultó que no necesitaba hacer que leyera el segundo valor desde el final, podría comenzar desde el principio de la salida y saltar hacia adelante. Esto es mucho mejor ya que el estado de mi batería comienza igual, ya sea en carga o en batería en términos de número de parámetros, es decir, el cuarto parámetro desde el principio siempre es el valor de carga en porcentaje.

SO ... para que lea el cuarto valor, el comando cambia de

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

a

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

o en toda su gloria:

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

De nuevo espero que eso ayude a alguien! Buena suerte y gracias por leer!


EDICIÓN DE BONIFICACIÓN

De acuerdo, así que hurgué un poco más y también descubrí cómo configurar el volumen al 100% y activar el silencio antes de tocar la alarma, porque seamos sinceros, ¿cuál es el punto de una alarma de batería si no puedes escucharla porque ' ¿He ajustado el volumen a bajo o lo he silenciado?

De todos modos, el comando que necesitas es:

*/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 puede ver, todo lo que he hecho es insertar la cadena de comando

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

( &&El solo une varios comandos juntos)

Nuevamente, buena suerte a todos!

ÚLTIMA EDICIÓN

Bien, entonces ... una edición final (¡con suerte!) ... aparentemente, el signo de porcentaje es un signo especial cuando se ejecutan tareas cron. Por lo tanto, debe 'escapar' del signo de porcentaje colocando una barra diagonal inversa ( \) delante de cada uno %para que el shell no lo interprete (mal).

Así que básicamente reemplaza

100%

con

100\%

Por lo tanto, el comando que REALMENTE necesita es:

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

¡¡ Espero que eso lo clasifique para ti como lo ha hecho para mí !! (¡finalmente!)

Andy Pyne
fuente
Esta es una gran explicación! Desafortunadamente, también reproduce un sonido cada minuto cuando se carga.
OpnSrcFan
5

Puede configurar un trabajo cron que verificará el estado de la batería después de cada 5/10 min y luego, dependiendo del porcentaje de batería, reproducirá algo de sonido.

Para reproducir el sonido puedes usar

mpg123 filename.mp3

Para instalarlo

sudo apt-get install mpg123

Para obtener el estado de la batería desde la línea de comandos, puede usar este comando

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

utilizando greppuede extraer la información exacta de la siguiente manera

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

Ahora puede poner todas estas cosas en un script de shell (y también una ifcondición para verificar si el estado de la batería es inferior al 10%) y simplemente dar la ruta de este script de shell al trabajo cron.

así que después de cada 5 minutos (puede cambiar este intervalo) se comprobará el estado de su batería y, si la batería es inferior al 10%, se reproducirá el archivo de sonido proporcionado.

¡Espero que esto ayude!

Puntero nulo
fuente
3
Así es, solo las personas geniales usan mpg123 :)
Scott Goodgame
3

Una manera fácil de hacer esto es agregar una verificación simple a su crontab (cron es un sistema para ejecutar cosas de forma regular y definida por el usuario en segundo plano).

Primero debe instalar un reproductor de mp3 de línea de comandos y acpi para poder leer el estado de la batería.

Desde una terminal ejecute lo siguiente para instalar los paquetes.

sudo apt-get install acpi mpg123

A continuación, mientras aún está en la terminal, escriba crontab -ee ingrese lo siguiente al final del archivo. Simplemente cambie el usuario a su nombre de usuario y el .mp3 a su nombre de archivo en su directorio de inicio.

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

Presiona Control-O (la letra) y Enter para guardar. Presiona Control-x para salir

Cosas extra que tal vez quieras leer ...

Ubuntu CronHowto

Guía de Ubuntu

Scott Goodgame
fuente
No funcionó aquí: ➜ ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; luego aplay /home/felipelalli/Music/siren.wav; fi [: expresión entera esperada: permanecer en ➜ ~ acpi Batería 0: Descarga, 9%, 00:17:56 restante
Felipe
2

En realidad, utilicé la respuesta de Andy Pyne, pero no funcionó para mí. El cron ejecutó el código, pero no reprodujo el sonido. Finalmente encontré la solución y la comparto aquí:

Paso 1: Instalar mpg3

sudo apt-get install acpi mpg123

Paso 2: guarde el siguiente comando en~/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

Este script reproduce battery_low.mp3 si la computadora portátil se está descargando y la carga es menor o igual al 15%. (Si la alimentación de CA está conectada, no lo alertará). Este código también lo alerta si el cargo es del 100%. Si no desea una alerta para el estado de carga completa, elimine la parte else de este código.

Paso 3: Haz que el archivo sea ejecutable con el siguiente comando.

chmod +x ~/bin/battery_alert

Paso 4: Ejecute este archivo usando cron agregando el siguiente comando al final del archivo opend by crontrab -ecommand.

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

(No olvides tener una línea vacía después de este comando)

Gobinath
fuente