[PYTHON] Führen Sie Sesame auf Sonys PaSoRi (RCS370) aus.

Hintergrund

Der Tag des 2. "Lass uns mit jeder Person im Labor einen Tag lang etwas machen!" Artikel anderer Mitglieder sind hier. Der erste Artikel von mir ist hier.

Sesam ist an den Schlüssel des Labors angehängt, aber es ist sehr mühsam, die Anwendung bei jedem Öffnen und Schließen auf dem Mobiltelefon zu öffnen und zu bedienen. Ich wünschte, ich könnte es mit Suica oder Felica von Apple Pay öffnen.

Das Bild ist so. image.png

Das Bild stammt aus dem Artikel hier. Vielen Dank.

Vorbereitungen

https://www.otwo.jp/blog/raspi_sesame_1/ http://www.otwo.jp/blog/raspi_sesame_2/ Siehe diesen Bereich.

Ich habe es mit Raspberry Pi versucht (Fehler)

nfcpy: 1.0.3 python2: 2.7.16 python3: 3.7.3

Installieren Sie nfcpy mit pip. Es wurde gesagt, dass es auch Python3 unterstützt, daher ist die Richtlinie, Python3 zu verwenden.

$ pip3 install nfcpy

Klonen Sie gleichzeitig die Quelle von Github. Versuchen Sie, examples / tagtool.py auszuführen.

$ 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

Ich bekomme eine Fehlermeldung.

Überprüfen Sie Offizielle Dokumente und Qiita-Artikel. Es scheint, dass Sie den USB-Pfad mithilfe der Geräte-ID angeben müssen. Wenn Sie es mit lsusb nachschlagen,

$ lsusb
(Kürzung)
Bus 001 Device 025: ID 054c:02e1 Sony Corp. FeliCa S330 [PaSoRi]
(Kürzung)

Die Geräte-ID wird angezeigt. Ich mache mir Sorgen, dass es 330 statt 370 ist, aber es scheint, dass der verwendete Treiber der gleiche ist, also ist es okay.

Geben Sie den USB-Pfad an und versuchen Sie es auszuführen.

$ 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

Das? Nach vielen Recherchen scheint es mir nicht möglich gewesen zu sein, mit dem angegebenen Pfad mit dem Gerät gut zu kommunizieren ...

Probieren Sie verschiedene Dinge aus

Nach einer Pizzapause wurde die Arbeit wieder aufgenommen. Erstens gibt es kein Beispiel für Erfolg mit RCS370 & Raspberry Pi & nfcpy. Beginnend mit diesem Artikel habe ich 370 in 380 geändert und es hat funktioniert! Das System ist hier und da ...

Obwohl die Spannung nachließ, wollte ich noch nicht aufgeben, also trank ich Monster und setzte die Untersuchung fort.

Dieser Artikel verwendet Debian und RCS370. Mit python -m nfc können Sie überprüfen, ob nfcpy ordnungsgemäß installiert ist. Ich werde es vorerst versuchen.

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

Ich erhalte einen Eingabe- / Ausgabefehler. Auch wenn die Versionen von Python und nfcpy mit dem Referenzartikel kombiniert wurden, gab es keine Änderung.

Der Inhalt des Fehlers ist der gleiche wie dieser Artikel. Hmm ...

Ich habe verschiedene Versionen von nfcpy und python ausprobiert, kann aber immer noch nicht ... Das ist ein Chaos ...

Meine Schlussfolgerung

RCS370 & Raspberry Pi & nfcpy funktioniert nicht!

Razpai erkennt, dass der RCS370 an den USB-Anschluss angeschlossen ist ... Kann ich RCS380 verwenden?

Ich habe es mit MacBook Air versucht (Erfolg)

nfcpy: 1.0.3 python3: 3.6.5

Trotzdem wollte ich nicht aufgeben und beschloss, es auf meinem eigenen Computer (MacBook Air) zu versuchen.

Klonen Sie in ähnlicher Weise nfcpy und führen Sie "examples / tagtool.py" aus.

