如何在OS X上检索当前的瓦数信息?


21

有没有办法在OS X Snow Leopard上检索当前的电量使用信息?我正在使用2010年中的iMac,因此我不仅在寻找与电池相关的应用。

OS X甚至监视电源使用情况吗?我是否需要在电源线和插座之间使用外部读取器?

我对基于命令行/ applescript的解决方案感兴趣,以获取更方便的日志记录和统计信息,但我愿意接受替代方案。


这两个答案(@ bmike和@ michaelmichael)无疑都是正确的。这里的元问题是PSU上已经有任何传感器/读取器,其工作方式类似于“千瓦特”的工作方式。我认为答案是“否”。

我知道,这可能只是梦dream以求的事情,但是板载电表将是计算机大喊大叫的理想选择:“看看我有多环保;只用这些电!”


啊!

@ Kerri Shotts的建议iStat菜单3 确实可以从某个传感器获取瓦数读数,以及伏特和安培状态。仪表在那里,但是我如何以编程方式访问它们呢?


赏金!将获得可靠的命令行传感器读数的解决方案或建议特别好3 第三方软件(如一个用最小的统计数据和历史数据的工具)。

仅供参考:前面提到的iStat菜单3列出了以下与电源相关的传感器:

  • 电压传感器(伏特)
    • 交流/直流
    • 交流/直流
    • AC / DC分流器
    • 中央处理器
    • CPU 1.8V S0
    • CPU CTT
    • 图形模块
    • 记忆
  • 电流传感器(安培)
    • 交流/直流
    • 中央处理器
    • CPU VTT
    • 图形模块
  • 功率传感器(瓦)
    • 交流/直流
    • 中央处理器
    • 图形模块

它确实声明了“传感器”,但它们可能按照@msanford的注释进行计算。如何以编程方式获取这些数据?


Mac非常环保,Apple以及带有校准测试台的实验室都对设备进行了测试。幸运的是,我们可以使用这些设置来最大化我们拥有的Mac,而明天它们会提供更高效的模型。
bmike

1
PSU是否不报告其当前负载(因为我很确定它报告了其电压)?如果是这样,则P = IV,或瓦特=电流(以安培为单位)•电压(以伏特为单位)。瓦数不是直接测量的,而是根据电流和电压计算得出的,因此,如果已经有关于电压和电流的报告,我不希望传感器报告瓦数。如果有帮助……
msanford 2011年

@msanford,如果有人告诉我们如何读取PSU的读数,则可能会有所帮助。
加里·凯纳嫩(JariKeinänen)2011年

Answers:


21

system_profiler SPPowerDataType似乎提供了最相关的信息。在笔记本电脑上,它会报告电压和安培数,从而为您提供功耗(mVolts×mAmperes×10 ^ -6 = Watts)。它还报告了Wattage,但实际上是Apple电源适配器报告的一部分元数据,第三方电源适配器可以在此处显示空白。由于台式机没有可充电电池,因此无法通过测量电池的充电和放电来计算功耗。

但是,等等,仍然有希望!苹果公司发布了许多源代码,并且对WattagePower + mV进行谷歌搜索暗示可以查询某些内核扩展的功耗。不幸的是,我现在无法提出一个可行的脚本,但似乎可行。


1
我看到它是的命令行界面System Profiler.app。可悲的是,在台式机上,它仅显示EnergySaver.prefpane安装UPS的设置。
加里·凯纳嫩(JariKeinänen)2011年

在我的RMBP 2015年15" ,电流和电压节电池信息或多或少是恒定的,在相比至少‘从国家统计局,其每秒更新系统总’值另外,我注意到安培幸福。0
约翰内斯·比特纳

喜欢这个; 简短。无需下载或安装。如果人们感兴趣,我(或其他人)可以轻松地编写脚本/命令以从该命令中提取必填字段,并吐出实际使用的功率。
rinogo

更新:指定的命令在我第一次需要它时对我有用,但是当我再次需要它时,它不起作用。它显示的电流值很奇怪。也许我只是在找对地方。谁知道...嗯。
rinogo

11

这不满足命令行要求,但是请尝试使用iStat Menus 3。它为您提供了机器中几乎每个传感器的读数(对我来说,包括AC / DC瓦,CPU瓦和GPU瓦)。我确定它不是100%准确的,但是在调整我的机器以使其在APC电池的有限限制内工作时,它已经足够准确。

综上所述,我的机器是2010年的iMac,因此根据您的机器,它可能会或可能无法工作。另外,我看不到专门用于HDD的功率读数(应该是最小的),也看不到显示器的任何读数(也就是说,降低LCD亮度会大大降低瓦数,因此计入总数)。

