arch
我在我的新笔记本电脑上安装了linux msi prestige ps42
。令我失望的是,电池寿命很快就恶化了。使用前 2 个月后,电池只能为笔记本电脑供电约 3 小时。
我自然想计算一下实际的功耗是多少。为此,我/sys/class/power_supply/BAT1
使用 Python 守护进程记录了电池统计信息。主循环是这样的:
with open('/sys/class/power_supply/BAT1/current_now', 'r') as curFile:
current = float(curFile.read().replace('\n', ''))
with open('/sys/class/power_supply/BAT1/voltage_now', 'r') as volFile:
voltage = float(volFile.read().replace('\n', ''))
with open('/sys/class/power_supply/BAT1/charge_now', 'r') as charNowFile:
chargeNow = float(charNowFile.read().replace('\n', ''))
timeNow = time.time()
# time|power|energy
print(timeNow - startTime, current*voltage*1e-12, chargeNow*voltage*1e-12)
time.sleep(1)
功效计算如下voltage*current
(power_now
文件夹中缺少文件)并乘以1e-12
这些数据应带有的micro
单位。能量计算为voltage*charge
并乘以1e-12
。时间被记录在seconds
.
结果我得到了这样的结果(时间|功率|能量):
0.0001957416534423828 7.868766 38.895102
1.1173264980316162 9.038664 38.895102
2.2340087890625 9.039228 38.897529
3.350689172744751 8.526364 38.897529
4.46724009513855 8.522639999999999 38.880539999999996
5.583956003189087 8.535461999999999 38.865978
6.69666862487793 10.040778 38.865978
7.810216903686523 9.999395999999999 38.705796
8.811989784240723 9.999395999999999 38.705796
9.81338357925415 8.591463 38.829572999999996
10.815097093582153 8.591463 38.829572999999996
...
接下来我计算了功率的能量依赖性:
calcEArray = np.empty(0, float)
calcEArray = np.append(calcEArray, array[0,2])
for prevStat, nextStat in zip(array[:-1], array[1:]):
calcEArray = np.append(calcEArray, calcEArray[-1] - (nextStat[0]-prevStat[0])*prevStat[1])
正如代码所示:E_i = E_(i-1) - (time_i - time_(i-1))*power_(i-1)
第一个想法显然是单位是错误的,但我尝试了 10eX 单位的功率和能量的所有组合,但曲线不匹配。
第二个想法是时间跨度太大并且没有记录功率峰值。
您有这样记录电量的经历吗?