基于电池电量的事件


11

我还没有发现任何东西,所以我希望也许有人在这里有了一个主意。

我想在苹果笔记本电脑上达到一定电量或电池充满电的情况下,开始使用基于电池的电池。

我知道我可以定期运行一些东西,检查电池电量,并决定要怎么做,但是如果可能的话,我更喜欢事件驱动。

Answers:


4

Power Manager不是免费的,但支持根据电池电量(内部或UPS)触发事件。事件可以运行脚本,启动应用程序或执行诸如关闭之类的任务。

Power Manager是事件驱动的,不会轮询电池更改。

相反,Power Manager挂接到OS X的IOKit层,并等待来自硬件的更新。没有人登录时可以触发事件。它不依赖于活动用户。

电源管理器-在电池剩余电量上运行脚本

内置的Schedule Assistant任务专注于在电池电量下降到特定水平时执行,但是可以对其进行调整以检查电池百分比或剩余时间的增加。

这两篇文章讨论了UPS电源,但它们很容易适应MacBook的内部电池:

披露:我是Power Manager的软件工程师。


3

我希望这是基于OS的,因此不需要Internet连接或打开浏览器等。只是在后台可能发生的事情

最简单的方法是使用应用程序,但这只是使用内置OS命令的方法。我知道您希望它是事件驱动的,但是我不确定如何做到这一点,因此这是一种检查电池电量的方法,如果电池电量高于或低于阈值,则可以执行其他操作。

您可以考虑一个launchd过程,这基本上是一个计划的任务,每x分钟运行一次。它们通常由高级用户使用,但是设置起来并不难。您使用放置在此目录中的.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(用创建的.plist的实际文件名替换yourtask.plist)。此任务将提示您输入密码。

现在,您需要创建将定期运行的脚本。您需要制作一个.sh文件(bash脚本)来告诉计算机该怎么做。要制作.sh文件,请打开程序员文本编辑器,例如Sublime TextKomodo 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,该API包含各种与电池有关的功能。可以检测电池的状态(是否正在充电),电池放电/充电需要花费更多时间以及电量。有一个简单的示例,说明当电池电量达到一定水平时,如何添加EventListener来调用函数。


我希望这是基于OS的,因此不需要Internet连接或打开浏览器等。只是在后台可能发生的事情。
FaultyJuggler
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.