至少值得一试。IIRC有一个免费版本,但是非常值得,我继续为此付费。我有点控制狂,所以我的菜单栏中有内存,温度,磁盘活动,网络活动等,并且喜欢它。:-)


2
优秀水平!现在的问题是:iStat菜单如何获取传感器读数…
JariKeinänen2011年

8

有一个名为Hardware Monitor的付费应用程序,可以访问Mac上几乎所有可用的传感器,包括电压,电流和瓦数,我相信您正在寻找。它确实包含用于读取此信息的命令行实用程序。

去年,我用它来查找iMac中有故障的逻辑板,发现它值7欧元。它具有将传感器值输出到CSV的功能,这有助于记录和直观显示数据。我不确定它是否读取PSU读数(因为我在atm上的机器上没有该应用程序),但是它会碰到pci,插槽,cpu和许多其他内容。

您可以在此处找到该软件:http : //www.bresink.com/osx/HardwareMonitor.html

我根本与这家公司无关,只是发现该工具在我的诊断库中非常有用。


Lyken凭借此答案赢得了大奖。多么神奇的软件。命令行工具,菜单栏和完整的应用程序。除非在新的Mac中监视电源本身,否则它不会给出总的额定功率,但是,这无疑在访问所有可用数据方面做得很好。
bmike

抱歉,更新晚了,但是,@ Lyken,您应得的+100:我犹豫是否提供完整的+200,因为“硬件监视器”似乎不会像iStat Menus 3那样提供PSU功率;由于某种原因,HWM列出的功率传感器仅持续CPU A4 CPU High Side秒和5 秒MXM Graphics Module。尽管如此,它还是一个很棒的应用程序,如果其他一些赏金答案符合自动半赏金规则,我轻而易举地给您答案。就像我说的,+ 100当之无愧。
贾里·凯纳嫩(JariKeinänen)2011年

是的,我确实相信HWM会按型号读取传感器,因此这取决于您所用版本的传感器。iStat Menu 3是否也读取了型号上的PSU功率?
Digitalchild

1
不幸的是,Hardware Monitor于2017年6月19日宣布停产。bresink.com
osx/216202/

7

IANAEE(我不是电气工程师),但是据我了解,无法通过软件准确测量计算机的功耗。最好的解决方案是将Mac连接到Kill-a-Watt等设备

如果您正在寻找可编写脚本的解决方案-一个有趣的项目-这是有关创建无线瓦数监控系统或“ Tweet-a-Watt ”的说明。


7

iStat中的所有数据仅来自ioregistry中的键。您可以使用ioreg从命令行中提取它的转储:

ioreg -w 0 -l

这将需要查看大量数据,您可以通过各种方式进行精雕细琢。我不相信您想要的实际数据是在iMac上提供的,系统可以在多个地方监视温度,但是由于它不是依靠电池运行的,因此了解系统所吸收的瞬时电流就变得不那么重要了,因此可能不值传感器的成本。


5

电源中没有计量传感器。

逻辑板在多个位置测量温度以控制鼓风机,并且当温度变得比鼓风机可以冷却时,CPU监视温度以降低时钟速率。

我想在整合风扇速度和各种温度传感器以计算预期功耗方面可能会完成一些PHD论文。可以进行计算并进行一些校准,甚至可能非常准确。

实际上,由于未公开或记录数据,因此您可能必须进行外部测量。体面的家用能源计数器在150美元至300美元之间

您可以租借或购买一个通过电源插座测量功率的设备,然后运行一些测试以查看Mac在某些情况下在一小时内需要消耗多少功率。

  • 睡觉
  • 各种CPU负载
  • 最大CPU,一切正常

然后,您可以将它们与CPU使用情况监视关联起来,随着时间的推移,使用情况监视变得微不足道,top并且能够进行汇总。

除了了解硬件的工作原理并提供一些很酷的图形外,这还取决于您真正想对数据做什么。


2
+您需要在列表中无限添加广告。可能在所有条件都已校准时,我将需要更换当前的iMac:-D如果船上没有电表,也许只有一些外部基本W&kWh电表可以解决问题。
哈里·凯纳嫩(JariKeinänen)2011年

2
:-)很高兴你得到了幽默。我的经验是,即使在严格的测试下,macs的消耗也比Apple发布的规格少20%到25%,以使所有东西都在最大功率下发挥作用。
bmike

1
@bmike我不太确定,由于85W适配器提供的电流不足,因此在CPU + GPU上充分加载rMBP会消耗电池电量
史蒂文·卢

1
@stevenlu如果这里讨论的2013年最新硬件比2010年中期的技术更强大,我不会感到惊讶。同样,10.8上的电源管理比10.6更复杂。另外-根据他们的经验,它们会严重消耗内部电池的电量-只是从AC适配器上获取的电量很少。甚至新的USB-C PD型号都遵循这种内部消耗大量/缓冲+外部消耗较轻的模式
bmike

