本文目录导读:

获取电源效率通常需要测量输入功率(从电网取电)和输出功率(提供给电脑硬件),然后计算:效率 = 输出功率 / 输入功率 × 100%。
普通电脑通过软件脚本无法直接、准确地测量硬件级的实际输入功率,原因如下:
- 电源本身不输出效率数据:PC电源没有像温度、电压那样的“效率传感器”。
- 输入功率的测量需要硬件:需要电流钳、功率计等设备在电源线处测量。
脚本只能做近似估算或获取理论值,无法得到真实效率。 以下是几种不同场景下的方法:
纯软件估算(最常用,但误差较大)
这种方法通过读取硬件功耗(输出功率),然后根据电源铭牌上的转换效率(通常只有几个点)进行反推。
步骤:
- 获取输出功率:使用脚本调用硬件监控工具(如
OpenHardwareMonitor、LibreHardwareMonitor或HWiNFOSDK),读取CPU、GPU等组件的功耗总和。 - 查找效率曲线:查询你的电源型号在【80 PLUS认证】网站或评测数据库(如 Tom‘s Hardware、Cybenetics)中的效率数据(在 50%负载时效率为 90%)。
- 计算输入功率:
输入功率 ≈ 输出功率 / 效率百分比。 - 得到效率(反推):如果你已经知道输入功率(例如通过智能插头),效率就是
输出/输入。
示例脚本(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/HS300、Sonoff S31 (可刷ESPHome/Tasmota)、Gosund 等,具有实时功率测量功能。
- USB功率计:如 Power-Z 系列(适合笔记本电脑,但精度有限)。
脚本实现(以TP-Link Kasa HS110为例):
- 安装库:
pip install python-kasa - 脚本:读取插头的实时功率(即输入功率),同时用
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 Power 和 Output Power,这时脚本可以精确计算效率。
你应该用哪种方法?
| 场景 | 推荐方法 | 精度 | 成本 |
|---|---|---|---|
| 个人DIY电脑 | 智能插头 + 脚本 | ±2% | 约60-200元 |
| 只是想大概看看 | 软件估算 | ±30% | 免费 |
| 服务器机房 | IPMI/BMC脚本 | ±1% | 无需额外硬件 |
| 开发测试(笔记本) | USB功率计(如Power-Z) + 脚本 | ±5% | 约100-500元 |
如果你只是想写一个“能运行的脚本”而不关心准确性,用方法一就够了,如果你想真正测量效率,请购买一个智能功率插头并使用方法二。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播