MacBook Pro, MacBook air (Snow Leopard) のバッテリーの容量を半年程モニタしたグラフ

私物のMacBook Pro (13inch) , MacBook air (11inch) と、会社で私用している MacBook Pro (15inch) のバッテリー容量を 半年程 はてなグラフに数値を投稿してモニタリングしていたので 公開します。

発端

Macのバッテリーに関する情報は /usr/sbin/ioreg を実行して取得できます。
バッテリーの最大容量となる数値は ioreg -l | grep MaxCapacity で得られる値を利用したらよいようです 。
(この数値は 「このMacについて」>「詳しい情報」 > 「電源」でも確認できます )

ということで 毎日のcronで ioregのMaxCapacityの値を取得はてなグラフに投稿、という形式で半年ほどモニタリングしました。

使用したスクリプト

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use DateTime;
use Mac::IORegistry::Battery;

my $mac     = shift || die;
my $battery = Mac::IORegistry::Battery->get;
my $ua      = LWP::UserAgent->new;

$ua->credentials('graph.hatena.ne.jp:80', '', 'hiboma', 'ひみつのぱすわーど');
my $res = $ua->post( 'http://graph.hatena.ne.jp/api/post', {
    graphtype => 'bars',
    graphname => "${mac}::Battery",
    date      => DateTime->now->ymd,
    value     => $battery->{MaxCapacity}, 
});
warn $res->content unless $res->code == 201;

http://developer.hatena.ne.jp/ja/documents/graph/apis/rest に登録されているコードのまんまです


Mac::IORegistry::Battery は拙作のモジュールで /usr/sbin/ioreg -r -n AppleSmartBattery の出力をハッシュに変換するだけの単純コードです。コードは github に置いてあります

使用しているOSバージョンは全て Snow Leopard です。(未だにLion導入してないので...計測していません)

結果


半年程計測して下記のようなグラフが得られました。(縦軸の単位は mAh )

  • (A) 私物MacBook Pro 13inch。2010年10月くらいに購入。自宅サーバーとして常時電源ON。ケーブルも常時接続。

hibomac::Battery

MacbookPro::Battery

hibomair::Battery

グラフの赤線は ioregで得られる DesignCapacity という値です。 設計上の最大容量をさすようです。

観察

いずれのグラフでも時間が経つにつれてバッテリーの容量が減っていますね

常時電源ケーブルをつけている (A)のMacは値の変動がほぼありません。容量が急激に減っている時期がありますが、一時期サーバーとしての使用を止めて起動していない時期でした。

(B)と(C)のMacは 値の変動激しいですね。持ち運びして充電ケーブルをつけていない環境での使用時間も多いです。一時的に値が回復している時期もありますが、長期的に見ると下降しています。

その他

Appleが書いている http://www.apple.com/jp/batteries/notebooks.html によると

Appleは、ノートブックを電源コンセントに常時接続しておくことを推奨していません。
理想的なのは、通勤の電車の中でノートブックを使い、オフィスで充電のために電源につなぐといった利用方法です。
このような使い方をすると、バッテリー液が流動している状態に保てます。
一方、オフィスでデスクトップコンピュータを使っていて、ノートブックは旅行や出張で時々使うだけ、という場合は、毎月最低1回はバッテリーを充放電することをお勧めします。

という使い方が良いようです。これらの手順に従って管理していれば 容量がヘタるのを抑えられたかもしれません。(減ってもあんまり気にしてないんですが)


また、エントリをまとめるにあたって調べ直して分かったのですが CycleCount などの値で充電/放電の回数も取れるようですね。こちらも合わせて取っておけばよかったなと。グラフの値が上下しているタイミングと照らし合わせることで 面白い結果になったかも。

参考にしたエントリ