3

我已经基于system_profiler输出制作了一个小脚本。它使用给定的电压和安培计算功率。

powerstat() {
    b=$(system_profiler SPPowerDataType)
    amp=$(echo "$b" | grep 'Amperage (mA):' | cut -d ':' -f 2 | xargs)
    volt=$(echo "$b" | grep 'Voltage (mV):' | cut -d ':' -f 2 | xargs)
    power=$(($amp * $volt / 1000))
    echo "$b" | grep --color=never -A 1 'Battery Information:'
    echo "$b" | grep --color=never -A 1 'Amperage (mA)'
    echo "      Total Power (mW): $power"
    echo ""
    echo "$b" | grep --color=never -A 99 'AC Charger Information:'
}

输出类似:

$ powerstat
    Battery Information:

      Amperage (mA): -552
      Voltage (mV): 12794
      Total Power (mW): -7062

    AC Charger Information:

      Connected: No
      Charging: No

充电时:

$ powerstat
    Battery Information:

      Amperage (mA): 1545
      Voltage (mV): 12850
      Total Power (mW): 19853

    AC Charger Information:

      Connected: Yes
      Wattage (W): 60
      Charging: No

2
// Build with: gcc psudata.cc -o psudata -framework IOKit
#include <stdio.h>
#include <string.h>
#include <IOKit/IOKitLib.h>

typedef struct {
  uint32_t key;
  char ignored[24];
  uint32_t size;
  char ignored2[10];
  char cmd;
  char ignored3[5];
  float val;
  char ignored4[28];
} smc_t;

int main(void) {
  mach_port_t mp;
  CFMutableDictionaryRef d;
  io_iterator_t it;
  io_object_t svc;
  io_connect_t ioc;
  smc_t req, resp;
  size_t sz = sizeof(resp);
  uint32_t vk  = ('V' << 24) + ('D' << 16) + ('0' << 8) + 'R';
  uint32_t ik  = ('I' << 24) + ('D' << 16) + ('0' << 8) + 'R';
  float v, i;

  IOMasterPort(MACH_PORT_NULL, &mp);
  d = IOServiceMatching("AppleSMC");
  IOServiceGetMatchingServices(mp, d, &it);
  svc = IOIteratorNext(it);
  IOObjectRelease(it);
  IOServiceOpen(svc, mach_task_self(), 0, &ioc);
  IOObjectRelease(svc);
  memset(&req, 0, sizeof(smc_t));
  memset(&resp, 0, sizeof(smc_t));
  req.cmd = 5;
  req.size = 4;
  req.key = vk;
  IOConnectCallStructMethod(ioc, 2, &req, sizeof(req), &resp, &sz);
  v = resp.val;
  req.key = ik;
  IOConnectCallStructMethod(ioc, 2, &req, sizeof(req), &resp, &sz);
  i = resp.val;
  IOServiceClose(ioc);

  printf("%fV %fA %fW\n", v, i, v*i);
  return 0;
}

确实回答了错误的问题,对不起...我是从USB-C充电器中搜索充电电压和电流的结果来到这里...由于找不到了,因此找出了答案并发布了在这里。但这实际上并不是您想要的;您可能可以将直流输入数据(此)与电池数据(其他答案)结合起来以推断使用数据。
Luyer

2
system_profiler SPPowerDataType | grep Wattage

在MacBook Pro(15英寸,2016年)上为我做花招!


2
这将报告交流适配器的瓦数,而不是当前的功耗。对于上下文:system_profiler SPPowerDataType | grep -C4 Wattage
Edward Anderson

2

这是一个ioreg无需'grep'即可打印大多数电源信息的命令。它的返回速度比我机器上的system_profiler快得多,因此可能更适合在后台编写脚本或运行。

ioreg -w 0 -f -r -c AppleSmartBattery

1

我使用的是MacBook 10.6.8,ioreg -l | grep LegacyBatteryInfo为我工作。

我以前尝试过

ioreg -l | grep LegacyBatteryInfo | \
    cut -d '{' -f 2 | tr -d \} | tr ',' '=' | \
    awk -F'=' '{print ($2*$10/10^22)}' 

它返回0。

苹果的Dev库有解决方案吗?

为什么不看功率计的外部?记录您的读数,然后将其与恒定且常见的%CPU使用率相关联。然后您可以得到一个近似值。


0

我认为对于10.7,这应该在终端上运行:

ioreg -l | grep LegacyBatteryInfo | cut -d '{' -f 2 | tr -d \} | tr ',' '=' | awk -F'=' '{print ($2*$10/10^22)}'


2
ioreg -l | grep LegacyBatteryInfo在iMac上不为我返回任何内容。
加里·基纳嫩(JariKeinänen)2012年
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.