Arch Linux: Wechsel der zu entladenden Batterie

CyborgBeta

Lt. Commander
Registriert
Jan. 2021
Beiträge
1.939
Hi, mein ThinkPad hat eine Dual-Batterie, eine interne und eine externe (459er und 560er).

Nun ist es so, dass immer eine Batterie bis 5% entladen wird und danach erst die andere.

Kann ich ein sh-Script schreiben, dass die zu entladene Batterie wechselt?

Das ist mein Versuch bisher:

Bash:
#!/bin/sh
a=$(cat /sys/class/power_supply/BAT0/capacity)
b=$(cat /sys/class/power_supply/BAT1/capacity)
printf "%s  %s\n" "$a" "$b"
printf "%s  %s\n" "$(tpacpi-bat -g FD 1)" "$(tpacpi-bat -g FD 2)"
if [ "$a" -eq "$b" ]; then
    exit
fi
if [ "$a" -gt "$b" ]; then
    # ?
elif [ "$a" -lt "$b" ]; then   
    # ?
fi

(tpacpi-bat habe ich nachträglich installiert)

Das Problem ist, tpacpi-bat -s FD 1 1 oder tpacpi-bat -s FD 2 1 bewirkt einfach nichts, es findet kein Wechsel statt.

Ich hab auch schon versucht, die udev-events zu sehen, wenn ein Batterie 5% erreicht, aber damit kenne ich mich nicht aus.

Wird das Entladen alles nur vom Batterie controller gesteuert oder auch vom OS?
 
Ich kann nicht direkt mit dem Skript helfen, hab aber spontan an TLP gedacht und ob dir das helfen würde (zu finden hier)

Beim Durchgucken der Features bin ich über dieses Zitat gestolpert und frage mich, ob das der Grund sein könnte, warum dein Skript nicht funktioniert und ob du überhaupt eine Chance hast, das es funktionieren könnte:
ThinkPad battery balancing i.e. selecting the active battery: the Lenovo firmware offers no way to do this, neither manual nor automatic
(steht unter Miscellaneous, hier)

Vielleicht kann dir aber trotzdem jemand helfen.
 
  • Gefällt mir
Reaktionen: rarp und CyborgBeta
Danke!

Ich habe noch das gefunden: https://linrunner.de/tlp/usage/tlp.html#force-a-complete-discharge-of-the-battery-while-on-ac-power

Aber das funktioniert anscheinend nur, wenn AC angeschlossen ist. Ich probiere das einfach mal.

Edit: und dieser Aufruf scheint blockierend zu sein.
Ergänzung ()

Hier wäre die Ausgabe von tlp:

Code:
$ sudo tlp-stat -b
--- TLP 1.6.1 --------------------------------------------

+++ Battery Care
Plugin: thinkpad
Supported features: charge thresholds, recalibration
Driver usage:
* natacpi (thinkpad_acpi) = active (charge thresholds, recalibration)
* tpacpi-bat (acpi_call)  = inactive (superseded by natacpi)
Parameter value ranges:
* START_CHARGE_THRESH_BAT0/1:  0(off)..96(default)..99
* STOP_CHARGE_THRESH_BAT0/1:   1..100(default)

+++ ThinkPad Battery Status: BAT0 (Main / Internal)
/sys/class/power_supply/BAT0/manufacturer                   = SMP
/sys/class/power_supply/BAT0/model_name                     = 01AV459
/sys/class/power_supply/BAT0/cycle_count                    =     79
/sys/class/power_supply/BAT0/energy_full_design             =  24000 [mWh]
/sys/class/power_supply/BAT0/energy_full                    =  21360 [mWh]
/sys/class/power_supply/BAT0/energy_now                     =  10730 [mWh]
/sys/class/power_supply/BAT0/power_now                      =      0 [mW]
/sys/class/power_supply/BAT0/status                         = Not charging

/sys/class/power_supply/BAT0/charge_control_start_threshold =     40 [%]
/sys/class/power_supply/BAT0/charge_control_end_threshold   =     80 [%]
/sys/class/power_supply/BAT0/charge_behaviour               = [auto] inhibit-charge force-discharge

Charge                                                      =   50.2 [%]
Capacity                                                    =   89.0 [%]

+++ ThinkPad Battery Status: BAT1 (Ultrabay / Slice / Replaceable)
/sys/class/power_supply/BAT1/manufacturer                   = SMP
/sys/class/power_supply/BAT1/model_name                     = 01AV460
/sys/class/power_supply/BAT1/cycle_count                    =    256
/sys/class/power_supply/BAT1/energy_full_design             =  24000 [mWh]
/sys/class/power_supply/BAT1/energy_full                    =  20860 [mWh]
/sys/class/power_supply/BAT1/energy_now                     =  12390 [mWh]
/sys/class/power_supply/BAT1/power_now                      =   3887 [mW]
/sys/class/power_supply/BAT1/status                         = Discharging

