Wie kann ich einen benutzerdefinierten Sound abspielen, wenn die Batterie schwach ist?

13

Ich möchte, dass mein Computer eine benutzerdefinierte Audiodatei wiedergibt, wenn der Akku fast leer ist (etwa 10%). Wie kann ich das machen? Vielen Dank

vyb
quelle

Antworten:

6

Ich wollte nur antworten, da ich die Ratschläge auf dieser Seite zum Konfigurieren meines eigenen crontab -eJobs verwendet habe.

Ich leite Lubuntu (vertrauenswürdig) und das oben Genannte hat bei mir nicht funktioniert, aber mit ein wenig Nachbesserung hat es funktioniert. Mein Erfahrungslevel ist, dass ich relativ fähig bin, grundlegende Skripte und Befehle zu lesen, aber weniger in der Lage bin, sie in Linux Distos von Grund auf neu zu schreiben. Ich erwähne das, denn wenn ich einen funktionierenden Batteriealarm zusammenschustern kann, sollten die meisten von Ihnen, die dies lesen, dies auch können!

SO .... das Drehbuch und eine grundlegende Erklärung ....

Gemäß den obigen Beiträgen von Glutanimate und Scott Goodgame (danke Jungs!) Habe ich im Grunde Folgendes getan:

So erhalten Sie mpg123 und können Audio abspielen:

sudo apt-get install acpi mpg123

Zu öffnende Datei zum Schreiben des Befehls:

crontab -e

Befehl zum Eingeben am Ende der Datei:

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

Erklärung der oben genannten

Sternchen am Start

Die fünf Sternchen stehen für die Häufigkeit, mit der die Befehle ausgeführt werden sollen.

  • Erster Stern = Minuten: 0-59
  • Zweiter Stern = Stunden: 0-23
  • Dritter Stern = Tag des Monats: 0 - 31
  • Vierter Stern = Monat: 0 - 12
  • Fünfter Stern = Wochentag: 0 - 6 (0 bedeutet Sonntag)

*/1 * * * *

bedeutet "jede Minute ausführen".

WENN / DANN / FI:

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

Ich stelle mir vor, die meisten von Ihnen sind mit IF / THEN-Anweisungen sehr vertraut. Das FI am Ende schließt die IF-Anweisung ab

Audio abspielen:

mpg123 /home/andy/Alarm.mp3

Dies wird einfach verwendet mpg123, um eine Datei abzuspielen, die Alarm.mp3sich in meinem Ausgangsverzeichnis befindet /home/andy/.

Batterieinformationen ausgeben:

acpi -b

dies gibt einfach den Batteriestatus aus. Auf meinem Laptop liefert es Ergebnisse wie:

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

Pipe to awk Befehl

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

Okay, also leiten wir die Ausgabe des obigen Batteriestatus weiter und drucken den Sekunden-vom-Ende-Wert (NF-2), der im obigen Beispiel '74% 'ist. Wir müssen jedoch den Prozentsatz -0 entfernen . Wir wollen den aktuellen Wert mit dem Wert 15 -lt "15" vergleichen . Also, um es in einfachem Englisch zusammenzufassen,

WENN der Wert der Batterie WENIGER ALS 15% ist, DANN wird eine Audiodatei abgespielt

Ich schätze, dass ich es etwas heruntergefahren habe und vielleicht meine Erklärung verbessert werden könnte, aber ich hoffe, es wird jemand anderem helfen, einen Alarm für die Batterie hinzuzufügen und zu vermeiden, dass sich ihre Laptops plötzlich ausschalten!

Viel Glück!


BEARBEITEN

Okay ... also es stellt sich heraus, dass wenn mein Laptop aufgeladen wird, die Ausgabe von

acpi -b

ist:

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

während auf Batterie ist

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

Verwenden Sie dazu den eingangs genannten Parameter von

print ( $(NF-2)-0)

gibt unterschiedliche Ergebnisse aus, denn denken Sie daran, das NF- Wert- Bit gibt an, wie viele Elemente vom Ende der Ausgabe bis zur Anzeige rückwärts, also mit der Ausgabe auf Batterie, angezeigt werden

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

$(NF-2) gibt "36%" aus, während mit dem Laptop aufladen,

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

$(NF-2) gibt '00: 50: 12 'aus, dh die verbleibende Zeit bis zum Laden.

Das -0Nach- $(NF-2)Minus setzt den Wert auf Null. Wenn der Wert also ein Prozentwert ist, wird -0er von "36%" auf "36" geändert. Wenn der Ausgabewert als nicht numerisch wahrgenommen wird, z. B. die Zeitausgabe von '01: 04: 08 'wie oben, -0lautet der zurückgegebene Wert ' 0 '. So können Sie mein Problem sehen - wenn mein Laptop aufgeladen ist, ist der Ausgabewert immer '0'. Da ich einen Alarm auslösen möchte, wenn der Ausgabewert unter 15 liegt, wird ein Batteriealarm ausgelöst, der beim Laden jede Minute ertönt!

Ich habe etwas mehr über die Ausgabe des awkBefehls nachgelesen und es stellte sich heraus, dass ich nicht den zweiten Wert vom Ende an lesen musste. Ich konnte am Anfang der Ausgabe beginnen und vorwärts springen. Dies ist viel besser, da mein Batteriestatus in Bezug auf die Anzahl der Parameter gleich beginnt, egal ob er geladen oder batteriebetrieben ist, dh der vierte Parameter von Anfang an ist immer der Ladewert in Prozent.

