FeliCa カード読み込みの Python スクリプトを LibreOffice Calc にマクロで組み込みたいんだけど、tagtool.py をもとにスクリプトを書くには、tagtool.py が大きすぎて骨が折れそう。
なにせ、Python を触ったことはあるけど、ちゃんとプログラミングしたことはないからな(^^; 真似するにしても、元ソースの構文調べながらになるから tagtool.py は大きすぎる。
とか考えてたら、@NoTASKさんの「nfcpy 0.13.4でNFCのIDを読む」というページにシンプルなソース例が。
とりあえず print 分だけ修正し(ちゃんと、カッコで出力する文字列(変数も)を囲まないと、Python3 ではエラーになるようだ)、実行してみた。
2枚のカードを読んでみたが、それぞれ
pi@raspberrypi:~/test/pasori $ sudo ./nfc_test2.pyType3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4CD257C6A091 PMM=00F1000000014300 SYS=88B4Type3Tagb'012E4CD257C6A091'pi@raspberrypi:~/test/pasori $ sudo ./nfc_test2.pyType3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4CD257C35873 PMM=00F1000000014300 SYS=88B4Type3Tagb'012E4CD257C35873'
このようにちゃんと ID も取れている。ばっちりじゃない。
この機能をマクロに組み込みたいのよね。
一発だけ読むのではなく、ずーっと読み込み続けるように無限ループさせて。
#!/usr/bin/env python3# -*- coding: utf-8 -*-import nfcimport binasciiimport timedef on_connect(tag):print(tag)print(tag.type)print(binascii.hexlify(tag.identifier).upper())def main():while True:with nfc.ContactlessFrontend('usb') as clf:clf.connect(rdwr={'on-connect': on_connect})time.sleep(3)main()
こんな感じで。
一度の実行で連続で読み込める。(time.sleep しないと、カード当てたとたんにザーっと連続で読み込むんで注意ね(笑))
pi@raspberrypi:~/test/pasori $ sudo ./nfc_test2.pyType3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4CD257C6A091 PMM=00F1000000014300 SYS=88B4Type3Tagb'012E4CD257C6A091'Type3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4CD257C35873 PMM=00F1000000014300 SYS=88B4Type3Tagb'012E4CD257C35873'Type3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4CD257C3AFA2 PMM=00F1000000014300 SYS=88B4Type3Tagb'012E4CD257C3AFA2'
これを元に、読み込んだ ID 情報をシートに貼り付けていくマクロを作ってみよう。
ところで、Python の無限ループって、Ctrl+C とかも受け付けなくなるんやね。Perl だと、Ctrl+C とかで止められるんだけどな。Python の場合、一定時間ごとに break する処理を書かないと、kill して止めるしかなくなる(^^;
マクロに組み込んだときにどうなるんかな?
コメントする