Open AloisMahdal opened 5 years ago
Also this might help:
$ head /sys/class/power_supply/BAT*/* ==> /sys/class/power_supply/BAT0/alarm <== 1605000 ==> /sys/class/power_supply/BAT0/capacity <== 99 ==> /sys/class/power_supply/BAT0/capacity_level <== Normal ==> /sys/class/power_supply/BAT0/cycle_count <== 0 ==> /sys/class/power_supply/BAT0/device <== ==> /sys/class/power_supply/BAT0/energy_full <== 32110000 ==> /sys/class/power_supply/BAT0/energy_full_design <== 44000000 ==> /sys/class/power_supply/BAT0/energy_now <== 32050000 ==> /sys/class/power_supply/BAT0/manufacturer <== SANYO ==> /sys/class/power_supply/BAT0/model_name <== 45N1037 ==> /sys/class/power_supply/BAT0/power <== ==> /sys/class/power_supply/BAT0/power_now <== 0 ==> /sys/class/power_supply/BAT0/present <== 1 ==> /sys/class/power_supply/BAT0/serial_number <== 4496 ==> /sys/class/power_supply/BAT0/status <== Unknown ==> /sys/class/power_supply/BAT0/subsystem <== ==> /sys/class/power_supply/BAT0/technology <== Li-ion ==> /sys/class/power_supply/BAT0/type <== Battery ==> /sys/class/power_supply/BAT0/uevent <== POWER_SUPPLY_NAME=BAT0 POWER_SUPPLY_STATUS=Unknown POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Li-ion POWER_SUPPLY_CYCLE_COUNT=0 POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11100000 POWER_SUPPLY_VOLTAGE_NOW=12428000 POWER_SUPPLY_POWER_NOW=0 POWER_SUPPLY_ENERGY_FULL_DESIGN=44000000 POWER_SUPPLY_ENERGY_FULL=32110000 ==> /sys/class/power_supply/BAT0/voltage_min_design <== 11100000 ==> /sys/class/power_supply/BAT0/voltage_now <== 12428000 ==> /sys/class/power_supply/BAT1/alarm <== 0 ==> /sys/class/power_supply/BAT1/capacity <== -1497000 ==> /sys/class/power_supply/BAT1/capacity_level <== Normal ==> /sys/class/power_supply/BAT1/cycle_count <== 0 ==> /sys/class/power_supply/BAT1/device <== ==> /sys/class/power_supply/BAT1/energy_full <== ==> /sys/class/power_supply/BAT1/energy_full_design <== ==> /sys/class/power_supply/BAT1/energy_now <== 14970000 ==> /sys/class/power_supply/BAT1/manufacturer <== ==> /sys/class/power_supply/BAT1/model_name <== ==> /sys/class/power_supply/BAT1/power <== ==> /sys/class/power_supply/BAT1/power_now <== 0 ==> /sys/class/power_supply/BAT1/present <== 1 ==> /sys/class/power_supply/BAT1/serial_number <== ==> /sys/class/power_supply/BAT1/status <== Unknown ==> /sys/class/power_supply/BAT1/subsystem <== ==> /sys/class/power_supply/BAT1/technology <== Unknown ==> /sys/class/power_supply/BAT1/type <== Battery ==> /sys/class/power_supply/BAT1/uevent <== POWER_SUPPLY_NAME=BAT1 POWER_SUPPLY_STATUS=Unknown POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Unknown POWER_SUPPLY_CYCLE_COUNT=0 POWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000 POWER_SUPPLY_VOLTAGE_NOW=11970000 POWER_SUPPLY_POWER_NOW=0 POWER_SUPPLY_ENERGY_NOW=14970000 POWER_SUPPLY_CAPACITY=-1497000 ==> /sys/class/power_supply/BAT1/voltage_min_design <== 10800000 ==> /sys/class/power_supply/BAT1/voltage_now <== 11970000 $
Thanks for the very detailed report! Just for information, battery state is only read from /sys/class/power_supply/BAT%d/uevent
files.
So for /sys/class/power_supply/BAT1/uevent
that is the culprit here, one preliminary question, has that battery reported a correct value in the past? You can see that POWER_SUPPLY_CAPACITY
has negative value that is almost exactly the percentage value displayed. It's very likely that the value is invalid and that shouldn't be taken into account. I didn't make sure POWER_SUPPLY_CAPACITY > 0
when capacity support was introduced in #216, so maybe we should do that here.
That being said, I can only have that output when using your values: UNK inf%
. But reproducing output for battery, that is accumulating values and comparing it through time is very tricky.
[...] has that battery reported a correct value in the past?
At least from i3status POV, it has always been normal. And after a day or so, I noticed that it's back to normal.
[...] You can see that
POWER_SUPPLY_CAPACITY
has negative value that is almost exactly the percentage value displayed. It's very likely that the value is invalid and that shouldn't be taken into account. I didn't make surePOWER_SUPPLY_CAPACITY > 0
when capacity support was introduced in #216, so maybe we should do that here.
One thing that I did not mention, and definitely should have: I got this result after turning on the laptop after it was sitting in a wardrobe, powered off for relatively long time (1-2 weeks).
I don't know a lot about batteries, but from what I've heard, kernel is supposed to regularly refresh some meta-data related to battery degradation. Since that could not have happened for long time, maybe this might make sense: some part of this data has changed more than usual, and now either there's bug in kernel module, or there's bug in battery firmware, or this is a strange way of kernel to say "we don't know".
i think this should have been prevented by print_battery_info.c#L618.
This is not an i3status since it only reads from the sys/class/power_supply/BAT%d/ files and writes them to STDOUT. Looks like the kernel was reporting the battery stats incorrectly.
Hi,
one of my battery has really crazy percentage:
strace.log upower-d.txt