/sys/class/power_supply/BAT1/charge_control_start_threshold =     50 [%]
/sys/class/power_supply/BAT1/charge_control_end_threshold   =     60 [%]
/sys/class/power_supply/BAT1/charge_behaviour               = [auto] inhibit-charge force-discharge

Charge                                                      =   59.4 [%]
Capacity                                                    =   86.9 [%]

+++ Charge total                                            =   54.8 [%]
 
Zuletzt bearbeitet:
Der Titel deines Threads ist schonmal unschön, oder existiert das Problem nur unter Arch Linux?
Ich denke sowas wie "Thinkpad mit Dual-Battery: Wechsel der zu entladenden Batterie" wäre schon passender...

Zum Thema:
Ich weiß auch nicht wie du auf die Idee kommst, dass das manuelle Umschalten zwischen den Batterien überhaupt möglich wäre.
Bei einer schnellen(also nicht vollständigen) Suche mit Google habe ich nicht einen einzigen Hinweis darauf gefunden, dass es funktionieren sollte.
Dagegen haufenweise Personen, die sagen, dass es gar nicht möglich sei, das zu ändern.

Beispiele zu Themen die man dann findet:
https://askubuntu.com/questions/1090681/using-2-batteries-with-a-thinkpad-t480
https://www.reddit.com/r/thinkpad/comments/qx4cqp/dual_battery_models_is_there_any_way_to_control/

Selbst die Leute von TLP schreiben deutlich:
ThinkPad battery balancing i.e. selecting the active battery: the Lenovo firmware offers no way to do this, neither manual nor automatic
Siehe: https://linrunner.de/tlp/faq/misc.html
Oder auf Deutsch (veraltet): https://thinkwiki.de/TLP_FAQ#Abgrenzung_-_welche_Themen_berücksichtigt_TLP_(absichtlich)_nicht?

Also wenn du Zeit übrig hast, schau es dir weiter an, ansonsten würde ich dir empfehlen deine Zeit mit sinnvolleren Dingen zu verbringen und evtl. mal nach einem besseren Laptop/Notebook Ausschau zu halten.

TLDR: Es kann mit hoher Wahrscheinlichkeit nicht funktionieren, das hättest du mit einer Google-Suche herausfinden können, also viel Zeit von dir und anderen für nichts verschwendet. (Ausgenommen sind hier reverse Engineering/Ändern der Firmware/Modifizieren des PCBs etc.)
 
  • Gefällt mir
Reaktionen: Tanzmusikus und CyborgBeta
007JamesBond schrieb:
oder existiert das Problem nur unter Arch Linux?
Ich bin mir da nicht sicher. Ich hatte vor einiger Zeit Windows installiert (jetzt aber nicht mehr), und ich meine, mich daran zu erinnern, dass dann tatsächlich beide Batterien gleichzeitig entladen wurden, was ja eigentlich auch sinnvoller wäre.

So lade und entlade ich meist immer nur dieselbe Batterie. (Was eher nicht sinnvoll ist)

Und na ja, ein Forum ist für Fragen da und ich habe mich auch vorher informiert.
 
CyborgBeta schrieb:
da und ich habe mich auch vorher informiert.
Man nimmt der Du-hättest-googlen-können-Fraktion natürlich vom Start weg etwas den Wind aus den Segeln, wenn man die Ergebnis der eigenen Recherchen schon gleich im Ausgangspost mit erwähnt. :-)
 
  • Gefällt mir
Reaktionen: 007JamesBond und CyborgBeta
Meines Wissens entlädt die Ladeelektronik immer zuerst die interne und dann die externe Batterie, was total dämlich ist.

Anders herum wäre besser, dann könnte man on the fly die externe Batterie wechseln.

Das Verhalten lässt sich soweit ich mitbekommen habe auch nicht ändern.
 
  • Gefällt mir
Reaktionen: Tanzmusikus und CyborgBeta
CyborgBeta schrieb:
Ich bin mir da nicht sicher. Ich hatte vor einiger Zeit Windows installiert (jetzt aber nicht mehr), und ich meine, mich daran zu erinnern, dass dann tatsächlich beide Batterien gleichzeitig entladen wurden, was ja eigentlich auch sinnvoller wäre.
Warum wäre das sinnvoller? Dann könnte man auch gleich eine Batterie verbauen. Die Idee ist, dass du die erste Batterie entlädst und dann im laufenden Betrieb die erste Batterie tauschen kannst um noch mehr Akkulaufzeit zu bekommen.
 
  • Gefällt mir
