The day of the 2nd "Let's make something using each person in the laboratory for one day!" Articles of other members are here. The first article of mine is here.
Sesame is attached to the key of the laboratory, but it is very troublesome to open and operate the application on the mobile phone every time it is opened and closed. I wish I could open it with Suica or Felica from Apple pay.
The image is like this.
The image is from the article here. Thank you very much.
https://www.otwo.jp/blog/raspi_sesame_1/ http://www.otwo.jp/blog/raspi_sesame_2/ See this area.
--Raspberry Pi: The guy who was lying in the lab (probably Raspberry Pi3). --Sesame: Installed at the entrance of the laboratory. --NFC Reader: RCS370. Borrowing the personal belongings of the teacher in the laboratory (why do you have it ...)
nfcpy: 1.0.3 python2: 2.7.16 python3: 3.7.3
Install nfcpy with pip. It was said that it also supports python3, so the policy is to use python3.
$ pip3 install nfcpy
At the same time clone the source from github. ʻTry running examples / tagtool.py`.
$ python3 tagtool.py
[nfc.clf] searching for reader on path usb
[nfc.clf] no reader available on path usb
[main] no contactless reader found on usb
[main] no contactless reader available
I get an error.
Check Official Documents or Qiita Articles It seems that you need to specify the USB path using the device ID.
If you look it up with lsusb
,
$ lsusb
(abridgement)
Bus 001 Device 025: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
(abridgement)
The device ID is displayed. I'm worried that it's 330 instead of 370, but it seems that the driver used is the same, so it's okay.
Specify the USB path and try running.
$ python3 tagtool.py
[nfc.clf] searching for reader on path usb:054c:02e1
[nfc.clf.rcs956] input/output error while waiting for ack
[main] no contactless reader available
That? After a lot of research, it seems that I haven't been able to communicate well with the device with the specified path ...
Work resumed after a pizza break. In the first place, there is no example of success with RCS370 & Raspberry Pi & nfcpy. I started this article and changed 370 to 380 and it worked! The system is here and there ...
Although the tension dropped, I didn't want to give up yet, so I drank Monster and continued the investigation.
This article uses Debian and RCS370. You can check if nfcpy is installed properly with python -m nfc
in the first place. I will try it for the time being.
This is the 1.0.3 version of nfcpy run in Python 3.7.3
on Linux-4.19.57-v7+-armv7l-with-debian-10.0
I'm now searching your system for contactless devices
ERROR:nfc.clf.rcs956:input/output error while waiting for ack
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
I get an input / output error. Even if the versions of python and nfcpy were combined with the reference article, it did not change.
The content of the error is the same as this article. Hmm ...
I tried various versions of nfcpy and python, but I still can't ... This is a mess ...
RCS370 & Raspberry Pi & nfcpy doesn't work!
Raspberry Pi recognizes that the RCS370 is plugged into the USB port. Well, you can use RCS380.
nfcpy: 1.0.3 python3: 3.6.5
Still, I didn't want to give up, so I decided to try it on my personal computer (MacBook Air).
Similarly, clone nfcpy and run ʻexamples / tagtool.py`.
[nfc.clf] searching for reader on path usb
[nfc.clf] using Sony RC-S370/P RCS956v1.30 at usb:020:018
** waiting for a tag **
Type3Tag 'FeliCa Standard (RC-S???)' ID=Card ID(abridgement)
I was able to go.
[Official article](https://jp.candyhouse.co/blogs/how-to/suica%E3%81%A7%E3%82%BB%E3%82%B5%E3%83%9F%E3% 82% 92% E8% A7% A3% E9% 8C% A0-with-% E3% 83% A9% E3% 82% BA% E3% 83% 91% E3% 82% A4). I wanted to use Python3, so I play around with it.
nfc_card.py
# -*- coding: utf-8 -*-
import requests
import json
import binascii
import nfc
import time
from threading import Thread, Timer
# login CANDY HOUSE account and get token
url = "https://api.candyhouse.co/v1/accounts/login"
head = {"Content-type": "application/json"}
payload = {"email":"Account email address", "password":"Account password"}
response = requests.post(url, headers=head, data=json.dumps(payload))
token = response.json()["authorization"]
#Suica standby 1 cycle second
TIME_cycle = 1.0
#Suica standby reaction interval seconds
TIME_interval = 0.2
#Seconds to disable from touch to start the next standby
TIME_wait = 3
#Preparation for NFC connection request
# 212F(FeliCa)Set with
target_req_suica = nfc.clf.RemoteTarget("212F")
# 0003(Suica)
target_req_suica.sensf_req = bytearray.fromhex("0000030000")
print('Waiting for SUICA...')
while True:
#Instantiate by connecting to an NFC reader connected to USB
clf = nfc.ContactlessFrontend('usb')
#Suica standby start
# clf.sense( [Remote target], [Number of searches], [Search interval] )
target_res = clf.sense(target_req_suica, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)
if target_res is not None: # != ->Change to is not
#tag = nfc.tag.tt3.Type3Tag(clf, target_res)
#It seems that the specifications have changed. ↓ then it worked
tag = nfc.tag.activate_tt3(clf, target_res)
tag.sys = 3
#Take out IDm
idm = binascii.hexlify(tag.idm)
print('Suica detected. idm = ' + str(idm))
if (idm == b'IC ID'):
headers = {'X-Authorization':token,}
response = requests.get('https://api.candyhouse.co/v1/sesames/Sesame serial number', headers=headers)
status = response.json()["is_unlocked"]
url_control = "https://api.candyhouse.co/v1/sesames/Sesame serial number/control"
head_control = {"X-Authorization": token, "Content-type": "application/json"}
#Close when open, open when closed
if status:
payload_control = {"type":"lock"}
else:
payload_control = {"type":"unlock"}
response_control = requests.post(url_control, headers=head_control, data=json.dumps(payload_control))
print(response_control.text)
print('sleep ' + str(TIME_wait) + ' seconds')
time.sleep(TIME_wait)
#end if
clf.close()
#end while
With the serial number, SESAME ID ([this](https://jp.candyhouse.co/blogs/how-to/api%E3%82%AD%E3%83%BC%E5%8F%96%E5%BE] % 97% E6% 96% B9% E6% B3% 95% E3% 81% A8% E3% 82% BB% E3% 82% B5% E3% 83% 9Fid% E3% 81% AE% E7% A2% BA Note that it is not% E8% AA% 8D% E6% 96% B9% E6% B3% 95)). I couldn't hit the API because I used SESAME ID here, so I spent about 30 minutes wasting time ...
--Inside the door
Lol Well, this time it can't be helped.
--Outside the door
Attach the NFC reader from the inside with cellophane tape (sorry for the teacher) and check if it can be opened with an IC card from the outside.
…open! However, it takes about 3 to 5 seconds after touching. Still "Remove mobile phone-> unlock-> open Sesame app-> wait for connection-> tap" Faster and easier! Goodness.
Mobile Suica installed in iPhone X also responds properly. But is it a little less responsive than an IC card?
I thought it would be smooth, but it didn't. When communication and hardware are involved, the difficulty level rises a little. But I am satisfied that the laboratory will be more convenient.
Then I ordered the RCS380. Lol It seems that it will arrive soon, so I will mount it and attach it to the door. If it works with 380, I will write it again.
I want to meet this meeting about once a month. What will we make next?
Recommended Posts