怎么用脚本获取电源效率

wen 实用脚本 1

本文目录导读:

怎么用脚本获取电源效率

  1. 方法一:纯软件估算(最常用,但误差较大)
  2. 方法二:使用智能插头/功率计 + 脚本(推荐)
  3. 方法三:通过IPMI/BMC获取服务器电源效率(仅限企业级服务器)
  4. 总结:你应该用哪种方法?

获取电源效率通常需要测量输入功率(从电网取电)和输出功率(提供给电脑硬件),然后计算:效率 = 输出功率 / 输入功率 × 100%

普通电脑通过软件脚本无法直接、准确地测量硬件级的实际输入功率,原因如下:

  1. 电源本身不输出效率数据:PC电源没有像温度、电压那样的“效率传感器”。
  2. 输入功率的测量需要硬件:需要电流钳、功率计等设备在电源线处测量。

脚本只能做近似估算或获取理论值,无法得到真实效率。 以下是几种不同场景下的方法:

纯软件估算(最常用,但误差较大)

这种方法通过读取硬件功耗(输出功率),然后根据电源铭牌上的转换效率(通常只有几个点)进行反推。

步骤:

  1. 获取输出功率:使用脚本调用硬件监控工具(如 OpenHardwareMonitorLibreHardwareMonitorHWiNFO SDK),读取CPU、GPU等组件的功耗总和。
  2. 查找效率曲线:查询你的电源型号在【80 PLUS认证】网站或评测数据库(如 Tom‘s Hardware、Cybenetics)中的效率数据(在 50%负载时效率为 90%)。
  3. 计算输入功率输入功率 ≈ 输出功率 / 效率百分比
  4. 得到效率(反推):如果你已经知道输入功率(例如通过智能插头),效率就是 输出/输入

示例脚本(Python,使用 librehardwaremonitor 的 WMI 接口):

import wmi
import psutil
def get_total_power():
    """尝试通过WMI获取系统总功耗(需要管理员权限且依赖特定硬件支持)"""
    try:
        c = wmi.WMI(namespace="root\OpenHardwareMonitor")
        sensors = c.Sensor()
        total_power = 0
        # 注意:OpenHardwareMonitor不总是提供"Total"或"Package"功率,需遍历
        for sensor in sensors:
            if sensor.SensorType == 'Power':
                # 过滤掉最低级的子传感器,只取大的(如CPU Package, GPU Total, DRAM, VRM)
                # 实际应用中需要更精确的过滤逻辑
                if 'Package' in sensor.Name or 'Total' in sensor.Name or 'System' in sensor.Name:
                    total_power += float(sensor.Value)
        return total_power
    except Exception as e:
        print(f"无法获取功率数据:{e}")
        return None
if __name__ == "__main__":
    output_power_watts = get_total_power()
    if output_power_watts:
        efficiency_percent = 0.90 # 假设电源平均效率90%
        input_power = output_power_watts / efficiency_percent
        print(f"估计输出功率: {output_power_watts:.1f}W")
        print(f"假设效率90%,估计输入功率: {input_power:.1f}W")
        print(f"效率: {efficiency_percent * 100:.1f}% (这是假设值,非实测)")
    else:
        print("无法获取输出功率。")

缺点:误差在 10%-30% 以上,且效率是你手动输入的固定值,不是动态测量值。


使用智能插头/功率计 + 脚本(推荐)

这是最有意义的方法,通过硬件(智能插头或USB功率计)获取真实的输入功率

硬件准备:

  • WiFi智能插头:如 TP-Link Kasa HS110/HS300Sonoff S31 (可刷ESPHome/Tasmota)、Gosund 等,具有实时功率测量功能。
  • USB功率计:如 Power-Z 系列(适合笔记本电脑,但精度有限)。

脚本实现(以TP-Link Kasa HS110为例):

  1. 安装库pip install python-kasa
  2. 脚本:读取插头的实时功率(即输入功率),同时用 librehardwaremonitor 读组件功率(输出功率)。
import asyncio
from kasa import Discover
import wmi
async def get_input_power():
    """从智能插头获取输入功率"""
    devices = await Discover.discover()
    for ip, dev in devices.items():
        await dev.update()
        if hasattr(dev, 'emeter'):
            emeter = dev.emeter
            # 实时功率(瓦特)
            power = emeter.power  # kW -> 乘以1000转为W
            return power * 1000 if power < 100 else power # 防止单位混淆
    return None
def get_output_power():
    """从OpenHardwareMonitor获取总输出功率"""
    try:
        c = wmi.WMI(namespace="root\OpenHardwareMonitor")
        sensors = c.Sensor()
        total_power = 0
        for sensor in sensors:
            if sensor.SensorType == 'Power' and 'Package' in sensor.Name:
                total_power += float(sensor.Value)
        # 或者简单一点:读取CPU + GPU + 其他主板功耗(需要知道传感器名称)
        return total_power
    except:
        return None
if __name__ == "__main__":
    input_watts = asyncio.run(get_input_power())
    output_watts = get_output_power()
    if input_watts and output_watts:
        efficiency = (output_watts / input_watts) * 100
        print(f"输入功率: {input_watts:.2f} W")
        print(f"输出功率: {output_watts:.2f} W")
        print(f"电源效率: {efficiency:.2f} %")
    else:
        print("无法同时获取输入/输出功率。")

优点:接近真实值(误差在1-3%内)。 缺点:需要额外硬件。


通过IPMI/BMC获取服务器电源效率(仅限企业级服务器)

在服务器环境(如 Dell iDRAC、HP iLO、Supermicro IPMI)中,电源本身自带监控芯片。

使用 ipmitool 脚本(Linux):

# 安装: sudo apt-get install ipmitool
# 获取电源实时功率(W)
sudo ipmitool sensor get "System Level" | grep "Current" | awk '{print $3}'
# 或获取特定PSU的输入/输出功率(取决于厂商OEM命令)
sudo ipmitool raw 0x2e 0xc8 0x57 0x01 0x00 0x01 # (示例, 需要查阅具体手册)

很多服务器电源通过IPMI直接提供 Input PowerOutput Power,这时脚本可以精确计算效率。


你应该用哪种方法?

场景 推荐方法 精度 成本
个人DIY电脑 智能插头 + 脚本 ±2% 约60-200元
只是想大概看看 软件估算 ±30% 免费
服务器机房 IPMI/BMC脚本 ±1% 无需额外硬件
开发测试(笔记本) USB功率计(如Power-Z) + 脚本 ±5% 约100-500元

如果你只是想写一个“能运行的脚本”而不关心准确性,用方法一就够了,如果你想真正测量效率,请购买一个智能功率插头并使用方法二。

上一篇用脚本定时弹出提醒并记录

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!