Jak mogę odtworzyć niestandardowy dźwięk, gdy poziom naładowania baterii jest niski?


13

Chcę, aby mój komputer odtwarzał niestandardowy plik dźwiękowy, gdy poziom naładowania baterii jest niski (powiedzmy 10%). W jaki sposób mogę to zrobić? Dzięki

Odpowiedzi:


6

Chciałem tylko odpowiedzieć, ponieważ skorzystałem z porad na tej stronie, aby skonfigurować własne crontab -ezadanie.

Używam Lubuntu (zaufanego) i powyższe nie działało dla mnie, ale z drobnymi poprawkami to działało. Mój poziom (nie) doświadczenia polega na tym, że jestem stosunkowo zdolny do czytania podstawowych skryptów i poleceń, ale mniej zdolny do pisania ich od zera w Linuksie. Wspominam o tym, ponieważ jeśli potrafię zebrać razem działający alarm baterii, większość z was czytających to również powinna!

SO .... skrypt i podstawowe wyjaśnienie ....

Zgodnie z powyższymi postami Glutanimate i Scott Goodgame (dzięki chłopaki!) W zasadzie zrobiłem następujące:

Aby uzyskać mpg123 i móc odtwarzać dźwięk:

sudo apt-get install acpi mpg123

Plik do otwarcia w celu napisania polecenia:

crontab -e

Polecenie, aby wprowadzić na końcu pliku:

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

Wyjaśnienie powyższego

Gwiazdki na początku

Pięć gwiazdek oznacza częstotliwość uruchamiania poleceń.

  • Pierwsza gwiazdka = Minuty: 0–59
  • Druga gwiazda = godziny: 0–23
  • Trzecia gwiazda = dzień miesiąca: 0–31
  • Czwarta gwiazda = miesiąc: 0–12
  • Piąta gwiazda = dzień tygodnia: 0–6 (0 oznacza niedzielę)

*/1 * * * *

oznacza „uruchom to co minutę”.

IF / THEN / FI:

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

Wydaje mi się, że większość z was bardzo dobrze zna stwierdzenia IF / THEN. FI na końcu kończy stwierdzenie IF

Odtwarzanie dźwięku:

mpg123 /home/andy/Alarm.mp3

służy to po prostu mpg123do odtworzenia pliku o nazwie Alarm.mp3znajdującego się w moim katalogu domowym /home/andy/.

Informacje o baterii wyjściowej:

acpi -b

to po prostu wyświetla stan baterii. Na moim laptopie daje takie wyniki, jak:

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

Polecenie potok do awk

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

Okej, więc przesyłamy wynik stanu baterii powyżej i wypisujemy drugą wartość od końca (NF-2), która w powyższym przykładzie wynosi „74%”. Musimy jednak usunąć „procent” -0 . Chcemy porównać bieżącą wartość z wartością 15- lt „15” . Podsumowując, w prostym angielskim,

JEŻELI wartość baterii jest NIŻSZA NIŻ 15% NALEŻY odtworzyć plik audio

Rozumiem, że nieco go stłumiłem i być może moje wyjaśnienie mogłoby zostać poprawione, ale mam nadzieję, że pomoże to komuś innemu zrozumieć, jak dodać alarm dla baterii i uniknąć sytuacji, w której ich laptopy nagle się wyłączą!

Powodzenia!


EDYTOWAĆ

Ok ... więc okazuje się, że kiedy mój laptop się ładuje, moc wyjściowa

acpi -b

jest:

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

podczas gdy na baterii jest

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

więc używając parametru wymienionego początkowo z

print ( $(NF-2)-0)

wyprowadza różne wyniki, ponieważ pamiętaj, bit wartości NF określa, ile elementów wstecz od końca wyjścia do wyświetlenia, więc przy wyjściu na baterii

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

$(NF-2) daje „36%”, podczas gdy laptop jest naładowany,

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

$(NF-2) wyprowadza „00: 50: 12”, tj. czas pozostały do ​​naładowania.

-0Po $(NF-2)minusów zero z wartości, więc kiedy wartość jest procent -0zmienia go z czymś takim '36%”do«36». Gdy wartość wyjściowa jest postrzegana jako nieliczbowa, na przykład wynik czasowy „01: 04: 08” jak powyżej, -0zwracana jest wartość „0”. Możesz więc zobaczyć mój problem - gdy mój laptop jest naładowany, wartość wyjściowa wynosi zawsze „0”. Ponieważ chcę uruchomić alarm, gdy wartość wyjściowa jest mniejsza niż 15, przekłada się to na alarm baterii, który włącza się co minutę, gdy jest ładowany!

Przeczytałem trochę więcej na wyjściu awkpolecenia i okazało się, że nie musiałem zmuszać go do odczytania drugiej wartości od końca, mogłem zacząć od początku wyjścia i przejść do przodu. Jest to o wiele lepsze, ponieważ stan mojego akumulatora zaczyna się tak samo, niezależnie od tego, czy jest on naładowany, czy akumulatorowy pod względem liczby parametrów, tj. Czwartym parametrem od początku jest zawsze wartość naładowania w procentach.

