Как я могу воспроизвести собственный звук при низком заряде батареи?

13

Я хочу, чтобы мой компьютер воспроизводил пользовательский звуковой файл, когда батарея разряжена (скажем, 10%). Как я могу это сделать? Благодарность

vyb
источник

Ответы:

6

Я просто хотел ответить, поскольку использовал совет на этой странице для настройки своей crontab -eработы.

Я использую Lubuntu (верный), и вышеописанное не сработало для меня, но с небольшой настройкой это сработало. Мой уровень (не) опыта в том, что я относительно способен читать базовые сценарии и команды, но менее способен писать их с нуля в Linux Disto. Я упоминаю об этом, потому что, если я смогу собрать работающую сигнализацию батареи, большинство из вас, прочитав это, тоже смогут!

ТАК .... сценарий и основные объяснения ....

Согласно сообщениям выше от Glutanimate и Scott Goodgame (спасибо, ребята!), Я в основном сделал следующее:

Чтобы получить mpg123 и иметь возможность проигрывать аудио:

sudo apt-get install acpi mpg123

Файл, который нужно открыть, чтобы написать команду:

crontab -e

Команда для ввода в конце файла:

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

Объяснение вышесказанного

Звездочки на старте

Пять звездочек представляют частоту выполнения команд.

  • Первая звезда = минуты: 0-59
  • Вторая звезда = Часы: 0-23
  • Третья звезда = День месяца: 0 - 31
  • Четвертая звезда = месяц: 0 - 12
  • Пятая звезда = День недели: 0 - 6 (0 означает воскресенье)

*/1 * * * *

означает «запустить это каждую минуту».

IF / THEN / FI:

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

Я думаю, что большинство из вас очень хорошо знакомы с утверждениями IF / THEN. FI в конце завершает утверждение IF

Воспроизведение аудио:

mpg123 /home/andy/Alarm.mp3

это просто использует mpg123для воспроизведения файла с именем, Alarm.mp3расположенного в моем домашнем каталоге /home/andy/.

Информация о выходе батареи:

acpi -b

это просто выводит состояние батареи. На моем ноутбуке это дает такие результаты, как:

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

Передача в команду awk

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

Итак, мы передаем вывод состояния батареи выше и печатаем второе от конца значение (NF-2), которое в приведенном выше примере равно «74%». Однако нам нужно удалить «процент» -0 . Мы хотим сравнить текущее значение со значением 15 -lt «15» . Итак, чтобы подвести итог на простом английском языке,

ЕСЛИ значение батареи меньше 15%, ТО воспроизводите аудиофайл

Я признателен, что немного обескуражил, и, возможно, мое объяснение можно улучшить, но, надеюсь, это поможет кому-то еще понять, как добавить сигнал тревоги для батареи и избежать внезапного отключения их ноутбуков!

Удачи!


РЕДАКТИРОВАТЬ

Хорошо ... так получается, что когда мой ноутбук заряжается, выход

acpi -b

является:

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

тогда как на батарее есть

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

поэтому с помощью параметра, упомянутого изначально

print ( $(NF-2)-0)

выводит разные результаты, потому что помните, бит значения NF указывает, сколько элементов в обратном направлении от конца вывода для отображения, поэтому с выходом на батарее

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

$(NF-2) выводит «36%», тогда как ноутбук на зарядке,

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

$(NF-2) выводит «00: 50: 12», то есть количество времени, оставшегося до зарядки.

-0После $(NF-2)минусов нуля от значения, поэтому , когда значение в процентах -0изменяют его от чего - то вроде% 36 г.»до„36“. Когда выходное значение воспринимается как нечисловое, такое как время вывода «01: 04: 08», как указано выше, -0возвращаемое значение равно «0». Итак, вы можете видеть мою проблему - когда мой ноутбук заряжается, выходное значение всегда равно 0. Поскольку я хочу воспроизвести сигнал тревоги, когда выходное значение меньше 15, он переводится в сигнал тревоги батареи, который срабатывает каждую минуту при зарядке!

Я прочитал немного больше о выводе awkкоманды, и оказалось, что мне не нужно было заставлять ее читать второе значение с конца, я мог бы начать с начала вывода и перейти вперед. Это намного лучше, поскольку состояние моего аккумулятора начинается одинаково, независимо от того, находится он на зарядке или на аккумуляторе с точки зрения количества параметров, т.е. четвертый параметр с самого начала всегда является значением заряда в процентах.

ТАК ... чтобы прочитать четвертое значение, команда меняется с

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

