Событие в зависимости от уровня заряда аккумулятора

11

Я еще ничего не нашел, поэтому я надеялся, что у кого-то здесь есть идея.

Я хочу запустить даже на основе батареи на ноутбуке Apple, достигающей определенного уровня заряда, или когда батарея полностью заряжена.

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

FaultyJuggler
источник

Ответы:

5

Power Manager не является бесплатным, но поддерживает запуск событий в зависимости от уровня заряда батареи (внутренний или ИБП). События могут запускать сценарии, запускать приложения или выполнять такие задачи, как выключение.

Power Manager управляется событиями и не запрашивает замены батареи.

Вместо этого Power Manager подключается к уровню IOKit OS X и ожидает обновлений от оборудования. События могут быть вызваны, когда никто не вошел в систему; он не зависит от активного пользователя.

Power Manager - запуск скрипта от оставшегося заряда батареи

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

В этих двух статьях рассказывается об источниках питания ИБП, но они легко адаптируются к внутренней батарее вашего MacBook:

Раскрытие информации: я инженер-программист в Power Manager.

Грэм Милн
источник
3

Я хочу, чтобы это основывалось на ОС, поэтому мне не нужно подключение к интернету или открытый браузер и т. Д. Просто то, что может происходить в фоновом режиме

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

Вы можете рассмотреть launchdпроцесс, это в основном запланированное задание, которое выполняется каждую xминуту. Они часто используются опытными пользователями, но не слишком сложны в настройке. Вы конфигурируете запланированную задачу launchd с помощью файла .plist, который вы помещаете в этот каталог: Macintosh HD\Library\LaunchDaemonsименно так вы структурируете файл .plist;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
    <string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>

Если вы сохраните этот файл, как com.me.BatteryInfoв LaunchDaemonsуказанной выше папке, он создаст запланированное задание, которое будет запускаться каждые 30 минут. 1800Непосредственно над числом указывается </dict>время в секундах того, как часто вы хотите запускать задачу. Здесь указано <string>/Users/yourusername/batt.sh</string>, где вы указываете, какой скрипт запускается по расписанию. Вы должны уйти <string>и остаться </sting>нетронутыми.

Строка <string>com.me.BatteryInfo</string>- это уникальное имя запланированной задачи. Если вы собираетесь создать более одного, убедитесь, что каждый .plist имеет здесь уникальное имя.

Следующее, что вам нужно сделать, это изменить владельца .plist на root. Это требуется в качестве функции безопасности (я полагаю, чтобы остановить программное обеспечение / пользователей, создающих запланированные вредоносные задачи). Чтобы изменить владельца файла, выполните sudo chown root \Library\LaunchDaemons\yourtask.plist(замените yourtask.plist фактическим именем файла .plist, который вы создали). Эта задача предложит вам ввести пароль.

Теперь вам нужно создать скрипт, который будет периодически запускаться. Вам нужно создать файл .sh (скрипт bash), чтобы сообщить компьютеру, что делать. Чтобы создать файл .sh, откройте текстовый редактор для программистов, например Sublime Text или Komodo Edit . НЕ используйте Text Edit, так как он часто добавляет текст к вашим файлам, что будет мешать вашему сценарию. Редактирование текста на самом деле не должно использоваться для кода.

Создайте скрипт (файл .sh) со следующим кодом;

#!/bin/sh

percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')

if [ $percent > 95 ]
    then
        echo 'charged.'
fi
exit 0

Замените echo 'charged.'на команду терминала, которую вы хотели бы выполнить, когда батарея заряжена. open /Applications/Notes.appоткроет приложение Notes; Вы можете изменить каталог, чтобы открыть другое приложение.

$percent > 95Это говорит о том, что следующая строка должна работать только тогда, когда батарея более чем 95заряжена. Вы можете изменить это на что угодно. Уровень заряда батареи здесь часто будет немного отличаться от того, что отображается в строке меню вверху. Если вы хотите «работать, когда батарея полностью заряжена», я рекомендую оставить значение> 95 . Если вы хотите, чтобы задание запускалось, например, когда батарея опустилась ниже 20%, измените ее на$percent < 20

ПРИМЕЧАНИЕ. Поскольку это запланированное задание, ваш сценарий будет выполняться каждые xнесколько минут. Это означает, что если вы поместите open \Applications\Notes.appв свой скрипт, приложение Notes будет запускаться каждую xминуту (если ваша батарея заряжена)

Эта задача будет выполняться, даже если никто не вошел в систему.

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

Джозеф
источник
2

Это не зависит от Mac, но Mozilla Aurora имеет встроенный API, который содержит множество функций, связанных с батареями. Можно определить состояние батареи (независимо от того, заряжается она или нет), сколько времени потребуется для разрядки / зарядки батареи и ее уровень. Есть простой пример того, как добавить EventListener для вызова функции, когда уровень заряда батареи находится в определенной точке.

Эндрю Нг
источник
Я хочу, чтобы это основывалось на ОС, поэтому мне не нужно подключение к интернету или открытый браузер и т. Д. Просто то, что может происходить в фоновом режиме.
FaultyJuggler