arch
새 노트북에 리눅스를 설치했습니다 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
.
결과적으로 다음과 같은 결과를 얻었습니다(time|power|energy):
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 단위로 전력과 에너지의 모든 조합을 시도했지만 곡선이 일치하지 않았습니다.
두 번째 생각은 시간 범위가 너무 커서 전력 피크가 기록되지 않는다는 것입니다.
이렇게 배터리 전원을 기록해 본 경험이 있나요?