[PYTHON] WeWork-Büroschlüssel können jetzt mit einer IC-Karte mit dem Smart Lock "SESAME mini" und Raspberry Pi Zero WH entsperrt / gesperrt werden.

Wir befinden uns in einem privaten Büro bei WeWork. Gemeinschaftsräume wie der Loungebereich im Gebäude können mit einer IC-Karte für WeWork-Mitglieder freigeschaltet werden, aber ich war ein wenig unzufrieden mit der Tatsache, dass der Schlüssel zum Büroraum ein physischer Schlüssel war. Es wäre praktisch, wenn der Raum mit einer IC-Karte geöffnet werden könnte.

Als ich mich an den WeWork-Support wandte, um dies zu tun, hörte ich, dass es Unternehmen gibt, die handelsübliche Smart Locks verwenden. Deshalb haben wir uns entschlossen, diesem Beispiel zu folgen.

Einführung von Sesam mini

Von verschiedenen Herstellern sind sogenannte Smart Locks erhältlich, die ohne Bauarbeiten an der Tür befestigt und mit einer Smartphone-App entriegelt werden können.

Die privaten Büroschlüssel von WeWork haben jedoch eine etwas spezielle Form (die Breite des Montagebereichs ist schmal, der Daumendrehknopf ist dünn), sodass nicht alle intelligenten Schlösser montiert werden können. Nach vielen Recherchen entschied ich, dass Sesame mini in Ordnung ist, also kaufte ich es im Online-Shop.

Die entschiedenen Punkte sind wie folgt.

  1. Die kompakte Breite von 57 mm ermöglicht die Befestigung an privaten Bürotüren
  2. Ein 3D-Drucker stellt einen Adapter für jede Schlüsselform her.
  3. Sie können den physischen Schlüssel weiterhin verwenden (erforderlich für die nächtliche Reinigung).
  4. Der Preis ist relativ niedrig und es fallen keine laufenden Kosten an

Insbesondere der zweite Punkt war ein entscheidender Faktor, der sich von den anderen unterschied. Als ich das Foto des Schlüssels per E-Mail verschickte, gab es sofort eine Antwort und es war Gottes Antwort, dass er mir einen Adapter schicken würde.

Dank dessen konnte ich mit der Smartphone-App sicher entsperren / sperren. sesame01.gif

Es war gut, dass die Farbvariation mattschwarz war. Es fühlt sich gut an, die Farbe der Tür anzupassen.

Einführung zusätzlicher Sesam-WLAN-Zugangspunkte

