- 2009-03-14 (土)
- 未分類
-
![]()
バッテリーログ(App Store)にログを自動追記したいので作ってみました。ついでにブログのサイドバーにバッテリー情報を出してみたり…ここまでいじれるiPhoneはやっぱり面白い。
当記事は脱獄(Jailbreak)に関する情報を扱っています。脱獄及び記事内容の実施は、自己の責任において御願い致します。また以下の関連記事をご覧頂くことをオススメしております。
batteryinfo
インストール方法
無保証です。iPhone OS 2.2.1で動作確認しました。ソースコードも添付するので許せない部分はお直しください。- 実行モジュールとソースコードをダウンロードしてください。
- batteryinfoを/usr/bin/へコピー
- batteryinfoに実行権限を付ける。
- chmod 755 batteryinfo
コマンドラインオプション
-s 電源を表示します。 (AC Power/Battery Power) -c 充電中かどうかを表示します。 (1 = 充電中) -p バッテリーの残量を表示します。単位は%です。(0-100) -w [FILENAME] FILENAMEにバッテリーログ(App Store)のSqliteファイルを指定するとログを書き込みます。 /private/var/mobile/Applications/???/Documents/BatteryLog.db ???の部分は以下のコマンドなどで探せます。 find /private/var/mobile/Applications/* -name “BatteryLog.app”とかで探せます。
バッテリーログ(App Store)に自動ログ書込み
バッテリーログ(App Store)の開発/販売元と当サイトは一切関係ありません。この設定によってバッテリーログ(App Store)の動作を阻害したり、バージョンアップにより正常に動作しなくなる可能性があります。当設定に関して、バッテリーログ(App Store)の開発/販売元への問い合せはお控え頂き、自己の責任において実施ください。設定ファイルの設置方法
設定内容については後述します。適宜パス等を変更してご利用ください。- 設定ファイルをダウンロード
- battlogger.shを適当なディレクトリを作成してコピー。私は以下に置いてます。
- /var/root/Script/battlogger/battlogger.sh
- battlogger.shを書き換え。
- SQLITE3_FILE=”/private/var/mobile/Applications/???/Documents/BatteryLog.db”
- ???の部分はfind /private/var/mobile/Applications/* -name “BatteryLog.app”とかで探せます。
- battlogger.shに実行権限を付ける。
- chmod 755 battlogger.sh
- jp.goodegg.battlogger.plistを/System/Library/LaunchDaemons/にコピー。
- battlogger.shのパスをご確認ください。
- ファイルの所有者が以下である必要があるようです。
chown root:wheel /System/Library/LaunchDaemons/jp.goodegg.battlogger.plist
- battlogger.shへのパスを確認する。
- 設定ファイルをロードする。
- launchctl load /System/Library/LaunchDaemons/jp.goodegg.battlogger.plist
jp.goodegg.battlogger.plist
Launchdでシェルスクリプトを定期的に呼び出すための設定ファイルです。実行間隔は5分に1回にしてます。StartIntervalは秒数で指定します。ここで指定する秒数=ログ書込間隔ではありません。(シェルスクリプトで、前回のログ追記からの経過時間を見てます。)Label jp.goodegg.battlogger ProgramArguments /var/root/Script/battlogger/battlogger.sh StartInterval 300
battlogger.sh
もっとスマートな方法があるんでしょうが…シェルスクリプトで逃げました。これでだいたい納得いくログが書ける?#!/bin/sh ## ##!!!書き換えて下さい!!! ##ここは自分の環境に合わせて書き換えます。 ##バッテリーログのデータベースファイルを指定してください。 ## SQLITE3_FILE="/private/var/mobile/Applications/???/Documents/BatteryLog.db" ##カレントディレクトリをスクリプト設置場所に。 cd $(cd $(dirname $0);pwd) ##現時点のバッテリー残量と電源を取得。 /usr/bin/batteryinfo -p -s > battery_now ##前回更新時点の情報がなければ作る。 if [ ! -e battery_old ]; then touch -t `date -d '1 days ago' +"%Y%m%d%H%M.%S"` battery_old fi ##前回更新から30分経過しているか UPDATE_FLG=$(find battery_old -mmin +30) ##前回の電源 OLD_POWER_STATUS=$(tail -n 1 battery_old) ##今回の電源 NEW_POWER_STATUS=$(tail -n 1 battery_now) ##前回更新より30分以上経過している※1 もしくは 電源が変ったとき※2 ##※1 ログの書込間隔が短すぎても無駄なので。 ##※2 充電の終了時点をできるだけ取得するため。 if [ ! -x $UPDATE_FLG ] || [ "$OLD_POWER_STATUS" != "$NEW_POWER_STATUS" ]; then STR_DATE=`date +"%Y/%m/%d %H:%M:%S"` ##バッテリーログ書込※3 /usr/bin/batteryinfo -p -w $SQLITE3_FILE ##現時点の情報を次回チェックに備えて保存 mv battery_now battery_old fi exit 0こんな感じで定期的に書き込まれていきます。ログをみながら徐々に調整していきます。
ブログのサイバーにバッテリー状態を表示
ついでに最新のバッテリー状態をブログのサイドバーに表示してみる。特に意味はないんですが…電池ないとき電源を恵んでください。 以下は画像ファイルです。実際の表示は左サイドバーの一番下をご覧ください。
まずはサーバにアップロードするように変更して…(電池の無駄…)
##battlogger.shの※3の部分を以下のように変更して...FTP送信してます。 (echo $STR_DATE",";/usr/bin/batteryinfo -p -w $SQLITE3_FILE) | tr -d '\n' > battery_latest curl -T battery_latest ftp://送信先サーバアドレス/ディレクトリ/battery_latest --user ユーザ名:パスワード後はテキストファイルを読込むPHPを書いて…
<?php
#ログファイルのありか
define("FILENAME", "/dir/dir/foo.log");
#画像ディレクトリを指定。このサンプルでは...
define("IMGDIR", "/dir/dir/img/");
#配列要素.pngってファイルを用意した。
$BATTERY = array(0,6,12,18,25,32,38,44,50,56,63,69,75,82,88,94,100);
try
{
$img ="";
$fp = fopen (FILENAME, "r");
if(!$fp)
{
throw new Exception("");
}
while(!feof($fp))
{
$line = fgets($fp);
$str = explode(",", $line);
}
fclose($fp);
if(is_numeric($str[1]))
{
for($i=0;$i<count($BATTERY);$i++)
{
if ($str[1] == 100)
{
$img = "100";
break;
}
elseif ($str[1] == 0)
{
$img = "0";
break;
}
if ($str[1] >= $BATTERY[$i] && $str[1] < $BATTERY[$i+1])
{
$img = $BATTERY[$i];
break;
}
}
}
ShowWidget($img,$str[0],$str[1]);
}
catch (Exception $ex)
{
ShowWidget("e","","");
fclose($fp);
}
function ShowWidget($img,$dte,$per)
{
header("Content-type: application/x-javascript");
print "document.write('<div align=\"center\"><img src=\"" . IMGDIR . htmlspecialchars($img) . ".png\" width=\"150\" height=\"80\" />');";
print "document.write('<div class=\"widget-footer\">');";
if($dte != "")
{
print "document.write('<small>" . htmlspecialchars($dte) . " " . htmlspecialchars($per) . "%</small><br>');";
}
print "document.write('<a href=\"/archives/3625\"><small>これは何?</small></a>');";
print "document.write('</div></div>');";
}
?>
サイトバーに表示させました。
<script type="text/javascript" src="/dir/dir/file.php"></script>
バッテリーログ(App Store)を使わない方法
YYYYMM.logに”日時,バッテリー残量\n”の形式でログを書くだけなら…バッテリーログ(App Store)はいりません。FILENAME=`date +%Y%m.log` WRITEDATE=`date +"%Y/%m/%d %H:%M:%S"` cd $(cd $(dirname $0);pwd) (echo $WRITEDATE",";batteryinfo -p) | tr -d '\n' >> $FILENAME echo -e "" >> $FILENAME
バッテリーログ(App Store)について
2009年3月14日現在350円です。非JB環境では手動で取得が必要ですが…それでもバッテリーが気になる方には有益なアプリかと思います。
iPhoneのバッテリーについて
http://www.apple.com/jp/batteries/iphone.html-
てんごく
-
緑園住民
-
emanon
-
goodegg
-
http://candy.zapto.org/hareta/ ハレタ
-
goodegg
-
Lunar@
-
face
-
Lunar@
-
goodegg
-
face
-
goodegg
-
face
-
face
-
Lunar@
-
aya
-
face
-
goodegg
-
emanon
-
emanon
-
http://twitter.com/takamii takamii
-
emanon
-
通りすがり