SO ... damit es den vierten Wert liest, ändert sich der Befehl von

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

zu

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

oder in seiner ganzen Pracht:

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

Wieder hoffe ich, dass jemand hilft! Viel Glück und vielen Dank fürs Lesen!


BONUS BEARBEITEN

Okay, also ein bisschen mehr herumstöbern und ich habe auch herausgefunden, wie man die Lautstärke auf 100% stellt und die Stummschaltung aufhebt, bevor man den Alarm spielt. Haben Sie die Lautstärke auf leise gestellt oder stumm geschaltet ?!

Wie auch immer, der Befehl, den Sie brauchen, ist:

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

Wie Sie sehen, habe ich nur die Befehlszeichenfolge eingefügt

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

(die &&binden einfach mehrere Befehle zusammen)

Nochmals viel Glück an alle!

LAST EDIT

Okay, also ... eine letzte (hoffentlich!) Änderung ... anscheinend ist das Prozentzeichen ein besonderes Zeichen, wenn Cron-Tasks ausgeführt werden. Aus diesem Grund müssen Sie das Prozentzeichen durch Setzen eines Backslash ( \) vor jedes 'maskieren', %damit es von der Shell nicht (falsch) interpretiert wird.

Also im Grunde ersetzen

100%

mit

100\%

Daher ist der Befehl, den Sie wirklich brauchen:

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

puh hoffe das sortiert es für dich so wie es für mich hat !! (schließlich!)

Andy Pyne
quelle
Das ist eine großartige Erklärung! Leider ertönt auch beim Laden jede Minute ein Ton.
OpnSrcFan
5

Sie können einen Cron-Job einrichten, der alle 5 bis 10 Minuten den Batteriestatus überprüft und dann abhängig vom prozentualen Batteriestatus einen Ton ausgibt.

Zum Abspielen des Tons können Sie verwenden

mpg123 Dateiname.mp3

Um es zu installieren

sudo apt-get install mpg123

Mit diesem Befehl können Sie den Batteriestatus von der Befehlszeile abrufen

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

Mit können grepSie die genauen Informationen wie folgt extrahieren

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

Jetzt können Sie all diese Dinge in ein Shell-Skript schreiben (und auch eine ifBedingung, um zu prüfen, ob der Batteriestatus unter 10% liegt) und einfach den Pfad dieses Shell-Skripts zu cron job angeben.

Nach jeweils 5 Minuten (Sie können dieses Intervall ändern) wird Ihr Batteriestatus überprüft. Wenn die Batterie weniger als 10% beträgt, wird die von Ihnen bereitgestellte Audiodatei abgespielt.

Hoffe das hilft!

Null Zeiger
quelle
3
Das ist richtig, nur die coolen Leute verwenden mpg123 :)
Scott Goodgame
3

Eine einfache Möglichkeit, dies zu tun, besteht darin, Ihrer crontab eine einfache Überprüfung hinzuzufügen (cron ist ein System, mit dem die Dinge regelmäßig und benutzerdefiniert im Hintergrund ausgeführt werden.)

Zuerst müssen Sie einen Befehlszeilen-MP3-Player und acpi installieren, um den Batteriestatus lesen zu können.

Führen Sie von einem Terminal aus Folgendes aus, um die Pakete zu installieren.

sudo apt-get install acpi mpg123

Geben Sie als Nächstes, während Sie sich noch im Terminal befinden, crontab -eFolgendes an das Ende der Datei ein. Ändern Sie einfach den Benutzer in Ihren Benutzernamen und die .mp3 in Ihren Dateinamen in Ihrem Home-Verzeichnis.

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

Drücke Strg-O (der Buchstabe) und Enter, um zu speichern. Drücke Strg-x zum Verlassen

Zusätzliches Material, das Sie vielleicht lesen möchten ...

Ubuntu CronHowto

Ubuntu-Führer

Scott Goodgame
quelle
Hat hier nicht funktioniert: ➜ ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; dann aplay /home/felipelalli/Music/siren.wav; fi [: Integer-Ausdruck erwartet: verbleibend in ac ~ acpi Batterie 0: Entladen, 9%, 00:17:56 verbleibend
Felipe
2

Eigentlich habe ich die Antwort von Andy Pyne benutzt, aber es hat bei mir nicht funktioniert. Der Cron hat den Code ausgeführt, aber den Sound nicht abgespielt. Endlich habe ich die Lösung gefunden und teile sie hier:

Schritt 1: Installieren Sie mpg3

sudo apt-get install acpi mpg123

Schritt 2: Speichern Sie den folgenden Befehl 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

Dieses Skript gibt die Datei battery_low.mp3 wieder, wenn der Laptop entladen wird und die Ladung höchstens 15% beträgt. (Wenn eine Wechselstromquelle angeschlossen ist, werden Sie nicht gewarnt). Dieser Code warnt Sie auch, wenn die Gebühr 100% beträgt. Wenn Sie keine Warnung für den voll aufgeladenen Zustand erhalten möchten, entfernen Sie den else-Teil aus diesem Code.

Schritt 3: Führen Sie den folgenden Befehl aus, um die Datei ausführbar zu machen.

chmod +x ~/bin/battery_alert

Schritt 4: Führen Sie diese Datei mit cron aus, indem Sie den folgenden Befehl am Ende der Datei opend by- crontrab -eBefehl hinzufügen .

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

(Vergessen Sie nicht, nach diesem Befehl eine leere Zeile zu setzen.)

Gobinath
quelle