こんにちは、あるいは、こんばんは。
弊社は、スマートロックにNFCのタグを取得して開閉と記録をとっています。
このNFCのタグはamazonで売っているようなこんなタグです。(一例)
開錠にはNFCのタグごとのIdmが必要です。
このIdmはターミナル上でNFCのIdmを読み取ることは以下のコードで取得できる。
import binascii
import nfc
import signal
class FelicaCardReader(object):
def on_connect(self, tag):
if tag.product != ['FeliCa Standard']:
# felica
self.idm = binascii.hexlify(tag.identifier)
else:
# nfc
self.idm = binascii.hexlify(tag.idm)
return True
def read_idm(self):
clf = nfc.ContactlessFrontend('usb')
try:
clf.connect(rdwr={'on-connect': self.on_connect})
finally:
clf.close()
if __name__ == '__main__':
read_card = FelicaCardReader()
while True:
read_card.read_idm()
idm = str(read_card.idm, encoding='utf-8', errors='replace')
print(f'IDm: {idm}')
signal.signal(signal.SIGINT, signal.SIG_DFL)
だが、これだと人が増えたりした時に「Idmを取得してくだい」という仕事が私に降ってくる。
その度に、macにRC-S380を接続してターミナルでこのプログラムを走らせなければいけない。
非常にめんどくさい
とても改善できるポイントですね!
弊社には Raspberry Pi3(以後ラズパイと略す) と pasori RC-S380(以後パソリと略す) が余っている。
ラズパイのOSはdebian系で対応しました。
ラズパイを常時起動するか、再起動した時にプログラムを起動するようにして、NFCの読み取り後Idmをslackのチャンネルに通知するようにすればいいんじゃないか?
とりあえず、slackのwebhookを準備するんだ。
あえてここでは説明しない。
その後、先ほどのコードに以下のコードを追加する。
import requests
def _get_webhook_notification_url():
return ('https://hooks.slack.com/services/省略') # 各自webhookの設定をしてここに書く。
def send_slack(message):
if isinstance(message, dict):
post_data = message
else:
post_data = {
"text": message,
}
post_data['username'] = 'ユーザーネームは各自で'
post_data['channel'] = 'チャンネル名も各自で'
post_data['icon_emoji'] = '絵文字も各自で'
print(post_data)
response = requests.post(
_get_webhook_notification_url(),
json=post_data,
)
return response
if __name__ == '__main__':
read_card = FelicaCardReader()
while True:
read_card.read_idm()
idm = str(read_card.idm, encoding='utf-8', errors='replace')
send_slack(f'IDm: {idm}')
signal.signal(signal.SIGINT, signal.SIG_DFL)
ラズパイ側の設定
pipで必要なものインストールする
pip3 install requests
pip3 install nfcpy
pip3 install requires
コード実行
sudo python3 felica_read.py >> felica_read.log 2>&1
では再起動する時どうしよう
crontabで入れるとして単純に以下の内容だと一瞬走るだけでタグを読み取らない。
# ${HOME}にpythonファイルを置いている前提
@reboot sudo python3 ${HOME}/read_felica.py' >> ${HOME}/cronlog/read_felica.log 2>&1
そんなこんなでtmuxしか思いつかなかったので、とりあえず、tmuxで対応しました。
sudo apt install tmux -y
@reboot (. ~/.profile; tmux new-session -d 'sudo python3 ${HOME}/read_felica.py') >> ${HOME}/cronlog/read_felica.log 2>&1
これで再起動しても大丈夫!
これで私がいなくてもIdmを読み取ってくれるぜ!
もっといい方法がありそうだけど、とりあえず目の前のあるものでなんとかしてみるという対応で終わりました。
みなさまご参考ください。