Sesam allein kann nur über Bluetooth eine Verbindung zu einer Smartphone-App herstellen, jedoch über einen dedizierten [WiFi-Zugangspunkt](https://jp.candyhouse.co/blogs/how-to/wifi%E3%82%A2%E3%82%AF%]. E3% 82% BB% E3% 82% B9% E3% 83% 9D% E3% 82% A4% E3% 83% B3% E3% 83% 88% E3% 81% A7% E9% 81% A0% E9% 9A% 94% E6% 93% 8D% E4% BD% 9C% E3% 82% 92% E5% 8F% AF% E8% 83% BD% E3% 81% AB% E3% 81% 99% E3% 82% Mit 8B) können Sie von überall auf der Welt über eine Internetverbindung auf den in Ihrem Büro installierten Sesam zugreifen.

Darüber hinaus lautet Sesam API ist geöffnet, sodass Sie es selbst anpassen können.

Es ist viel bequemer als zuvor, nur mit einer Smartphone-App anstelle eines physischen Schlüssels arbeiten zu können, aber das Ideal ist, mit der Berührung einer IC-Karte öffnen und schließen zu können. Ein WiFi-Zugangspunkt ist dafür unverzichtbar, deshalb habe ich ihn zusätzlich gekauft.

Raspetorte und IC-Kartenleser einrichten

Raspberry Pi wird verwendet, um die IC-Karte zu lesen und die API zu bedienen. Es gab bereits einen hilfreichen Artikel, daher habe ich dieses Verfahren im Allgemeinen befolgt.

Bereiten Sie zunächst die erforderliche Ausrüstung vor. Ich habe sie alle bei Amazon gekauft.

Dann fuhr ich mit dem Setup gemäß dem Inhalt des obigen Artikels fort, aber da ich keinen USB-Hub, keine Maus und keine Tastatur hatte, entschied ich mich, es über WLAN zu betreiben, indem ich mich auf den folgenden Artikel bezog.

Bei den oben genannten Schritten wird die Sicherheit nicht besonders berücksichtigt. Machen wir es also richtig. Es ist ein gemeinsames Büro, in dem verschiedene Personen gemischt sind.

Lesen Sie die WeWork IC-Karte und bedienen Sie die Sesam-API

Wenn Sie dem Artikel über die Manipulation von Sesam mit dem vorherigen Raspeltorte folgen, ist dies im Allgemeinen in Ordnung, aber es gibt einige Teile, die nicht so gut funktionieren, wie sie sind. ** WeWorks Karte ist nicht Suica ** und ** die im Artikel verwendete API-Version ist alt **.

Also habe ich das Teil repariert, das nicht funktioniert hat, und den folgenden Code vervollständigt. Die aktuelle Version der API erfordert einen API-Schlüssel. Wie Sie den API-Schlüssel erhalten, finden Sie unter hier.

SesameNFC.py


# -*- coding: utf-8 -*-
import requests
import json
import binascii
import nfc
import time
import traceback
from threading import Thread, Timer

#1 Zyklussekunde IC-Karten-Standby
TIME_cycle = 1.0
#Reaktionsintervall der IC-Karte im Sekundenintervall
TIME_interval = 0.2
#Deaktivieren Sie Sekunden von Berührung, um als nächstes zu beginnen
TIME_wait = 3

#SESAME API KEY
API_key = "Sesam-API-Schlüssel"

#Vorbereiten der NFC-Verbindungsanforderung
# 106A(NFC type A)Set mit
target_req_nfc = nfc.clf.RemoteTarget("106A")

print 'Bitte berühren Sie die IC-Karte...'
while True:
    try:
        #Instanziieren Sie einen über USB angeschlossenen Kartenleser
        clf = nfc.ContactlessFrontend('usb')
        #IC-Karten-Standby-Start
        # clf.sense( [Remote-Ziel], [Anzahl der Suchvorgänge], [Suchintervall] )
        target_res = clf.sense(target_req_nfc, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)

        if target_res != None:

            tag = nfc.tag.activate(clf, target_res)

            #ID extrahieren
            idm = binascii.hexlify(tag.identifier).upper()
            print 'NFC detected. ID = ' + idm

            #IC-Kartenprüfung
            if (idm == "tagtool.ID von py abgerufen"):
                url_control = "https://api.candyhouse.co/public/sesame/Sesam-Terminal-ID"
                head_control = {"Authorization": API_key, "Content-type": "application/json"}
                # get status
                response_control = requests.get(url_control, headers=head_control)
                #Tritt ein Fehler auf, wenn das Intervall bis zur nächsten Anforderung kurz ist? Warten Sie also ein paar Sekunden
                time.sleep(1)
                res = json.loads(response_control.text)
                stats = res["locked"]

                if (stats == True):
                    # unlock
                    payload_control = {"command":"unlock"}
                    response_control = requests.post(url_control, headers=head_control, data=json.dumps(payload_control))

                else:
                    # lock
                    payload_control = {"command":"lock"}
                    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
        #end if

        clf.close()
    #end try

    except KeyboardInterrupt:
        print("Ctrl+Bei C angehalten")
        clf.close()
        break

    except:
        clf.close()
        traceback.print_exc()
        pass

#end while

Sie können den Sesam jetzt mit der WeWork IC-Karte entsperren / sperren! sesame02.gif

Die Markierung des IC-Kartenlesers wurde aufgrund des Kabeleinführungsschlitzes auf den Kopf gestellt, daher habe ich einen WeWork-Aufkleber darauf angebracht, um zu betrügen. Infolgedessen sieht es aus wie ein offizieller Gegenstand und ist es nicht schön?

IC-Karte berühren, entsperren / sperren, LED blinken im Fehlerfall

Es funktioniert vorerst, aber tatsächlich kann dieser Code häufig nicht mit einem Fehler entsperrt / gesperrt werden. Anscheinend kann sich die Antwort der API oder des WiFi-Zugangspunkts verzögern. Wenn Sie dies also ernsthaft tun, sollten Sie die Wiederholungsverarbeitung einbeziehen. Wenn Sie sie jedoch erneut berühren, funktioniert sie normalerweise, sodass sie in Ordnung ist. Ich bin.

Stattdessen blinkt die LED bei jedem Ereignis. Sie können anhand des blinkenden Musters erkennen, welcher Prozess ausgeführt wurde, und vor allem ist L Chika die königliche Straße, wenn Sie Razz Pie machen!

Ich habe im folgenden Artikel beschrieben, wie die LED blinkt. Wie man Python3 L Chika (LED blinkt) mit Raspberry Pi Zero WH macht

Und der Code, der L Chika enthält, lautet wie folgt.

SesameNFC_LED.py


# -*- coding: utf-8 -*-
import requests
import json
import binascii
import nfc
import time
import traceback
import RPi.GPIO as GPIO
from threading import Thread, Timer

#1 Zyklussekunde IC-Karten-Standby
TIME_cycle = 1.0
#Reaktionsintervall der IC-Karte im Sekundenintervall
TIME_interval = 0.2
#Deaktivieren Sie Sekunden von Berührung, um als nächstes zu beginnen
TIME_wait = 3

#SESAME API KEY
API_key = "Sesam-API-Schlüssel"

#Vorbereiten der NFC-Verbindungsanforderung
# 106A(NFC type A)Set mit
target_req_nfc = nfc.clf.RemoteTarget("106A")

print 'Bitte berühren Sie die IC-Karte...'
while True:
    try:
        #Instanziieren Sie einen über USB angeschlossenen Kartenleser
        clf = nfc.ContactlessFrontend('usb')
        #IC-Karten-Standby-Start
        # clf.sense( [Remote-Ziel], [Anzahl der Suchvorgänge], [Suchintervall] )
        target_res = clf.sense(target_req_nfc, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)

        if target_res != None:

            tag = nfc.tag.activate(clf, target_res)

            #ID extrahieren
            idm = binascii.hexlify(tag.identifier).upper()
            print 'NFC detected. ID = ' + idm

            #IC-Kartenprüfung
            if (idm == "tagtool.ID von py gelesen"):

                #Stellen Sie den GPIO-Nummernspezifikationsmodus ein(BCM:Rollen-Pin-Nummer, BOARD:PIN Nummer)
                GPIO.setmode(GPIO.BCM)
                #Stellen Sie Pin 23 (grüne LED) als Ausgang ein
                GPIO.setup(23, GPIO.OUT)
                #Blinkt
                for i in range(3):
                    GPIO.output(23, GPIO.HIGH)
                    time.sleep(0.5)
                    GPIO.output(23, GPIO.LOW)
                    time.sleep(0.5)
                #GPIO-Einstellungen zurücksetzen
                GPIO.cleanup()

                url_control = "https://api.candyhouse.co/public/sesame/Sesam-Terminal-ID"
                head_control = {"Authorization": API_key, "Content-type": "application/json"}
                # get status
                response_control = requests.get(url_control, headers=head_control)
                #Tritt ein Fehler auf, wenn das Intervall bis zur nächsten Anforderung kurz ist? Warten Sie also ein paar Sekunden
                time.sleep(1)
                res = json.loads(response_control.text)
                stats = res["locked"]

                if (stats == True):
                    # unlock
                    payload_control = {"command":"unlock"}
                    response_control = requests.post(url_control, headers=head_control, data=json.dumps(payload_control))
                    #Grüne LED leuchtet, wenn sie entsperrt ist
                    GPIO.setmode(GPIO.BCM)
                    GPIO.setup(23, GPIO.OUT)
                    GPIO.output(23, GPIO.HIGH)
                    time.sleep(3)
                    GPIO.output(23, GPIO.LOW)
                    GPIO.cleanup()

                else:
                    # lock
                    payload_control = {"command":"lock"}
                    response_control = requests.post(url_control, headers=head_control, data=json.dumps(payload_control))
                    #Die grüne LED blinkt schnell, wenn sie gesperrt ist
                    GPIO.setmode(GPIO.BCM)
                    GPIO.setup(23, GPIO.OUT)
                    for i in range(6):
                        GPIO.output(23, GPIO.HIGH)
                        time.sleep(0.25)
                        GPIO.output(23, GPIO.LOW)
                        time.sleep(0.25)
                    GPIO.cleanup()

                print(response_control.text)

                print 'sleep ' + str(TIME_wait) + ' seconds'
                time.sleep(TIME_wait)

            #end if
        #end if

        clf.close()
    #end try

    except KeyboardInterrupt:
        print("Ctrl+Bei C angehalten")
        clf.close()
        #Blinkt die rote LED (Pin 22) heftig, wenn ein Fehler auftritt
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(22, GPIO.OUT)
        for i in range(10):
            GPIO.output(22, GPIO.HIGH)
            time.sleep(0.1)
            GPIO.output(22, GPIO.LOW)
            time.sleep(0.1)
        GPIO.cleanup()
        break

    except:
        clf.close()
        GPIO.cleanup()
        traceback.print_exc()
        #Blinkt die rote LED bei einem Fehler heftig
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(22, GPIO.OUT)
        for i in range(20):
            GPIO.output(22, GPIO.HIGH)
            time.sleep(0.1)
            GPIO.output(22, GPIO.LOW)
            time.sleep(0.1)
        GPIO.cleanup()
        pass

#end while

…… Es ist ein ungeschickter Code, den ich vorerst zum Laufen gebracht habe, aber er behindert meine Arbeit nicht, also lasse ich ihn unberührt.

Kannst du die LED auf dem Schreibtisch blinken sehen? Nur zu diesem Zeitpunkt war ich dankbar für die Glaswand von WeWork. Es wäre schwieriger gewesen, einen IC-Kartenleser und eine LED an einer normalen Wand zu installieren. sesame03.gif

abschließend

Auf diese Weise konnten wir den Wunsch erfüllen, den Raum mit der IC-Karte von WeWork zu entsperren und zu verschließen.

Aufgrund des schlechten Codes und der langsamen Reaktion der API und des WiFi-Zugangspunkts schlägt das Entsperren / Sperren häufig fehl ** oder ** es dauert einige Sekunden von der Berührung bis zum Entsperren / Sperren **. Obwohl dies der Fall ist, ist dies in Ordnung, da die Anzahl der Personen und die Häufigkeit der Nutzung nicht so hoch sind. Holprig, das ist in Ordnung, wenn ich mich wohl fühle.

Daher freue ich mich sehr, dass ich von physischen Schlüsseln und Smartphone-Funktionen befreit bin und mich mit einer IC-Karte frei vom Gemeinschaftsbereich zum privaten Büro bewegen kann. Ich bin glücklich.

Recommended Posts

WeWork-Büroschlüssel können jetzt mit einer IC-Karte mit dem Smart Lock "SESAME mini" und Raspberry Pi Zero WH entsperrt / gesperrt werden.
Ich habe ein npm-Paket erstellt, um die ID der IC-Karte mit Raspberry Pi und PaSoRi zu erhalten