I want to make в tool that alerts when battery is below 40 % or above 60 % so I хан start/stop charging accordingly.
I know some tools alert when battery is low, that's not enough. Is there в tool that does it when bat is high?
I would like to write в рукописный шрифт - either shell or python, that хан do this. I know the command for checking bat статус:
upower -i /org/freedesktop/UPower/devices/battery_BAT0
But don't know how to "занесли в список" to the battery so that whenever it's статус changes I хан automatically perform an action. В соединение to docs will be nice, в руководителя even better.
Хорошо, я думаю, что знал это. Вы хотите проверить состояние батареи в каждые X интервалов времени. Это - самый легкий способ, которым Вы выполняете его в фоновом режиме, внутри некоторое время цикл:
while true
do
# Any script or command
sleep [number of seconds]
done
И если бы Вы хотите запустить скрипт на запуске и с тех пор каждые 5 минут, таким образом, конструкция была бы:
/etc/rc.local
назвать Ваш сценарий (Ваш battery_status.sh
) + "и" заставить его выйти.battery_status.sh
выполниться в некоторое время цикле (внутри battery_status.sh).Обратите внимание, что, если Вы хотите выполнить его от крона, необходимо установить полный путь с тех пор cron
выполнения с ограниченным набором переменных среды.
#!/bin/bash
while true
do
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -ge 60 ]; then
notify-send "Battery is above 60%!" "Charging: ${battery_level}%"
elif [ $battery_level -le 40 ]; then
notify-send "Battery is lower 40%!" "Charging: ${battery_level}%"
fi
sleep 300 # 300 seconds or 5 minutes
done
Сохраните этот файл именованным battery_status.sh
в Вашем любимом местоположении (мое Home
каталог), и включают эту строку /etc/rc.local
файл (в моем примере, просто замените свое battery_status.sh местоположение /home/kasiya/
):
sh /home/kasiya/battery_status.sh &
Это все. Перезагрузка и видит волшебство.
Если Вы не имеете, прививают acpi
, просто установка то использование sudo apt-get install acpi
Одна ПРЕМИЯ
Если Вы хотите работать, делают этот сценарий ответственным с сетевым адаптером, Вам не нужна дополнительная переменная, чтобы проверить, что работает в течение одного времени. Если Ваш сетевой адаптер включается и батарея, заряженная выше 60%, это делает предупреждение для "Отключения адаптера!" пока Вы не отключаете это. Если предупреждение говорит Вам
просто отключите сетевой адаптер затем, Вы будете видеть, что сигнал о сообщении не появляется снова до Вашего заряда батареи вниз к 40%. Затем другой сигнал о сообщении и говорит Вам
если Вы не отключаете сетевой адаптер на вышеупомянутых 60% или не включаете сетевой адаптер ниже 40%, аварийное сообщение, показываемое каждые 5 минут (можно скорректировать это для себя в коде, видеть sleep [seconds]
) покажите и напомнит Вам.
#!/bin/bash
while true
do
export DISPLAY=:0.0
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if on_ac_power; then
if [ $battery_level -ge 60 ]; then
notify-send "Battery charging above 60%. Please unplug your AC adapter!" "Charging: ${battery_level}% "
sleep 20
if on_ac_power; then
gnome-screensaver-command -l ## lock the screen if you don't unplug AC adapter after 20 seconds
fi
fi
else
if [ $battery_level -le 40 ]; then
notify-send "Battery is lower 40%. Need to charging! Please plug your AC adapter." "Charging: ${battery_level}%"
sleep 20
if ! on_ac_power; then
gnome-screensaver-command -l ## lock the screen if you don't plug AC adapter after 20 seconds
fi
fi
fi
sleep 300 # 300 seconds or 5 minutes
done
Вы не можете записать учебное руководство для создания одно сценарий. Это было бы подобно общему учебному руководству по Python, которое можно найти на многих местах в сети.
то, Что я сделал, записать маленький сценарий с комментариями для объяснения, что я сделал, для проверки заряда батареи каждые 10 секунд. Это могло бы быть преувеличено. Измените строку time.sleep(10)
для установки интервала (в секундах). Команды могут быть изменены, конечно, я заставил его отправить уведомление как есть
, я заставил его выполнить сообщение, или безотносительно команды Вы даете его, только работаете однажды на инцидент, поэтому если заряд превышает 80%, например, команда только работает однажды до следующего раза, когда это превышает определенные значения.
, Как использовать
, сценарий предназначен для выполнения в фоновом режиме; скопируйте его в пустой файл, сохраните его, поскольку check_battery.py
делают его исполняемым файлом и заставляют его работать на входе в систему: Тире> Приложения Запуска> Добавляют, добавляют команду:
/path/to/check_battery.py
сценарий
#!/usr/bin/env python3
import subprocess
import time
def read_status():
"""
This function reads the output of your command, finds the line with
'percentage' (line 17, where first line = 0) and reads the figure
"""
command = "upower -i $(upower -e | grep BAT) | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//"
get_batterydata = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
return get_batterydata.communicate()[0].decode("utf-8").replace("\n", "")
def take_action():
"""
When the charge is over 60% or below 40%, I assume the action does
not have to be repeated every 10 seconds. As it is, it only runs
1 time if charge exceeds the values. Then only if it exceeds the
limit again.
"""
# the two commands to run if charged over 80% or below 60%
command_above = "notify-send 'charged over 80'%"
command_below = "notify-send 'charged below 80%'"
times = 0
while True:
charge = int(read_status())
if charge > 60:
if times == 0:
subprocess.Popen(["/bin/bash", "-c", command_above])
times = 1
elif charge < 40:
if times == 0:
subprocess.Popen(["/bin/bash", "-c", command_below])
times = 1
else:
times = 0
time.sleep(10)
take_action()