Hey everyone,
I’ve fully switched to using the Librem 5 as my daily driver and love it, but the battery management has been a bit of a project for me. Leaving it plugged in all day doesn’t sit right with me when the battery stays fully charged and keeps drawing power. So, I’ve been experimenting with ways to tweak this. I’ve managed to set up a system where the battery cuts off from charging when it hits a certain point but remains available for discharge down to a lower threshold if the phone needs it.
Here’s how the scripts work under various conditions:
- Standard Charging: The phone charges to a predetermined upper limit (like 90%) and then stops to prevent battery strain.
- Continuous Power Supply: If it remains plugged in post-charge, the phone priorities drawing power directly off the charger, sparing the battery , and only use the battery if the power supply is not producing enough juice.
- Reconnection Nuances: Unplugging and replugging doesn’t immediately resume charging. It waits until the battery drops below a set lower threshold (say, 60%), which helps in maintaining battery health by avoiding short, unnecessary charge cycles.
- Handling Power Fluctuations: For those times when the power source is unstable or you’re frequently plugging and unplugging, the script ensures that repetitive charging doesn’t kick in unless truly needed.
- Customization: The thresholds for both the upper and lower limits can be adjusted to fit personal usage patterns and battery longevity goals.
Project Repositories:
- For PinePhone: PinePhone Battery Manager
- Librem 5: Librem 5 Battery Manager
On the PinePhone, managing this was pretty straightforward because the driver includes a ‘charge behavior’ driver that you can manipulate directly. For the PinePhonePro, you can find the charge behaviour control at this path:
/sys/class/power_supply/{battery_type}/charge_behaviour
The Librem 5, however, threw a curveball my way. It doesn’t support modifying charge behavior through the usual driver settings. The workaround I found on the wiki, using the charge LED as a control point. Here’s how I control it:
/sys/class/leds/chg_en/brightness
This lets me toggle the charging on and off
I’m looking to further refine these scripts and maybe even bundle them into a Flatpak. My next goals are adding rtcwake for it to check after every 30 mins for notifications and battery level, and maybe control the battery cutoff via I2C but that will require some testing.
Feel free to contribute and let me know what you all think about it.
If someone has a better method or can suggest a better workaround for the Librem 5, I’m all ears.
Heads-up: This setup is still very much DIY. Make sure you really dig into the scripts before deploying them. If your phone turns into Charmander that is all on you!
Cheers!