[PYTHON] Exécutez Sesame sur le PaSoRi de Sony (RCS370)

Contexte

Le jour du 2 "Faisons quelque chose en utilisant chaque personne du laboratoire pendant une journée!" Les articles des autres membres sont ici. Le premier de mes articles est ici.

Le sésame est attaché à la clé du laboratoire, mais il est très gênant d'ouvrir et de faire fonctionner l'application sur le mobile à chaque ouverture et fermeture. J'aimerais pouvoir l'ouvrir avec Suica ou Felica d'Apple Pay.

L'image est comme ça. image.png

L'image est tirée de l'article ici. Merci beaucoup.

Préparation préalable

https://www.otwo.jp/blog/raspi_sesame_1/ http://www.otwo.jp/blog/raspi_sesame_2/ Voir cette zone.

--Raspberry Pi: Le gars qui mentait dans le laboratoire (probablement Raspberry Pi3). --Sesame: Installé à l'entrée du laboratoire.

Je l'ai essayé avec Raspberry Pi (échec)

nfcpy: 1.0.3 python2: 2.7.16 python3: 3.7.3

Installez nfcpy avec pip. Il a été dit qu'il prend également en charge python3, donc la politique est d'utiliser python3.

$ pip3 install nfcpy

Dans le même temps, clonez la source depuis github. ʻEssayez d'exécuter 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

J'obtiens une erreur.

Vérifiez Documents officiels et Articles Qiita Il semble que vous deviez spécifier le chemin USB à l'aide de l'ID de l'appareil. Si vous recherchez avec lsusb,

$ lsusb
(réduction)
Bus 001 Device 025: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
(réduction)

L'ID de l'appareil s'affiche. Je crains que ce soit 330 au lieu de 370, mais il semble que le pilote utilisé soit le même, donc ça va.

Spécifiez le chemin USB et essayez d'exécuter.

$ 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

Cette? Après de nombreuses recherches, il semble que je n'ai pas pu bien communiquer avec l'appareil avec le chemin spécifié ...

Essayez différentes choses

Le travail a repris après une pause pizza. En premier lieu, il n'y a pas d'exemple de réussite avec RCS370 & Raspberry Pi & nfcpy. J'ai commencé cet article et changé 370 en 380 et cela a fonctionné! Le système est ici et là ...

Bien que la tension ait baissé, je ne voulais pas encore abandonner, alors j'ai bu Monster et j'ai continué l'enquête.

Cet article utilise Debian et RCS370. Vous pouvez vérifier si nfcpy est correctement installé avec python -m nfc. Je vais l'essayer pour le moment.

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

J'obtiens une erreur d'entrée / sortie. Même si les versions de python et nfcpy étaient combinées avec l'article de référence, il n'y a pas eu de changement.

Le contenu de l'erreur est le même que cet article. Hum ...

J'ai essayé différentes versions de nfcpy et python, mais je ne peux toujours pas ... Ceci est un gâchis ...

Ma conclusion

RCS370 & Raspberry Pi & nfcpy ne fonctionnent pas!

Razpai reconnaît que le RCS370 est branché sur le port USB ... Eh bien, puis-je utiliser RCS380?

Je l'ai essayé avec MacBook Air (succès)

nfcpy: 1.0.3 python3: 3.6.5

Pourtant, je ne voulais pas abandonner, alors j'ai décidé de l'essayer sur mon propre ordinateur (MacBook Air).

De même, clonez nfcpy et exécutez ʻ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=ID de la carte(réduction)

J'ai pu y aller.

Connexion avec Sesame

[Article officiel](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-avec-% E3% 83% A9% E3% 82% BA% E3% 83% 91% E3% 82% A4). Je voulais utiliser Python3, donc je joue avec.

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":"Adresse e-mail du compte", "password":"Mot de passe du compte"}
response = requests.post(url, headers=head, data=json.dumps(payload))
token = response.json()["authorization"]

