How to write в рукописный шрифт to “занесли в список” to battery статус and alert я when it's above 60 % or below 40 %?

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.

6
задан 27 February 2015 в 13:16

2 ответа


Хорошо, я думаю, что знал это. Вы хотите проверить состояние батареи в каждые 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%, это делает предупреждение для "Отключения адаптера!" пока Вы не отключаете это. Если предупреждение говорит Вам

                             enter image description here

просто отключите сетевой адаптер затем, Вы будете видеть, что сигнал о сообщении не появляется снова до Вашего заряда батареи вниз к 40%. Затем другой сигнал о сообщении и говорит Вам

                             enter image description here

если Вы не отключаете сетевой адаптер на вышеупомянутых 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
18
ответ дан 23 November 2019 в 07:15

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

то, Что я сделал, записать маленький сценарий с комментариями для объяснения, что я сделал, для проверки заряда батареи каждые 10 секунд. Это могло бы быть преувеличено. Измените строку time.sleep(10) для установки интервала (в секундах). Команды могут быть изменены, конечно, я заставил его отправить уведомление как есть

enter image description here

, я заставил его выполнить сообщение, или безотносительно команды Вы даете его, только работаете однажды на инцидент, поэтому если заряд превышает 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()
9
ответ дан 23 November 2019 в 07:15

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

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