Question

I leave my MacBook plugged in for days at a time, so the battery stays charged to 100%. Despite Apple claims to the contrary, I believe that the battery's capacity would be better preserved if I could keep it at an 80% state-of-charge. Is there any command or setting that would let me disable charging from the power adapter?

Here are various options, (1) being my most preferred:

  1. A setting to automatically maintain battery at 80% SoC (like my Tesla has)
  2. A setting/command to use the AC adapter for running power only ("not charging" state)
  3. A command to tell my Mac to totally ignore the AC adapter power

(2) could be cobbled into (1) with some kind of script. Even if not possible from the Mac itself, (3) could be cobbled together with an IOT switch. But with (3), it's unclear the lower maintained SoC would outweigh the cost of the additional cycling.

Was it helpful?

Solution

Use osx_battery_charge_limit.

Follow the instructions on github:

# 1. Install command-line tools
xcode-select --install

# 2. Install Homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# 3. Install Python3
brew install python3

Alternatively, you can also get python3 from python.org.

Then, git clone --recursive https://github.com/DevNulPavel/osx_battery_charge_limit, cd osx_battery_charge_limit, and finally sudo python3 main.py -s 80

I think it might be better if you set it even lower, for example, 60% or 70%. Then, before you need to use it on battery for a long time, sudo python3 main.py -r. You can automate this switching between 80% and full using cron.

There is also a GUI version: https://github.com/godly-devotion/charge-limiter. Both work by setting the BCLM key in SMC to a custom value.

OTHER TIPS

MacOS 11 Big Sur has this option (even a bit smarter) embedded, see Optimise battery charging

enter image description here

Edit: As Joy pointed out, this has been added already in macOS 10.15.5.

Licensed under: CC-BY-SA with attribution
Not affiliated with apple.stackexchange
scroll top