MacBook Air を半分放電させてからシャットダウンする作業を自動化する

数ヶ月に1回ほど使用する MacBook Air があるのだが、長期的に充電池を放置することになるので、充電池が劣化するリスクが有る。 こういう場合のベストプラクティスは、 Apple が公式に公開している記事によると、 【50% の充電状態で電源を切って適正温度で維持すること。半年に一度は確認して 50% を維持すること。】だそうである。 だから使用後には AC アダプターから外して 50% になるまで待ってから電源を切るという行動をする必要があるのだが、こんなこと人間がやる必要ないなと思ったので自動化した。 下のコードに名前をつけて $ caffeinate -di python BatteryTo50PercentAndShutdown.py というふうにスクリーンロックを抑止しながら実行してやればよい。

# Usage: $ caffeinate -di python BatteryTo50PercentAndShutdown.py

import time
import subprocess
import re

# Drain battery until it reaches to the percentage of aim.:
percentage_of_aim = 50
# percentage_of_aim = 100  # debug
cmd = 'pmset -g batt'
# re_percent = re.compile('-InternalBattery-0\s*([0-9]+)%')
re_percent = re.compile('\s*([0-9]+)%')
while True:
    proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    out, err = proc.communicate()
    percentage = int(re_percent.findall(out)[0])
    print percentage
    if percentage < percentage_of_aim:
        break
    time.sleep(60)

# Shutdown:
# http://stackoverflow.com/questions/28438247/computer-shut-off-python-3-4
import subprocess
subprocess.call(['osascript', '-e', 'tell app "System Events" to shut down'])