#Suica veille 1 cycle seconde
TIME_cycle = 1.0
#Intervalle de réaction de veille Suica secondes
TIME_interval = 0.2
#Secondes pour désactiver au toucher pour démarrer la prochaine veille
TIME_wait = 3

#Préparation de la demande de connexion NFC
# 212F(FeliCa)Fixé avec
target_req_suica = nfc.clf.RemoteTarget("212F")
# 0003(Suica)
target_req_suica.sensf_req = bytearray.fromhex("0000030000")

print('Waiting for SUICA...')
while True:
    #Instanciez en vous connectant à un lecteur NFC connecté à USB
    clf = nfc.ContactlessFrontend('usb')
    #Démarrage en veille Suica
    # clf.sense( [Cible distante], [Nombre de recherches], [Intervalle de recherche] )
    target_res = clf.sense(target_req_suica, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)

    if target_res is not None: # != ->Changer en n'est pas

        #tag = nfc.tag.tt3.Type3Tag(clf, target_res)
        #Il semble que les spécifications aient changé. ↓ alors ça a marché
        tag = nfc.tag.activate_tt3(clf, target_res)
        tag.sys = 3

        #Sortez IDm
        idm = binascii.hexlify(tag.idm)
        print('Suica detected. idm = ' + str(idm))

        if (idm == b'ID IC'):
            headers = {'X-Authorization':token,}
            response = requests.get('https://api.candyhouse.co/v1/sesames/Numéro de série Sésame', headers=headers)

            status = response.json()["is_unlocked"]

            url_control = "https://api.candyhouse.co/v1/sesames/Numéro de série Sésame/control"
            head_control = {"X-Authorization": token, "Content-type": "application/json"}

            #Fermer lorsqu'il est ouvert, ouvert lorsqu'il est fermé
            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

Avec le numéro de série, ID SESAME ([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 Notez qu'il ne s'agit pas de% E8% AA% 8D% E6% 96% B9% E6% B3% 95)). Je n'ai pas pu accéder à l'API car je l'ai utilisé comme identifiant SESAME, alors j'ai passé environ 30 minutes à perdre du temps ...

Essayez d'utiliser

Lol Eh bien, cette fois, ça ne peut pas être aidé.

Fixez le lecteur NFC de l'intérieur avec du ruban de cellophane (désolé pour l'enseignant) et vérifiez s'il peut être ouvert avec une carte IC de l'extérieur.

…ouvert! Cependant, cela prend environ 3 à 5 secondes après avoir touché. Encore "Supprimer le téléphone mobile-> déverrouiller-> ouvrir l'application Sesame-> attendre la connexion-> appuyer sur" Plus rapide et plus facile! La bonté.

Mobile Suica dans l'iPhone X répond également correctement. Mais est-ce un peu moins réactif que la carte IC?

Impressions et avenir

Je pensais que ce serait facile, mais après tout ce n'était pas le cas. Lorsque la communication et le matériel sont impliqués, le niveau de difficulté augmente un peu. Mais je suis convaincu que le laboratoire sera plus pratique.

Et j'ai commandé RCS380. Lol Il semble qu'il arrivera bientôt, alors je vais le monter et le fixer à la porte. Si cela fonctionne avec 380, je l'écrirai à nouveau.

Je veux rencontrer cette réunion environ une fois par mois. Que ferons-nous ensuite?

Recommended Posts

Exécutez Sesame sur le PaSoRi de Sony (RCS370)
Exécutez Django sur PythonAnywhere
Exécutez mysqlclient sur Lambda
Exécutez OpenMVG sur Mac
Exécutez Jupyter sur Ubuntu sous Windows
Exécutez Openpose sur Python (Windows)
Exécutez Tensorflow 2.x sur Python 3.7
Exécutez la commande unix sur python
Exécutez IPython Notebook sur Docker
Exécutez YOLO v3 sur AWS v2
Exécutez Circuit Python sur Seeeduino XIAO
Exécutez OpenVino sur macOS Catalina
Exécutez YOLO v3 sur AWS