в

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

или во всей красе

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

Я снова надеюсь, что это поможет кому-то! Удачи и спасибо за чтение!


БОНУС РЕДАКТИРОВАТЬ

Ладно, еще немного побеспокоился, и я также решил, как установить громкость на 100% и включить звук перед включением будильника - потому что давайте посмотрим правде в глаза, какой смысл в сигнале батареи, если вы его не слышите, потому что вы Вы установили громкость на низкую или отключили звук ?!

В любом случае, вам нужна команда:

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

как вы видите, все, что я сделал, это вставил командную строку

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

(это &&просто связать несколько команд вместе)

Опять удачи всем!

ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ

Хорошо, итак ... одно окончательное (надеюсь!) Редактирование ... очевидно, знак процента - это особый знак при запуске задач cron. Следовательно, вы должны «экранировать» знак процента, поставив \перед каждым символ обратной косой черты ( ) %, чтобы оболочка не интерпретировала его (неправильно).

Так что в основном заменить

100%

с

100\%

Таким образом, команда, которая вам действительно нужна:

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

фу надеюсь, что это для вас, как это для меня! (в конце концов!)

Энди Пайн
источник
Это отличное объяснение! К сожалению, он также играет звук каждую минуту при зарядке тоже.
OpnSrcFan
5

Вы можете настроить работу cron, которая будет проверять состояние батареи каждые 5/10 минут, а затем, в зависимости от процента батареи, будет воспроизводиться какой-либо звук.

Для воспроизведения звука вы можете использовать

mpg123 filename.mp3

Чтобы установить это

sudo apt-get install mpg123

Чтобы получить состояние батареи из командной строки, вы можете использовать эту команду

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

используя grepвы можете извлечь точную информацию следующим образом

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

Теперь вы можете поместить все эти вещи в сценарий оболочки (а также ifусловие для проверки, если уровень заряда батареи ниже 10%) и просто указать путь этого сценария оболочки к заданию cron.

поэтому через каждые 5 минут (вы можете изменить этот интервал) будет проверяться состояние вашей батареи, и если батарея будет ниже 10%, будет воспроизводиться ваш предоставленный звуковой файл!

Надеюсь это поможет!

Нулевой указатель
источник
3
Правильно, только крутые люди используют mpg123 :)
Скотт Гудгейм
3

Один из простых способов сделать это - добавить простую проверку в ваш crontab (cron - это система для регулярного выполнения заданий в фоновом режиме).

Сначала вам нужно установить mp3-плеер с командной строкой и acpi, чтобы иметь возможность считывать состояние батареи.

Из терминала запустите следующее, чтобы установить пакеты.

sudo apt-get install acpi mpg123

Затем, находясь в терминале, введите crontab -eи введите следующее в конец файла. Просто измените пользователя на ваше имя пользователя и .mp3 на ваше имя файла в вашем домашнем каталоге.

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

Нажмите Control-O (буква) и Enter, чтобы сохранить. Нажмите Control-x, чтобы выйти

Дополнительные вещи, которые вы можете прочитать ...

Ubuntu CronHowto

Руководство по Ubuntu

Скотт Гудгейм
источник
Не сработало здесь: if ~ if [ acpi |awk '{print substr($NF, 0, length($NF)-1)}' -lt "10"]; затем aplay /home/felipelalli/Music/siren.wav; fi [: ожидается целочисленное выражение: остаются в ➜ ~ acpi Батарея 0: разрядка, 9%, осталось 00:17:56
Фелипе
2

На самом деле я использовал ответ Энди Пайна, но он не сработал для меня. Крон выполнил код, но он не воспроизводил звук. Наконец я нашел решение и поделился им здесь:

Шаг 1: Установите mpg3

sudo apt-get install acpi mpg123

Шаг 2. Сохраните следующую команду в~/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

Этот скрипт воспроизводит battery_low.mp3, если ноутбук разряжается, а заряд меньше или равен 15%. (Если подключено питание переменного тока, оно не предупредит вас). Этот код также предупреждает вас, если заряд составляет 100%. Если вы не хотите получать оповещения о полностью заряженном состоянии, удалите остальную часть из этого кода.

Шаг 3: Сделайте файл исполняемым с помощью следующей команды.

chmod +x ~/bin/battery_alert

Шаг 4: Запустите этот файл с помощью cron, добавив следующую команду в конец файла с crontrab -eкомандой opend by .

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

(Не забывайте иметь пустую строку после этой команды)

Gobinath
источник