我正在尝试编写一些软件,让我可以计算我的 Macbook M1 Air 笔记本电脑在一段时间内使用了多少能量。我的目的是编写此脚本,并定期(也许每天一次?)将这些数字发送到一个中央位置,以便我跟踪设备的总能耗。
我有一个物理能源监控插头,但不幸的是,它没有 API,而且因为我经常走动,所以当我插入笔记本电脑时,没有一种简单的方法可以始终使用它,因此为什么我想看看是否有一种方法可以单独使用软件来获取类似的信息。
我做了一些研究,看起来 Mac 的活动监视器通过“能源分数”指标在每个应用程序的基础上跟踪这一点,但我似乎无法从中推断出任何瓦时的使用情况。
有什么办法可以让我以某种方式获取这些信息吗?
经过几个小时的修补、研究等之后,我想我已经偶然发现了使用ioreg
Apple 开发人员工具中包含的 CLI 实用程序来完成此任务的最佳方法。
在注册表中,Apple 存储了大量硬件数据,包括有关电池使用情况的信息(这样您就可以计算出笔记本电脑中的电池容量总量,以及它已经经历了多少次完整充电周期),但它也包括有关插入墙壁插座时的电源适配器的信息,这就是事情变得有趣的地方。
就我而言,我实际上并不关心笔记本电脑的电池使用了多少,因为我的最终目标是计算出笔记本电脑在给定时间段内消耗了多少能量,而最好的方法是是为了实际测量从墙上适配器吸收了多少能量——这样,每当笔记本电脑主动插入时,我就会在某个地方记录这个能量消耗,我最终可以将其统计出来,以便随着时间的推移获得准确的表示。
事实证明,这些数据可以通过注册表项ioreg
下的实用程序获得AppleSmartBattery -> BatteryData -> AdapterPower
。您可以使用下面的命令来获取从墙上适配器获取的确切瓦数:
ioreg -rw0 -c AppleSmartBattery | grep BatteryData | grep -o '"AdapterPower"=[0-9]*' | cut -c 16- | xargs -I % lldb --batch -o " print/f %" | grep -o '$0 = [0-9.]*' | cut -c 6-
Run Code Online (Sandbox Code Playgroud)
该命令将查询数据,将其转换为适当的格式(IEEE754 浮点数),然后将其输出到控制台。最后,您将得到一个值:
0
Run Code Online (Sandbox Code Playgroud)
如果您没有插入墙上适配器,则意味着您没有从适配器中消耗任何瓦数。或者...像这样的浮点数:
31.8184719
Run Code Online (Sandbox Code Playgroud)
这是从墙上吸取的瓦数。
PS我使用了硬件能源监控插头来确认硬件监视器和实用程序之间报告的从笔记本电脑消耗的瓦数是相同的,ioreg
如上所述 - 它们几乎相同,所以我有很高的信心表明这个方法是准确的。
下一个难题是将瓦数转换为瓦时测量值,即一小时内消耗的瓦数。
我在这里做了一些额外的测试,我了解到ioreg
输出信息大约每 30 秒左右改变一次,因为看起来它返回的值被缓存了。
为了计算瓦时数,我最终做了以下事情:
我最终创建了一个小型 GitHub 存储库,其中包含脚本和 crontab 文件(如果您想查看的话)。
这种方法的问题
上述方法存在一些我不知道如何解决的问题,但考虑到这是一个软件解决方案,我认为它是尽可能好的。
归档时间: |
|
查看次数: |
4440 次 |
最近记录: |