Macで Suica や PASMO の履歴を読む


 MacにPaSoRiを接続してSuicaやPASMOの履歴情報を読み出すプログラムができましたので、 Macユーザー向けに公開します。
(MacOS 10.4 でインテル版、PPC版で動作します。)
(注:チャージ(入金)など、書込の機能はありません。PaSoRiはRC-S320のみに対応しています。)

 殆どの機能はネット上に公開されているlibpasorilに依存しています。
更にlibpasoriはlibusbを利用しています。(詳細はこれらのサイトをご覧下さい)
 この二つのライブラリのおかげでEdyとSuica/PASMOの履歴情報を読み出すプログラムが実現できました。
それぞれの作者に感謝します。

 プログラムは、インストールの楽なコンパイル済みのバイナリで公開します。
 (自由に変更できるようソースも公開します。)

 EdyValue.c とAppleScriptの著作権は作者の私にありますが、改変は自由です。
 また、このソフトの利用は自己責任でお願いします。

【インストール方法】

1 まず、libusbをhttp://libusb.sourceforge.net/からダウンロードしてインストールします。
 (既にインストール済みなら必要ありません)
 <ダウンロードしたものを解凍してターミナルを起動し、解凍したディレクトリに移動して
    ./configure して、 sudo make install します>
(Developer toolsがインストールされている必要があります)

2 次に、SuicaValueをここからダウンロードしてホームディレクトリ(フォルダ)に置きます。
  SuicaValue (インテルMac用) (PPC Mac用) ← 必要な方を右クリックして「リンク先を保存」してください。

3 SuicaValue に実行権を与えます。(ターミナルで、 chmod +x SuicaValue します)

4 PaSoRiを接続して動作を確認します。(ターミナルで ./SuicaValue すると、履歴が表示されます)
  旨く動作しない場合は、ソースからコンパイルしてみてください。

5 GUIっぽく簡単に操作できるよう、AppleScriptも作成しました。
  下のソースをコピーしてお使いください。(Scriptメニューに入れておくと便利でしょう)


【コンパイルする場合】

1 libpasoriをhttp://libpasori.sourceforge.jp/からダウンロードして解凍します。

2 解凍してできたフォルダ内にある「src」フォルダに「SuicaValue.c」のソースプログラムを保存します。
 SuicaValue.c
 C言語で書いています。(慣れていないので、奇麗なコードではありません。)

3 ターミナルで、srcフォルダに移動し、次のコマンドでコンパイルします。
「gcc -o SuicaValue `libusb-config --cflags` -D__LIBPASORI_WITH_LIBUSB SuicaValue.c libpasori_command.c libpasori_com_libusb.c libpasori_polling.c `libusb-config --libs`」
「strip SuicaValue」
 (libpasori付属の「buildline-libusb.sh」をコピーして上記のように修正すると良いでしょう)

【フォーマットの解説】(推測です)

 Suicaのデータは残金や通番など一部のバイトの並びが逆(リトルエンディアン)です。
 最初の1バイトが 0x1B だとクレジット入金、0x07 or 0x08だと入金、0x46だとサンクスチャージの入金で、
   0x16が自動改札乗降、0xC7が購買のようです。
 5バイト目から2バイトが日付で、先頭から7ビットが年、4ビットが月、残り5ビットが日のようです。
 (ここが面倒でしたね。パズルみたい)
 7バイト目からの2バイトが入った駅、続く2バイトが出た駅がコードで入っています。
 駅のコードは、路線コード/駅コードの組合わせで、有志によるデータベースが公開されています。
IC SFCard Fan DB Srevice  このソフトではコードからの変換はしていません。
 12バイト目から2バイトが残金(リトルエンディアン)です。

【PASMOについて】
 PASMOを購入して試したところ、Suicaと同様に読み出すことができました。データ形式も同様のようです。



【SuicaValueを利用したアプリ(AppleScript)】
このアプリを利用することで、操作が簡単で見やすくなります。(駅名の検索にも対応しました)


【更新履歴等】 ■2007/05/15 残高が一万円以上になると下1桁が欠けるバグを対策(SuicaValue.c および AppleScript版 SuicaViewer)
  西峰様からバグレポートを頂きました。ありがとうございます。
■2007/04/19 駅名等の表示に対応(AppleScript版 SuicaViewer)
  林様からデバッグの協力を頂きました。ありがとうございます。