Как мне прочитать и интерпретировать / proc / acpi / battery / * в Java-программе? - PullRequest
2 голосов
/ 20 августа 2011

Я пытаюсь написать функцию Java, которая получает информацию о моей батарее из / proc / acpi / battery / BAT0 / {информация о состоянии}.
Хотя у меня есть разумный выход, если моя батарея не подключенаПри полной зарядке я заметил одну проблему, которая возникает при полной зарядке и подключении к сети.

Оставшаяся емкость в файле состояния выше, чем последнее значение полной емкости, найденное в информационном файле.Два выхода: / proc / acpi / battery / BAT0 / info

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 / state

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

Проблема в том, что когда япри полной зарядке моя оставшаяся емкость составляет 7800 мАч, что соответствует моей проектной емкости, но при отключении от переменного тока оставшаяся емкость падает, а скорость моего присутствия скачет, чтобы сделать оставшуюся емкость равной или ниже моей последней полной емкости.

вопрос заключается в том, как решить проблему определения мощности.

И на основе информации в этих двух файлах, как мне создать таймер с использованием 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 /, когда мойБатарея полностью заряжена, так что все могут видеть, о чем я говорю.

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

1 Ответ

2 голосов
/ 20 августа 2011

Возможно, вы неправильно читаете содержимое информационного файла. present rate и remaining capacity не измеряются в одних и тех же единицах - первая - это скорость разряда в миллиамперах, а вторая - емкость в миллиамперах-часах. (Если мы принимаем ток в качестве расстояния, они эквивалентны милям в час и милям.)

Таким образом, вы можете получить прогнозируемое «время опорожнения», учитывая скорость разряда и оставшуюся емкость, разделив емкость на скорость; Поскольку эти два значения измеряются в миллиампер-часах и миллиамперах, результат выражается в часах. Используя ваш последний информационный файл в качестве образца, например:

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

Относительно того, почему оставшаяся емкость резко падает, когда вы отключаете устройство от сети, есть вероятность, что у вас просто плохой аккумулятор, или измерение аккумулятора вашей машины не особенно точно.

...