Я хочу создать инструмент, предупреждающий о том, что батарея ниже 40% или выше 60%, поэтому я могу начать / прекратить зарядку соответственно.
Я знаю, что некоторые инструменты предупреждают, когда батарея разряжена, этого недостаточно , Есть ли инструмент, который делает это, когда летучая мышь высока?
Я хотел бы написать скрипт - оболочку или питон, которые могут это сделать. Я знаю команду для проверки статуса bat:
upower -i /org/freedesktop/UPower/devices/battery_BAT0
Но не знаю, как «слушать» аккумулятор, так что всякий раз, когда он изменяет статус, я могу автоматически выполнить действие. Ссылка на документы будет приятной, учебник еще лучше.
Вы не можете написать учебник для создания одного скрипта. Это будет похоже на общий учебник по python, который вы можете найти во многих местах в Интернете.
То, что я сделал, это написать небольшой скрипт с комментариями, чтобы объяснить, что я сделал, чтобы проверить заряд батареи каждый 10 секунд. Это может быть преувеличено. Измените линию time.sleep(10), чтобы установить интервал (в секундах). Конечно, команды могут быть изменены, я отправил уведомление как есть.
Я запустил это сообщение или любую команду, которую вы ему дали, только один раз за инцидент, поэтому, если заряд превышает 80%, например, команда запускается только один раз, до следующего превышения определенных значений.
Как использовать
Сценарий предназначен для запуска в фон; скопируйте его в пустой файл, сохраните его как check_battery.py, сделайте его исполняемым и запустите его при входе в систему: Dash> Startup Applications> Add, добавьте команду:
/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()