SO ... aby odczytać czwartą wartość, polecenie zmienia się z

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

do

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

lub w pełnej krasie:

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

Znów mam nadzieję, że to komuś pomoże! Powodzenia i dziękuję za przeczytanie!


EDYCJA BONUSOWA

Okej, więc trochę dodatkowego grzebania wokoło, a także wymyśliłem, jak ustawić głośność na 100% i wyłączyć wyciszenie przed uruchomieniem alarmu - bo spójrzmy prawdzie w oczy, jaki jest sens alarmu baterii, jeśli nie słyszysz, ponieważ „ Czy ustawiłeś poziom głośności na niski lub wyciszony ?!

W każdym razie potrzebne polecenie to:

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

jak widać, wszystko, co zrobiłem, to wstawienie ciągu poleceń

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

(po &&prostu wiążą wiele poleceń razem)

Znowu, powodzenia wszystkim!

OSTATNIA EDYCJA

Okej, więc ... jedna ostatnia (mam nadzieję!) Edycja ... najwyraźniej znak procentowy jest specjalnym znakiem podczas uruchamiania zadań cron. Dlatego musisz „uciec” od znaku procentu, umieszczając \przed każdym odwrotnym ukośnikiem ( ), %aby nie był (źle) interpretowany przez powłokę.

Więc w zasadzie zastąp

100%

z

100\%

Dlatego polecenie, które naprawdę NAPRAWDĘ potrzebujesz:

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

uff, mam nadzieję, że to dla ciebie tak, jak dla mnie !! (ostatecznie!)


To świetne wytłumaczenie! Niestety, również ładuje dźwięk co minutę.
OpnSrcFan

5

Możesz skonfigurować zadanie CRON, które będzie sprawdzać stan baterii co 5/10 minut, a następnie, w zależności od procentu baterii, odtworzy dźwięk.

Aby odtworzyć dźwięk, którego możesz użyć

mpg123 nazwa_pliku.mp3

Aby go zainstalować

sudo apt-get install mpg123

Aby uzyskać status baterii z wiersza poleceń, możesz użyć tego polecenia

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

używając grepmożesz wyodrębnić dokładne informacje w następujący sposób

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

Teraz możesz umieścić wszystkie te rzeczy w skrypcie powłoki (a także ifwarunek, aby sprawdzić, czy stan baterii jest niższy niż 10%) i po prostu podać ścieżkę tego skryptu powłoki do zadania cron.

więc po każdych 5 minutach (możesz zmienić ten odstęp) stan baterii będzie sprawdzany, a jeśli poziom naładowania baterii spadnie poniżej 10%, odtworzony zostanie dostarczony plik dźwiękowy!

Mam nadzieję że to pomoże!


3
Tak, tylko fajni ludzie używają mpg123 :)
Scott Goodgame

3

Jednym z łatwych sposobów, aby to zrobić, jest dodanie prostej kontroli do Twojego pliku crontab (cron to system do uruchamiania rzeczy w tle, regularnie przez użytkownika).

Najpierw musisz zainstalować odtwarzacz mp3 z linii poleceń i acpi, aby móc odczytać stan baterii.

Z terminala uruchom następujące polecenie, aby zainstalować pakiety.

sudo apt-get install acpi mpg123

Następnie, będąc jeszcze w terminalu, wpisz crontab -ei wprowadź następujące informacje na końcu pliku. Wystarczy zmienić użytkownika na nazwę użytkownika i .mp3 na nazwę pliku w katalogu domowym.

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

Naciśnij Control-O (litera) i Enter, aby zapisać. Naciśnij Control-x, aby wyjść

Dodatkowe rzeczy, które możesz chcieć przeczytać ...

Ubuntu CronHowto

Przewodnik Ubuntu


Nie działało tutaj: ➜ ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; następnie graj /home/felipelalli/Music/siren.wav; fi [: oczekiwane wyrażenie na liczbę całkowitą: pozostało ➜ ~ acpi Bateria 0: rozładowanie, 9%, pozostało 00:17:56
Felipe

2

Właściwie skorzystałem z odpowiedzi Andy'ego Pyne'a, ale to nie zadziałało. Cron wykonał kod, ale nie odtworzył dźwięku. Wreszcie znalazłem rozwiązanie i udostępniłem je tutaj:

Krok 1: Zainstaluj mpg3

sudo apt-get install acpi mpg123

Krok 2: Zapisz następujące polecenie w~/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

Ten skrypt odtwarza battery_low.mp3, jeśli laptop się rozładowuje, a ładunek jest mniejszy lub równy 15%. (Jeśli podłączone jest zasilanie prądem zmiennym, nie ostrzeże Cię). Ten kod ostrzega również, jeśli opłata wynosi 100%. Jeśli nie chcesz otrzymywać powiadomienia o stanie pełnego naładowania, usuń część else z tego kodu.

Krok 3: Ustaw plik jako wykonywalny za pomocą następującego polecenia.

chmod +x ~/bin/battery_alert

Krok 4: Wykonaj ten plik za pomocą crona, dodając następującą komendę na końcu pliku crontrab -e.

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

(Nie zapomnij mieć pustej linii po tym poleceniu)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.