From: Petter Reinholdtsen Date: Thu, 24 Sep 2015 10:51:18 +0000 (+0200) Subject: Prepare for a new post. X-Git-Url: http://pere.pagekite.me/gitweb/homepage.git/commitdiff_plain/ed60002c328a61dcaa0d02978516e56e329770d4?ds=sidebyside Prepare for a new post. --- diff --git a/blog/data/2015-09-24-laptop-battery.txt b/blog/data/2015-09-24-laptop-battery.txt new file mode 100644 index 0000000000..9630b186e4 --- /dev/null +++ b/blog/data/2015-09-24-laptop-battery.txt @@ -0,0 +1,108 @@ +Title: The Life and death of a laptop battery +Tags: english +Date: 2015-09-24 20:00 + +

When I get a new laptop, the battery life time of the lap top at +the start is OK. But this do not last. I got 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 to it. +Because of this, when I got a new Thinkpad X230 laptop almost two +years ago, I decided to monitor its 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 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 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 even wrote a small script to create a graph of the charge +development over time. This show the slow death of my Lenovo Thinkpad +X230 laptop battery:

+ + + +

But why is this happening? Why are my laptop batteries dying, +while the batteries of space probes and satellites keep working year +after year. If we are to believe +Battery +University, 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 Tesla, +but that is another story), which I guess is the option we should have +for laptops on Linux too.

+ +

Is there a 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?

diff --git a/blog/images/2015-09-24-laptop-battery-graph.png b/blog/images/2015-09-24-laptop-battery-graph.png new file mode 100644 index 0000000000..9c45e4d793 Binary files /dev/null and b/blog/images/2015-09-24-laptop-battery-graph.png differ