Reaktionen: Donnerkind
CyborgBeta schrieb:
So lade und entlade ich meist immer nur dieselbe Batterie. (Was eher nicht sinnvoll ist)
Ich nehme dann einfach den externen Akku raus, um das Gerät zu zwingen, zur Abwechslung mal vom internen zu laufen.

polyphase schrieb:
Meines Wissens entlädt die Ladeelektronik immer zuerst die interne und dann die externe Batterie, was total dämlich ist.
Nein, es ist anders rum. Und beim Laden werden erst beide nacheinander auf 80 % gebracht (erst intern, dann extern), und erst dann wird „aufgerundet“.
 
  • Gefällt mir
Reaktionen: CyborgBeta
@NJay
Wäre sinnvoll, wenn ich noch eine dritte Batterie hätte, aber das ist nicht der Fall. Mir geht es nur darum, die "Lebenszeit" beider Batterien zu optimieren. Und das geht nicht, wenn immer nur dieselbe Batterie geladen und entladen wird - dann ist diese eine schneller kaputt.

Deshalb wollte ich ein Script schreiben, dass alle 2 Minuten einmal aufgerufen werden kann. Ähnlich wie diese Idee: https://github.com/teleshoes/tpacpi-bat/issues/95#issuecomment-394421549

Nur leider geht das anscheinend nicht (so einfach).
 
  • Gefällt mir
Reaktionen: Tanzmusikus
Donnerkind schrieb:
Nein, es ist anders rum. Und beim Laden werden erst beide nacheinander auf 80 % gebracht (erst intern, dann extern), und erst dann wird „aufgerundet“.
Ok, dann hat man das wohl geändert 👍
Bei meinem T470 ist das definitiv noch anders rum.
 
CyborgBeta schrieb:
@NJay
Wäre sinnvoll, wenn ich noch eine dritte Batterie hätte, aber das ist nicht der Fall.
Das mag sein, aber genau dafür wurden eben zwei Batterien verbaut.

Nutz doch einfach die leicht zu wechselnde Batterie ab und tausche sie, sobald sie kaputt ist,
 
... oder lade erst wieder auf, wenn beide Akkus entladen (bzw. auf 20%) sind.

@CyborgBeta
Dein Problem ist (für mich) völlig nachvollziehbar. Würde mir auch so gehen.
Frag doch mal beim Lenovo-Support nach, wie das bei deinem Modell mit der Entladung/Aufladung umgesetzt ist ... und welche Möglichkeiten der Einwirkung sich dir ggf. bieten.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Code:
+++ Battery Care
Plugin: thinkpad
Supported features: charge thresholds, recalibration
Driver usage:
* natacpi (thinkpad_acpi) = active (charge thresholds, recalibration)
* tpacpi-bat (acpi_call)  = inactive (superseded by natacpi)

Wie kann ich denn thinkpad_acpi deaktivieren und acpi_call aktivieren?

Wenn ich sudo modprobe -r thinkpad_acpi aufrufe, dann wechselt er zu generic.

superseded heißt doch, es wird durch ein andere Kernel-Modul blockiert oder?

sudo modprobe thinkpad_acpi enable=N hatte bei mir nix bewirkt...

Danke
 
Das geht leider nicht mit meinem Laptop/dem Batterie-Controller... Es wird immer zuerst die externe Batterie bis 5 % entladen, und danach erst die interne. Ich hab direkt beim Entwickler nachgefragt, und da gibt es keine andere Möglichkeit.

Na ja, es ist ja auch jetzt nicht so dramatisch... solange es funktioniert. Danke an alle.
 
  • Gefällt mir
Reaktionen: 007JamesBond
CyborgBeta schrieb:
Es wird immer zuerst die externe Batterie bis 5 % entladen, und danach erst die interne.
Das wäre doch wunderbar, wenn zuerst der externe Akku entladen wird. Dies wäre mein Favorit.

Grund dafür:
polyphase schrieb:
... dann könnte man on the fly die externe Batterie wechseln.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Ist schon ok. Das, was ich gerne wollte, funktioniert zwar nicht... aber der jetzige "Ist"-Zustand ist auch passabel.

Die Batterie-Controller-Firmware (sofern vorhanden) lässt das nun mal nicht zu. ;)
 
  • Gefällt mir
Reaktionen: Tanzmusikus
Zurück
Oben