X-Git-Url: https://pere.pagekite.me/gitweb/homepage.git/blobdiff_plain/003b81920f99022757fe66c24b275aebdc197782..5b6222f93f94e2721e119fb4a477de4a547e89ba:/blog/archive/2015/09/index.html diff --git a/blog/archive/2015/09/index.html b/blog/archive/2015/09/index.html index 0d6f348a86..3200288c01 100644 --- a/blog/archive/2015/09/index.html +++ b/blog/archive/2015/09/index.html @@ -21,6 +21,149 @@

Entries from September 2015.

+
+
+ The life and death of a laptop battery +
+
+ 24th September 2015 +
+
+

When I get a new laptop, the battery life time at the start is OK. +But this do not last. The last few laptops gave me a feeling that +within a year, the life time is just a fraction of what it used to be, +and it slowly become painful to use the laptop without power connected +all the time. Because of this, when I got a new Thinkpad X230 laptop +about two years ago, I decided to monitor its battery state to have +more hard facts when the battery started to fail.

+ + + +

First I tried to find a sensible Debian package to record the +battery status, assuming that this must be a problem already handled +by someone else. I found +battery-stats, +which collects statistics from the battery, but it was completely +broken. I sent a few suggestions to the maintainer, but decided to +write my own collector as a shell script while I waited for feedback +from him. Via +a +blog post about the battery development on a MacBook Air I also +discovered +batlog, not +available in Debian.

+ +

I started my collector 2013-07-15, and it has been collecting +battery stats ever since. Now my +/var/log/hjemmenett-battery-status.log file contain around 115,000 +measurements, from the time the battery was working great until now, +when it is unable to charge above 7% of original capasity. My +colletor shell script is quite simple and look like this:

+ +
+#!/bin/sh
+# Inspired by
+# http://www.ifweassume.com/2013/08/the-de-evolution-of-my-laptop-battery.html
+# See also
+# http://blog.sleeplessbeastie.eu/2013/01/02/debian-how-to-monitor-battery-capacity/
+logfile=/var/log/hjemmenett-battery-status.log
+
+files="manufacturer model_name technology serial_number \
+    energy_full energy_full_design energy_now cycle_count status"
+
+if [ ! -e "$logfile" ] ; then
+    (
+	printf "timestamp,"
+	for f in $files; do
+	    printf "%s," $f
+	done
+	echo
+    ) > "$logfile"
+fi
+
+log_battery() {
+    # Print complete message in one echo call, to avoid race condition
+    # when several log processes run in parallell.
+    msg=$(printf "%s," $(date +%s); \
+	for f in $files; do \
+	    printf "%s," $(cat $f); \
+	done)
+    echo "$msg"
+}
+
+cd /sys/class/power_supply
+
+for bat in BAT*; do
+    (cd $bat && log_battery >> "$logfile")
+done
+
+ +

The script is called when the power management system detect a +change in the power status (power plug in or out), and when going into +and out of hibernation and suspend. In addition, it collect a value +every 10 minutes. This make it possible for me know when the battery +is discharging, charging and how the maximum charge change over time. +The code for the Debian package +is now +available on github.

+ +

The collected log file look like this:

+ +
+timestamp,manufacturer,model_name,technology,serial_number,energy_full,energy_full_design,energy_now,cycle_count,status,
+1376591133,LGC,45N1025,Li-ion,974,62800000,62160000,39050000,0,Discharging,
+[...]
+1443090528,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
+1443090601,LGC,45N1025,Li-ion,974,4900000,62160000,4900000,0,Full,
+
+ +

I wrote a small script to create a graph of the charge development +over time. This graph depicted above show the slow death of mylaptop +battery.

+ +

But why is this happening? Why are my laptop batteries always +dying in a year or two, while the batteries of space probes and +satellites keep working year after year. If we are to believe +Battery +University, the cause is me charging the battery whenever I have a +chance, and the fix is to not charge the Lithium-ion batteries to 100% +all the time, but to stay below 90% of full charge most of the time. +I've been told that the Tesla electric cars +limit +the charge of their batteries to 80%, with the option to charge to +100% when preparing for a longer trip (not that I would want a car +like Tesla where rights to privacy is abandoned, but that is another +story), which I guess is the option we should have for laptops on +Linux too.

+ +

Is there a good and generic way with Linux to tell the battery to +stop charging at 80%, unless requested to charge to 100% once in +preparation for a longer trip? I found +one +recipe on askubuntu for Ubuntu to limit charging on Thinkpad to +80%, but could not get it to work (kernel module refused to +load).

+ +

I wonder why the battery capacity was reported to be more than 100% +at the start. I also wonder why the "full capacity" increases some +times, and if it is possible to repeat the process to get the battery +back to design capacity. And I wonder if the discharge and charge +speed change over time, or if this stay the same. I did not yet try +to write a tool to calculate the derivative values of the battery +level, but suspect some interesting insights might be learned from +those.

+ +
+
+ + + Tags: debian, english. + + +
+
+
+
Book cover for the Free Culture book finally done @@ -111,7 +254,7 @@ proof readers a chance to complete their work.

  • August (2)
  • -
  • September (1)
  • +
  • September (2)
  • @@ -321,7 +464,7 @@ proof readers a chance to complete their work.

  • chrpath (2)
  • -
  • debian (111)
  • +
  • debian (112)
  • debian edu (153)
  • @@ -333,7 +476,7 @@ proof readers a chance to complete their work.

  • drivstoffpriser (4)
  • -
  • english (287)
  • +
  • english (288)
  • fiksgatami (23)