[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=Ausweiskarte(Kürzung)

Ich konnte gehen.

Verbindung mit Sesam

[Offizieller Artikel](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-mit-% E3% 83% A9% E3% 82% BA% E3% 83% 91% E3% 82% A4). Ich wollte Python3 verwenden, also spiele ich damit herum.

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":"Konto E-Mail-Adresse", "password":"Konto Passwort"}
response = requests.post(url, headers=head, data=json.dumps(payload))
token = response.json()["authorization"]

#Suica Standby 1 Zyklussekunde
TIME_cycle = 1.0
#Suica Standby-Reaktionsintervall Sekunden
TIME_interval = 0.2
#Sekunden zum Deaktivieren, bis der nächste Standby-Modus startet
TIME_wait = 3

#Vorbereiten der NFC-Verbindungsanforderung
# 212F(FeliCa)Set mit
target_req_suica = nfc.clf.RemoteTarget("212F")
# 0003(Suica)
target_req_suica.sensf_req = bytearray.fromhex("0000030000")

print('Waiting for SUICA...')
while True:
    #Instanziieren Sie durch Anschließen an einen an USB angeschlossenen NFC-Leser
    clf = nfc.ContactlessFrontend('usb')
    #Suica Standby-Start
    # clf.sense( [Remote-Ziel], [Anzahl der Suchvorgänge], [Suchintervall] )
    target_res = clf.sense(target_req_suica, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)

    if target_res is not None: # != ->Wechsel zu ist nicht

        #tag = nfc.tag.tt3.Type3Tag(clf, target_res)
        #Es scheint, dass sich die Spezifikationen geändert haben. ↓ dann hat es geklappt
        tag = nfc.tag.activate_tt3(clf, target_res)
        tag.sys = 3

        #IDm herausnehmen
        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/Sesam-Seriennummer', headers=headers)

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

            url_control = "https://api.candyhouse.co/v1/sesames/Sesam-Seriennummer/control"
            head_control = {"X-Authorization": token, "Content-type": "application/json"}

            #Schließen, wenn geöffnet, öffnen, wenn geschlossen
            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

Mit Seriennummer, SESAME ID (this % 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 Beachten Sie, dass es sich nicht um% E8% AA% 8D% E6% 96% B9% E6% B3% 95)) handelt. Ich konnte die API nicht aufrufen, weil ich diese als SESAME-ID verwendet habe, also habe ich ungefähr 30 Minuten damit verbracht, Zeit zu verschwenden ...

Versuchen Sie es mit

Lol Nun, diesmal kann nicht geholfen werden.

--Draussen vor der Tür outside

Befestigen Sie den NFC-Leser von innen mit Zellophanband (Entschuldigung für den Lehrer) und prüfen Sie, ob er mit einer IC-Karte von außen geöffnet werden kann.

…öffnen! Nach dem Berühren dauert es jedoch etwa 3 bis 5 Sekunden. Immer noch "Handy entfernen-> entsperren-> Sesam-App öffnen-> auf Verbindung warten-> tippen" Schneller und einfacher! Güte.

Mobile Suica im iPhone X reagiert ebenfalls ordnungsgemäß. Aber reagiert es etwas weniger als die IC-Karte?

Eindrücke und Zukunft

Ich dachte, es wäre glatt, aber es war doch nicht so. Wenn es um Kommunikation und Hardware geht, steigt der Schwierigkeitsgrad etwas an. Ich bin jedoch zufrieden, dass das Labor bequemer sein wird.

Und ich habe RCS380 bestellt. Lol Es scheint, dass es bald ankommen wird, also werde ich es montieren und an der Tür befestigen. Wenn es mit 380 funktioniert, werde ich es erneut schreiben.

Ich möchte dieses Treffen ungefähr einmal im Monat treffen. Was machen wir als nächstes?

Recommended Posts

Führen Sie Sesame auf Sonys PaSoRi (RCS370) aus.
Führen Sie Django auf PythonAnywhere aus
Führen Sie mysqlclient auf Lambda aus
Führen Sie OpenMVG auf einem Mac aus
Führen Sie Jupyter unter Ubuntu unter Windows aus
Führen Sie Openpose unter Python (Windows) aus.
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Führen Sie den Unix-Befehl auf Python aus
Führen Sie IPython Notebook auf Docker aus
Führen Sie YOLO v3 unter AWS v2 aus
Führen Sie Circuit Python auf Seeeduino XIAO aus
Führen Sie OpenVino unter macOS Catalina aus
Führen Sie YOLO v3 unter AWS aus