NFCタグ で鍵を開けよう(1) NFCタグにURIを書き込む
この記事は「NFCタグ で鍵を開けよう」シリーズの第1弾です。 以下、5つの記事に分けて投稿していく予定です。
- NFCタグにURIを書き込む(この記事)
- iPhoneを鍵とし、ドアにNFCタグを設置するパターン
iOSアプリを経由してセキュリティレベルをあげるNFCタグを鍵とし、ドアにNFCリーダーを設置するパターン(まだ書いてないけど気が向いたら書くかも)より実用的にしていくために- iOS13時代の最終形
導入
我が家にスマートロックのSesameを採用しました。
私一人ならSesameだけでものすごく便利になったわけですが、我が家には小さい子供が3人います。子供たちにスマホを持たせるにはまだ早く、このままではスマートロックの恩恵を十分に受けることができません。
なお、Sesameは個人が触れる便利なAPIを公開してくれています。NFC+Sesame APIでこの状況を改善できるものではないか、と思い立ったのがこの記事を書くきっかけです。まだ現在進行形で実験中ですが、実験した結果を随時記事にしていければと考えています。
この記事でやること
私がNFCタグを取り扱ったことがないところからスタートしましたので、まずこの記事では「NFCタグに情報を書き込む」ところまでだけが範囲になります。
実際にSesameをアンロックするところなどは次の記事で書かせていただきます。
準備した機器
スマートロック
導入に書いたとおりですが、Sesameを購入しました。
APIでのロックやアンロックが可能で自由度が高そうだったのがSesameを選んだ理由です。
利用するNFCタグ
サンワサプライ NFCタグ(10枚入り)をAmazonで購入しました。
NFCリーダー/ライター
NFCリーダー/ライターとしてはPaSoRiを購入しました。
これも使えればどれでも良いと思いますが、ネット上で利用実績が多く安全そうなものを選んだだけです。
nfcpyでNFCタグの情報を扱う
まずはMacにNFCリーダーを接続してNFCタグから情報を読み取るところからはじめます。
調べたところnfcpyというツールがよく使われているようです。 実際に使ってみたところ確かに簡単に利用でき、読み取りから書き込みまでこれで全て完結できそうです。
このツールのexamples
フォルダにそのまま使える便利なサンプルがたくさん入っていました。
情報の読み取り
NFCタグに書き込まれた情報を読み取るにはexsamplesの中のtagtool.py
を使って
python tagtool.py show
とするだけです。
フォーマット
NFCタグをフォーマットしたいときもtagtool.py
を使って
python tagtool.py format
とするだけです。
URI書き込み
NFCタグにURIを書き込みたい場合のみ少し工夫が必要でした。 とはいえ、exsamplesの中にあるものだけで改造なしで可能です。
例えばhttps://tag.exsample.com/lock
というURIを書き込むこととします。
まず、うまくいくパターンからですが、
echo -n \\0x04tag.exsample.com/lock | python ndeftool.py pack -t urn:nfc:wkt:U - | python tagtool.py load -
でURIを書き込み可能です。
まず、NFCタグに書き込む情報はNDEF(NFC Data Exchange Format)でないといけないようです。NDEFではText
、URI
、SmartPoster
などのRecord Typeを扱えます。
上記コマンドでは、
python ndeftool.py pack -t urn:nfc:wkt:U -
で、標準入力の内容をRecord Type == URI(urn:nfc:wkt:U
)のNDEFに変換しています- 次に
python tagtool.py load -
でそのNDEFをNFCタグに書き込む
ことをしています。
流れはこれでわかると思いますが、一点だけ、echoの部分が
echo -n https://tag.exsample.com/lock
ではなく
echo -n \\0x04tag.exsample.com/lock
と意味不明な\0x04
という文字列が含まれているのが気にかかるかと思います。
URIの書き方
これは、NDEFにおけるURIは「1バイトのIdentifier code」とそれ以降のURI fieldの組み合わせで記述するというルールがあるためです。
具体的なIdentifier codeは以下です。
Identifier code | プロトコル |
---|---|
0x00 | N/A |
0x01 | http://www. |
0x02 | https://www. |
0x03 | http:// |
0x04 | https:// |
0x05 | tel: |
0x06 | mailto: |
今回の場合はこのルールに従って、 https://
を \0x04
に置き換えています。
実際に書き込んだNFCタグをiPhoneで読み取る
それでは、このURIを書き込んだ情報をiPhoneで読み込んでみましょう。
iPhone XR/XSであればBackground Tag Readingをサポートしますのでアプリなど入れずにNFCタグにタッチするだけでこの情報を読み取れます(Background Tag Reading未対応機では別途アプリが必要です)。
うまく読み取れるとiPhoneの上部に通知ポップアップとしてそのURIが表示されます。そのポップアップをタップするとそのURIが実行されますので、これから、そのURIをトリガーとして動くプログラムを実装すれば、あらゆることがNFCタグをトリガーとして実現できるということになります。
今回の記事はここまでです。
記事一覧
- NFCタグにURIを書き込む(この記事)
- iPhoneを鍵とし、ドアにNFCタグを設置するパターン
iOSアプリを経由してセキュリティレベルをあげるNFCタグを鍵とし、ドアにNFCリーダーを設置するパターン(まだ書いてないけど気が向いたら書くかも)より実用的にしていくために- iOS13時代の最終形