Как написать скрипт для & ldquo; listen & rdquo; на состояние батареи и предупредить меня, когда он выше 60% или ниже 40%?

Я хочу создать инструмент, предупреждающий о том, что батарея ниже 40% или выше 60%, поэтому я могу начать / прекратить зарядку соответственно.

Я знаю, что некоторые инструменты предупреждают, когда батарея разряжена, этого недостаточно , Есть ли инструмент, который делает это, когда летучая мышь высока?

Я хотел бы написать скрипт - оболочку или питон, которые могут это сделать. Я знаю команду для проверки статуса bat:

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

Но не знаю, как «слушать» аккумулятор, так что всякий раз, когда он изменяет статус, я могу автоматически выполнить действие. Ссылка на документы будет приятной, учебник еще лучше.

1
задан 28 February 2015 в 00:16

1 ответ

Вы не можете написать учебник для создания одного скрипта. Это будет похоже на общий учебник по 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()
7
ответ дан 24 May 2018 в 04:05

Другие вопросы по тегам:

Похожие вопросы: