Macのバッテリー状態を定期的に取得する方法

最近MacBook Airのバッテリーが持たなくなってきたな~と思って、バッテリー状態を見るために「システムレポート」を見たり、「アクティビティモニタ」の「エネルギー」で確認したりしてました。

で、ちょっと物足りないのが、システムレポートはその時の情報のみですし、アクティビティモニタは推移をグラフで見られるものの過去12時間のみでしかも小さい。。。

ということで自分でMacのバッテリー状態を定期的に取得することにしました。

今回はその方法をご紹介いたします。

バッテリー状態を出力

まずバッテリー状態の取得ですが、これはMacの「ioreg」コマンドを使います。これをターミナルで実行するとなんかいろいろズラッと並びます。

ioregコマンドの実行結果

ioregコマンドの実行結果

Macのバッテリー状態を取得するにはこのコマンドに「l」オプションをつけて、grepで目的の情報を絞り込む、という方法で行います。

ioreg -l | grep MaxCapacity

上記では「完全充電時の容量(mAh)」を取得できます。

バッテリー情報を出力

バッテリー情報を出力

出力結果のイコール右部だけを後ほど取り出して保存します。

「MacCapacity」部分を以下のように変更して、必要な情報を取得します。ただし「充放電回数」については更にgrepで「Design」を除外します。

CurrentCapacity → 「残りの充電量(mAh)」
DesignCapacity → 設計時の最大充電容量
CycleCount | grep -v Design → 「充放電回数」

出力されたデータを整形して更に出力

前項で出力されたバッテリー状態データを文字列で取り出して保存します。

今回私はPHPでshell_execを使って行いました。

shell_exec('ioreg -l | grep MaxCapacity');

実際のコードでは、以下のように「=」でexplodeして、右側のみを直接取り出しました。

$data[] = explode('=', shell_exec('ioreg -l | grep MaxCapacity'))[1];

保存はいろいろ方法があると思いますが、私は日時を第1列に追加したCSV形式でecho出力しました。コード全体を以下に記述します。

<?php
date_default_timezone_set('Asia/Tokyo');

$data = array();

$data[] = date('Y-m-d G:i');
$data[] = explode('=', shell_exec('ioreg -l | grep MaxCapacity'))[1];
$data[] = explode('=', shell_exec('ioreg -l | grep CurrentCapacity'))[1];
$data[] = explode('=', shell_exec('ioreg -l | grep DesignCapacity'))[1];
$data[] = explode('=', shell_exec('ioreg -l | grep CycleCount | grep -v Design'))[1];

echo implode(",", array_map('trim', $data)) . PHP_EOL;

定期的に保存

次に、出力したデータを定期的に保存します。plistファイルを作成し、それをLaunchAgentsフォルダに保存、そして「launchctl」コマンドで登録して実行します。

まずplistファイルについて、詳細は割愛させて頂きますが、以下のようになります。「/path/to/」部分は適切に修正します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.sandalot.macbatterylog</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/php</string>
    <string>/path/to/macbatterylog/macbatterylog.php</string>
  </array>
  <key>StartCalendarInterval</key>
  <array>
    <dict>
      <key>Minute</key>
      <integer>0</integer>
    </dict>
    <dict>
      <key>Minute</key>
      <integer>15</integer>
    </dict>
    <dict>
      <key>Minute</key>
      <integer>30</integer>
    </dict>
    <dict>
      <key>Minute</key>
      <integer>45</integer>
    </dict>
  </array>
  <key>StandardOutPath</key>
  <string>/path/to/macbatterylog/data/battery.log</string>
</dict>
</plist>

保存場所は、私の場合はホームフォルダ内の「~/Library/LaunchAgents」に保存しました。が、他にもいくつか候補があり、
/Library/LaunchAgents
/Library/LaunchDaemons
などでもOKです。

あとは「launchctl」コマンドで登録ですが、以下のようにloadを使います。

launchctl load /Users/(ユーザー名)/Library/LaunchAgents/com.sandalot.macbatterylog.plist

ちなみに登録を解除するにはunloadです。

launchctl unload /Users/(ユーザー名)/Library/LaunchAgents/com.sandalot.macbatterylog.plist

これでplistファイル内の「StandardOutPath」で設定したフォルダの「battery.log」ファイルに保存されていきます。

Githubで公開してます

というわけで、Macのバッテリー状態を取得して定期的に保存する方法をご紹介いたしました。

全コードはGithubで公開しています。

https://github.com/kei-sandalot/macbatterylog

この中にはグラフで表示する「index.php」も含まれています。PHPで「battery.log」からデータを取得してjqPlotで表示しています。

現状グラフはjqPlotの標準状態ほぼそのままでシンプルですし、PHPでデータを取得しているためWebサーバー内で動かす必要があると思います。

より簡単に実行できるようにJavaScriptでデータを取得するようにすれば良いなと思いますが・・・それはまたいずれ。

スポンサードリンク

twitterまたはFacebookでもコメントして頂けます