きっかけ
以前、enebularブログで「社員証タッチで参加者リストを自動作成」という記事がありました。
MIFAREの社員証カードのタグをソニー製のNFCカードリーダーであるRC-S280で読み取ってGoogleシートに連携するという内容です。
この記事の公開は、2020年でして、今になって試してみたところ、動作しないことが発覚しました
問題・・・
原因は、こちらのノードにあるらしいということまではわかっています。
が、私には、コーディングのスキルがありません。
でも、なんとかカードは読み取って欲しい・・・
そこで、ノードがうまく行かないときの対処方法を見つけましたので、ご報告します。
対処方法
カードリーダーを使えるようにする
ここまではnfcpy-idノードを使う場合と一緒です。nfcpyをインストールしてICカードリーダーを使えるように設定します。ここでは、PaSoRi RC-S380を例にしています。
$ pip3 install nfcpy
$ cat << EOF | sudo tee /etc/udev/rules.d/nfcdev.rules
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev"
EOF
$ reboot
カードリーダーが動作するか試す
カードリーダーにNFCのカードをかざしてみてから、
sudo python3 /home/pi/nfcpy/examples/tagtool.py show
として、プログラムを実行してみましょう。
TagIDが表示されれば問題無いです。
例えば、私の場合はMIFAREの社員証だったので、以下の様に表示されました。
pi@raspberrypi:~ $ sudo python3 nfcpy/examples/tagtool.py show
[nfc.clf] searching for reader on path usb
[nfc.clf] using Sony RC-S330 RCS956v1.30 at usb:001:004
** waiting for a tag **
Type2Tag ID=XXXXXXXX
もしTagIDが表示されなければ、nfcpyのソフトウェアが正常に動作していないですので、そこから原因を探すことになります。
フローをつくる
execノード使ってこんなフローを組みます。
プロパティはこんな感じです。
excecノード
コマンド sudo python3 /home/pi/nfcpy/examples/tagtool.py show
出力 spawnモード
名前 nfc
changeノード
このフローを実行すると、カードリーダーでカードをかざすとpayloadにtagtool.pyの読み取り結果が格納されます。
debugタブに、例えば、Type2Tag ID=XXXXXXXX
などと表示されます。
changeノードで一旦読み取り結果がクリアされて、カードリーダーの読み取り待ちになります。
まとめ
ノードが動かないとき、ノードを修正するスキルがあればいいのですが、できないため、execノードでなんとかカードを読み取るという目的は達成できました。
今日使用したフローは、enebularのdiscoverで公開しています。
このシンプルなフローでは、カードのタグを2回読み取ってしまったりするので、フローの後段で工夫が必要にはなると思います。今後、機会があれば、対応方法を紹介したいと思います。
参考