チノカログ

ITインフラ系、ガジェット系、テック系ネタ

RaspberryPiでSuicaの残高を表示してみた

f:id:chinoka:20190811045609j:plain

やりたいこと

RaspberryPiに接続したICカードリーダ(PaSoRi)を介して、 Suicaの残高を表示したいと思います。

以下の記事を参考にさせていただきました。

qiita.com

環境

必要なパッケージをインストール

$ sudo apt update
$ sudo apt upgrade
$ sudo apt-get -y install python-pip
$ sudo apt-get -y install python-dev
$ sudo apt-get -y install libusb-dev
$ sudo apt-get -y install python-usb

NFC読み込みライブラリとして「nfcpy」を使用します。

$ sudo pip install -U nfcpy
$ sudo reboot

動作テスト

まず、PaSoRiが正常に確認できているかの確認です。 下記の表示が確認できればOK。

$ lsusb
Bus 001 Device 004: ID 054c:06c3 Sony Corp. 

次に、以下のコマンドを実行します。

$ python -m nfc

コマンド実行すると、下記が表示されました。

$ python -m nfc
This is the 1.0.3 version of nfcpy run in Python 2.7.13
on Linux-4.19.58-v7+-armv7l-with-debian-9.9
I'm now searching your system for contactless devices
** found usb:054c:06c3 at usb:001:004 but access is denied
-- the device is owned by 'root' but you are 'pi'
-- also members of the 'root' group would be permitted
-- you could use 'sudo' but this is not recommended
-- better assign the device to the 'plugdev' group
   sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
   sudo udevadm control -R # then re-attach device
I'm not trying serial devices because you haven't told me
-- add the option '--search-tty' to have me looking
-- but beware that this may break other serial devs
Sorry, but I couldn't find any contactless device

「デバイスを「plugdev」グループに割り当てるとsudoなしで実行できるようになるよ。」 というメッセージなので、指示どおり以下のコマンドを実行します。

$ sudo sh -c 'echo SUBSYSTEM==\"usb\", ACTION==\"add\", ATTRS{idVendor}==\"054c\", ATTRS{idProduct}==\"06c3\", GROUP=\"plugdev\" >> /etc/udev/rules.d/nfcdev.rules'
$ sudo udevadm control --reload-rules
$ sudo reboot

先のコマンドを再実行し、下記が表示されれば準備OKです。

$ python -m nfc
This is the 1.0.3 version of nfcpy run in Python 2.7.13
on Linux-4.19.58-v7+-armv7l-with-debian-9.9
I'm now searching your system for contactless devices
** found SONY RC-S380/P NFC Port-100 v1.11 at usb:001:004
I'm not trying serial devices because you haven't told me
-- add the option '--search-tty' to have me looking
-- but beware that this may break other serial devs

Suicaの情報表示

今回は、下記のリポジトリを使わせていただきます。

GitHub - m2wasabi/nfcpy-suica-sample: nfcpy 0.10.0 sample codes

$ git clone https://github.com/m2wasabi/nfcpy-suica-sample.git

以下を実行します。

$ python suica_read.py 

実行後、PaSoRiSuicaをかざすとSuicaの利用履歴情報が表示されます。

$ python suica_read.py 
~~
=== 00 ===
端末種: 改札機
処理: 運賃支払
日付: 19-08-07
入線区: 東京地下鉄-8号線有楽町
入駅順: 豊洲
出線区: 東京地下鉄-8号線有楽町
出駅順: 有楽町
残高: 6636
BIN:

次回

今回取得したSuica残高情報を 日常で使える形でユーザにフィードバックする仕組みを入れてみたいと思います。