gpt4 book ai didi

java - 我如何读取和解释 Java 程序中的/proc/acpi/battery/*?

转载 作者:太空狗 更新时间:2023-10-29 12:37:30 27 4
gpt4 key购买 nike

我正在尝试编写一个 java 函数,从/proc/acpi/battery/BAT0/{state info} 获取我的电池信息。
尽管只要我的电池未插入且充满电时我的输出就很合理,但我注意到在充满电和插入时会发生一个问题。

状态文件中的剩余容量高于信息文件中找到的最后一个完整容量值。这两个输出是/proc/acpi/电池/BAT0/信息

present:                 yes
design capacity: 7800 mAh
last full capacity: 5488 mAh
battery technology: rechargeable
design voltage: 11100 mV
design capacity warning: 780 mAh
design capacity low: 236 mAh
cycle count: 0
capacity granularity 1: 78 mAh
capacity granularity 2: 78 mAh
model number: DELL PD6857
serial number: 1857
battery type: LION
OEM info: SMP

/proc/acpi/battery/BAT0/状态

present:                 yes
capacity state: ok
charging state: charging
present rate: 2668 mA
remaining capacity: 4422 mAh
present voltage: 12843 mV

问题是,当我充满电时,我的剩余容量是 7800mAh,这是我的设计容量,但当关闭交流电时,剩余容量会下降,我的电流率会跃升,使剩余容量等于或低于我的最后满容量。

问题是如何解决决定权的问题。

根据这两个文件中的信息,我如何使用 java 创建计时器来确定电池充满之前还剩多长时间以及电池没电还剩下多长时间。

这是我在 java 代码中的函数。

public static int currentCharge(){
double currentPercent=0;
int lastFullCapacityInt=0;
int remainingCapacityInt=0;
try{
BufferedReader infoIn=new BufferedReader(new InputStreamReader(new FileInputStream(batteryInfo)));
BufferedReader stateIn=new BufferedReader(new InputStreamReader(new FileInputStream(batteryState)));
//first get "last full capacity" from info file.
String lastFullCapacity="";
while((lastFullCapacity=infoIn.readLine())!=null){
if(lastFullCapacity.contains("last full capacity")){
String[] s=lastFullCapacity.split(":");
String p=s[1].trim();
String[] pp=p.split(" ");
String ppp=pp[0].trim();
lastFullCapacityInt=Integer.parseInt(ppp);
}
}
infoIn.close();
//get current capacity from state file
String remainingCapacity="";
while((remainingCapacity=stateIn.readLine())!=null){
if(remainingCapacity.contains("remaining capacity")){
String[] s=remainingCapacity.split(":");
String p=s[1].trim();
String[] pp=p.split(" ");
String ppp=pp[0].trim();
remainingCapacityInt=Integer.parseInt(ppp);
}
}
stateIn.close();

} catch(Exception e){
}
currentPercent=(((double)remainingCapacityInt/lastFullCapacityInt)*100);
int c=(int)currentPercent;
double d=(currentPercent-c)*100;
if(((int)d)>50)
c+=1;
System.out.println(currentPercent);
return (c);
}

只是想在我的电池充满电时添加/proc/acpi/battery/BAT0/state 文件,这样每个人都可以看到我在说什么。

present:                 yes
capacity state: ok
charging state: charged
present rate: 1 mA
remaining capacity: 7800 mAh
present voltage: 13010 mV

下一个读数是在断开交流电源后大约 20 秒

present:                 yes
capacity state: ok
charging state: discharging
present rate: 1993 mA
remaining capacity: 5456 mAh
present voltage: 12650 mV

最佳答案

您可能误读了信息文件的内容。 present rateremaining capacity 的测量单位不同——前者是以毫安为单位的放电率,而后者是以毫安小时为单位的容量。 (如果我们将当前距离视为距离,则这些相当于每小时英里数和英里数。)

因此,在给定放电率和剩余容量的情况下,您可以通过将容量除以放电率来获得预测的“清空时间”;由于这两个值是以毫安小时和毫安为单位测量的,因此结果以小时为单位。以您最后的信息文件为例,例如:

capacity  = 5456 (mAh)
rate = 1993 (mA)
time left = 5456 / 1993 = 2.73 (hours)

至于为什么拔掉机器后剩余电量突然下降,可能是你的电池坏了,或者你机器的电池测量不是特别准确。

关于java - 我如何读取和解释 Java 程序中的/proc/acpi/battery/*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com