Smartphone-Akkus mit Linux testen und weiter verwenden

Du bist dir nicht sicher welche deiner alten Akkus noch gut sind und wie lange sie durchhalten? Dann kann dir dieser Akku-Test mit Linux helfen.

Bei meinen Fairphones haben sich über die Jahre diverse Akkus angesammelt. Wenn ich zum Beispiel ein altes Smartphone bestellt habe, um den Display oder andere Teile zu ersetzen hatte ich einen Akku über. So haben sich im Laufe der Zeit ca. 15 Akkus bei mir angesammelt. Wie du dir sicher vorstellen kannst ist es nicht leicht einen Überblick über die Qualität und Leistungsfähigkeit der Akkus zu behalten.

Daher habe ich mir ein Testverfahren überlegt, um die Akkus gegeneinander zu prüfen. Ich will einfach sehen welche Akkus noch gut sind und welche ich aussortieren muss.

Das Testverfahren

Eigentlich ist es ganz einfach: Ich lege einen Akku in das Telefon, lade ihn vollständig auf und dann starte ich mit eingeschaltetem hellen Display ein Video in Dauerschleife. Der VLC-Player für Android ist dafür perfekt geeignet. Dann wird das Power-Kabel abgezogen. Je länger jeder Akku das Verfahren durchhält desto besser. Der Ton kann dabei ausgeschaltet sein. Wichtig ist aber, dass für alle Akkus das gleiche Video und die gleiche Helligkeit für den Display verwendet wird. WiFi und Internet habe ich deaktiviert, da sich nicht gut kontrollieren lässt welche App wann kommuniziert und so evtl. zusätzlich Energie braucht.

Jetzt will ich nicht die ganze Zeit daneben sitzen. Trotzdem ist es wichtig die genaue Laufzeit des Telefons zu kennen, bis es aus geht. Denn die genaue Laufzeit ist mein Vergleichswert. Aus diesem Grund verbinde ich das Telefon via Bluetooth mit meinem Rechner. Dieser misst einfach, ob das Gerät noch "connected" ist. So ermittelt mir der Computer die genaue Uptime des Smartphones. So muss ich nicht anwesend sein, um zu wissen, wann das Telefon sich abschaltet.

Warum nicht eine Akku-App nutzen?

Ich möchte möglichst schnell wissen wie lange ein Akku seine Leistung bei Belastung noch halten kann. Eine App arbeitet in der Regel mit Langzeitmessungen im alltäglichen Gebrauch. Der Zustand eines Akkus lässt sich also nicht zeitnah und unabhängig von der Nutzung des Smartphones bestimmen. Außerdem sind Vergleiche von Akkus über einen so langen Zeitraum auch nicht so exakt möglich.

Das Test-Script

Ich habe für den Test ein Bash-Script (check-smartphone-battery.sh) geschrieben, welches die Zeit misst in der das Gerät connected ist. Es kontrolliert jede Sekunde, ob das Gerät noch sichtbar ist. Solange es Connected ist wird die Uptime aktualisiert. Sobald es nicht mehr connected ist bleibt die Uptime beim letzten Wert stehen.

Die Variable DEVICE_NAME ganz am Anfang definiert den Namen deines Bluetooth-Gerätes. Das ist die Bezeichnung die du deinem Smartphone in den Bluetooth-Einstellungen gegeben hast. In meinem Fall muss der String "Fairphone" im Namen vorhanden sein.

#!/bin/bash

DEVICE_NAME=*"Fairphone"*

convertAndPrintSeconds() {
    local totalSeconds=$1;
    local seconds=$((totalSeconds%60));
    local minutes=$((totalSeconds/60%60));
    local hours=$((totalSeconds/60/60%24));
    local days=$((totalSeconds/60/60/24));
    (( $days > 0 )) && printf '%d days ' $days;
    (( $hours > 0 )) && printf '%d hours ' $hours;
    (( $minutes > 0 )) && printf '%d minutes ' $minutes;
    (( $days > 0 || $hours > 0 || $minutes > 0 )) && printf 'and ';
    printf '%d seconds\n' $seconds;
}

STARTTIME=$(date +"%s")
CURRENTTIME=$(date +"%s")

for (( ; ; ))
do

	clear

	BLUETOOTH_DEVICES=$(bluetoothctl devices | cut -f2 -d' ')

	while IFS= read -r uuid
	do 
		INFO=$(bluetoothctl info $uuid)
		NAME=$(echo "$INFO" | grep -e Name)
		CONNECTED=$(echo "$INFO" | grep -e Connected)

		if [[ "$NAME" == $DEVICE_NAME ]]; then
			
			#echo "Device found"

			if [[ "$CONNECTED" == *"yes"* ]]; then
				echo "Device connected"
				CURRENTTIME=$(date +"%s")
			else
				echo "Device disconnected"
			fi
			
		fi
		
	done <<< "$BLUETOOTH_DEVICES"

	SECONDS=$(echo "$CURRENTTIME-$STARTTIME"|bc)

	echo device uptime is $(convertAndPrintSeconds $SECONDS);
	
	sleep 1s

done

Du kannst dir vor dem Test alle verbundenen Geräte auflisten lassen und schauen welchen Namen dein Gerät hat:

bluetoothctl devices | cut -f2 -d' ' | while read uuid; do bluetoothctl info $uuid; done|grep -e "Device\|Connected\|Name" 

Das Testergebnis

Ich habe die Akkus mit einem Stift nummeriert und mir die Laufzeitergebnisse notiert. Dabei fällt auf, dass einige Akkus besonders gut abschneiden 🚀 (länger als 2 Stunden), einige nicht mehr ganz so gut sind 👎 (weniger als 2 Stunden) und zwei Akkus sind komplett durchfallen 💀.

01. 👎device uptime is 1 hours 44 minutes and 41 seconds
02. 👎device uptime is 1 hours 7 minutes and 20 seconds
03. 💀 device uptime is 6 minutes and 33 seconds
04. 🚀 device uptime is 2 hours 16 minutes and 46 seconds
05. 🚀 device uptime is 2 hours 14 minutes and 10 seconds
06. 👎device uptime is 1 hours 54 minutes and 41 seconds
07. 👎device uptime is 1 hours 33 minutes and 17 seconds
08. 👎device uptime is 1 hours 25 minutes and 40 seconds
09. 🚀 device uptime is 2 hours 2 minutes and 7 seconds
10. 🚀 device uptime is 2 hours 5 minutes and 0 seconds
11. 👎device uptime is 1 hours 36 minutes and 43 seconds
12. 🚀 device uptime is 2 hours 7 minutes and 21 seconds
13. 👎device uptime is 1 hours 30 minutes and 57 seconds
14. 👎device uptime is 1 hours 6 minutes and 23 seconds
15. 💀 device uptime is 46 minutes and 15 seconds

Grüße gehen raus an Friedie, der mich mit seinem Wissen über Akkus unterstützt hat.

Titelbild: https://pixabay.com/de/photos/akku-wird-geladen-smartphone-3255267/