Table of Contents
MacBook Battery Monitoring
Introduction
I bought a MacBook Pro in 2013 and wrote a script to routinely monitor the battery health. The script has run regularly since November 2013.
The Software
The script is very basic and I was new to Bash when I first wrote it in 2013; I haven't changed it at all since then.
#!/usr/bin/env bash datetime=$(date) batt=$(/usr/sbin/ioreg -l | grep -i "capacity") echo "$datetime" >> /test.txt echo "**" >> /test.txt echo "$batt" >> /test.txt echo "**" >> /test.txt
I have configured this script to run every 30 minutes with the following crontab config:
*/30 * * * * bash batt.sh
Example Output
Here is a snippet from the data I have gathered recently:
Thu Apr 1 13:00:01 BST 2021 ** | | "AppleRawCurrentCapacity" = 5639 | | "AppleRawMaxCapacity" = 8021 | | "MaxCapacity" = 8021 | | "CurrentCapacity" = 5639 | | "LegacyBatteryInfo" = {"Amperage"=18446744073709547542,"Flags"=4,"Capacity"=8021,"Current"=5639,"Voltage"=11612,"Cycle Count"=190} | | "DesignCapacity" = 8440 | | "BatteryData" = {"StateOfCharge"=18688,"Voltage"=11918,"QmaxCell1"=15651,"QmaxCell2"=2082,"DesignCapacity"=8440,"QmaxCell0"=53282,"CycleCount"=190} ** Fri Apr 2 10:30:01 BST 2021 ** | | "AppleRawCurrentCapacity" = 7805 | | "AppleRawMaxCapacity" = 8175 | | "MaxCapacity" = 8175 | | "CurrentCapacity" = 7805 | | "LegacyBatteryInfo" = {"Amperage"=18446744073709550612,"Flags"=4,"Capacity"=8175,"Current"=7805,"Voltage"=12453,"Cycle Count"=190} | | "DesignCapacity" = 8440 | | "BatteryData" = {"StateOfCharge"=24832,"Voltage"=12754,"QmaxCell1"=6179,"QmaxCell2"=2594,"DesignCapacity"=8440,"QmaxCell0"=48674,"CycleCount"=190} ** Fri Apr 2 11:00:00 BST 2021 ** | | "AppleRawCurrentCapacity" = 6992 | | "AppleRawMaxCapacity" = 8120 | | "MaxCapacity" = 8120 | | "CurrentCapacity" = 6992 | | "LegacyBatteryInfo" = {"Amperage"=18446744073709550047,"Flags"=4,"Capacity"=8120,"Current"=6992,"Voltage"=12199,"Cycle Count"=190} | | "DesignCapacity" = 8440 | | "BatteryData" = {"StateOfCharge"=22528,"Voltage"=12045,"QmaxCell1"=6179,"QmaxCell2"=2594,"DesignCapacity"=8440,"QmaxCell0"=48674,"CycleCount"=190} ** Fri Apr 2 11:30:00 BST 2021 **
Battery Replacement
In October 2018, I replaced the battery due to swelling.
Original Battery
I used the data collected from the original MacBook battery to create 2 graphs using a website I wrote. Here is a screenshot of those graphs:
There are 2 noteworthy points on this graph which I have annotated.
Point A (24th October 2013 – 8th November 2013) is the period of time where I owned the MacBook but hadn’t created the script.
Point B (27th January 2016 – 6th July 2016) is a period of time where the MacBook was out of my possession and not running the script; I’m not sure how much it was used during that period but it accumulated 2 cycles at some point within that timeframe.
The original Apple battery lasted almost exactly 5 years before failing due to swelling. It reached 305 charge cycles. Here is the final image of the original battery (partially removed from the MacBook):
Second Battery
I bought my replacement battery from the official iFixit EU Store (product EU117046-4). System Information on MacOS reports the battery name as `bq20z451` made by SMP. This battery immediately reported zero charge cycles and a health of 104.57% when first installed.
This battery has been performing perfectly (comparable to the original battery). I have collected and graphed data between 16th October 2018 and 2nd April 2021 which can be seen below:
This battery currently has 190 charge cycles and reports a health of 95.39%. There are 2 small gaps in the data for the new battery: both were caused by the MacBook going unused for a while and not by an issue with the monitoring.
I am still using this replacement battery and the health of it continues to be monitored at 30-minute intervals.
Conclusion
The data collected with this script isn't particularly useful but it can be interesting to see how battery usage trends changed over time. The monitoring script is very lightweight and it becomes easy to forget it's even running. For that reason, I see no particular reason why you shouldn't run something like this on your own laptops.