Nous sommes dans un bureau privé à WeWork. Les espaces communs tels que le salon dans le bâtiment peuvent être déverrouillés avec une carte IC pour les membres WeWork, mais j'étais un peu mécontent du fait que la clé du bureau était une clé physique. Ce serait pratique si la pièce pouvait être ouverte avec une carte IC.
Lorsque j'ai contacté le support WeWork pour trouver un moyen de le faire, j'ai entendu dire que certaines entreprises utilisent des serrures intelligentes disponibles dans le commerce, nous avons donc décidé de faire de même.
Des verrous dits intelligents, qui peuvent être fixés à la porte sans aucun travail de construction et peuvent être déverrouillés avec une application pour smartphone, sont disponibles auprès de divers fabricants.
Cependant, les clés du bureau privé de WeWork ont une forme légèrement spéciale (la largeur de la zone de montage est étroite, le bouton de rotation du pouce est fin), de sorte que toutes les serrures intelligentes ne peuvent pas être montées. Après de nombreuses recherches, j'ai décidé que Sesame mini irait bien, alors je l'ai acheté dans la boutique en ligne.
Les points décidés sont les suivants.
Surtout le deuxième point était un facteur décisif différent des autres. En fait, quand j'ai envoyé la photo de la clé par e-mail, il y a eu une réponse immédiatement et c'était la réponse de Dieu qu'il m'enverrait un adaptateur.
Grâce à cela, j'ai pu déverrouiller / verrouiller avec l'application pour smartphone en toute sécurité.
C'était bien qu'il y ait du noir mat dans la variation de couleur. Cela fait du bien de faire correspondre la couleur de la porte.
Sesame seul ne peut se connecter qu'à une application pour smartphone via Bluetooth, mais un [point d'accès WiFi] dédié (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% Avec l'ajout de 8B), vous pourrez accéder au sésame installé dans votre bureau de n'importe où dans le monde avec une connexion Internet.
De plus, Sesame est l'API est ouverte, vous pouvez donc le personnaliser vous-même.
Il est beaucoup plus pratique qu'avant de pouvoir fonctionner avec une application pour smartphone au lieu d'une clé physique, mais l'idéal est de pouvoir ouvrir et fermer d'une simple pression sur une carte IC. Un point d'accès WiFi est indispensable pour cela, je l'ai donc acheté en plus.
Raspberry Pi est utilisé pour lire la carte IC et faire fonctionner l'API. Il y avait déjà un article utile, donc j'ai généralement suivi cette procédure.
Tout d'abord, préparez l'équipement nécessaire. Je les ai tous achetés sur Amazon.
Ensuite, j'ai procédé à la configuration en fonction du contenu de l'article ci-dessus, mais comme je n'avais pas de hub USB, de souris et de clavier, j'ai décidé de le faire fonctionner via WiFi en me référant à l'article suivant.
Les étapes ci-dessus ne tiennent pas beaucoup compte de la sécurité, alors faisons-le correctement. C'est un bureau partagé où différentes personnes sont mélangées.
Eh bien, si vous suivez l'article sur la manipulation du sésame avec la tarte à la râpe précédente, c'est généralement OK, mais il y a certaines parties qui ne vont pas bien comme ça. ** La carte de WeWork n'est pas Suica ** et ** la version de l'API utilisée dans l'article est ancienne **.
J'ai donc corrigé la partie qui ne fonctionnait pas et terminé le code suivant. La version actuelle de l'API nécessite une clé API. Comment obtenir la clé API est décrit dans ici.
SesameNFC.py
# -*- coding: utf-8 -*-
import requests
import json
import binascii
import nfc
import time
import traceback
from threading import Thread, Timer
#1 cycle seconde de veille de la carte IC
TIME_cycle = 1.0
#Intervalle de réaction de veille de la carte IC secondes
TIME_interval = 0.2
#Désactiver les secondes du toucher pour commencer le suivant
TIME_wait = 3
#SESAME API KEY
API_key = "Clé API Sesame"
#Préparation de la demande de connexion NFC
# 106A(NFC type A)Fixé avec
target_req_nfc = nfc.clf.RemoteTarget("106A")
print 'Veuillez toucher la carte IC...'
while True:
try:
#Instancier un lecteur de carte connecté par USB
clf = nfc.ContactlessFrontend('usb')
#Démarrage en veille de la carte IC
# clf.sense( [Cible distante], [Nombre de recherches], [Intervalle de recherche] )
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)
#Extraire l'ID
idm = binascii.hexlify(tag.identifier).upper()
print 'NFC detected. ID = ' + idm
#Vérification de la carte IC
if (idm == "tagtool.ID récupéré par py"):
url_control = "https://api.candyhouse.co/public/sesame/ID du terminal Sesame"
head_control = {"Authorization": API_key, "Content-type": "application/json"}
# get status
response_control = requests.get(url_control, headers=head_control)
#Une erreur se produira-t-elle si l'intervalle est court jusqu'à la prochaine demande? Alors attendez quelques secondes
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+Arrêté à C")
clf.close()
break
except:
clf.close()
traceback.print_exc()
pass
#end while
Vous pouvez maintenant déverrouiller / verrouiller le sésame avec la carte IC WeWork!
La marque sur le lecteur de carte IC a été retournée à cause de la fente d'insertion du câble, alors j'ai mis un autocollant WeWork dessus pour tricher. En conséquence, cela ressemble à un article officiel et n'est-ce pas beau?
Cela fonctionne pour le moment, mais en fait, ce code échoue souvent à se déverrouiller / se verrouiller avec une erreur. Apparemment, la réponse de l'API ou du point d'accès WiFi peut être retardée, donc si vous le faites sérieusement, vous devriez incorporer le traitement des nouvelles tentatives, mais si vous le touchez à nouveau, cela fonctionnera généralement, donc ça va ... Je suis.
Au lieu de cela, la LED clignote pour chaque événement. Vous pouvez dire quel processus a été fait par le motif clignotant, et surtout, L Chika est la route royale si vous faites du razz pie!
Je me suis référé à l'article suivant pour savoir comment faire clignoter la LED. Comment faire Python3 L Chika (LED clignotante) avec Raspberry Pi Zero WH
Et le code qui intègre L Chika est le suivant.
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 cycle seconde de veille de la carte IC
TIME_cycle = 1.0
#Intervalle de réaction de veille de la carte IC secondes
TIME_interval = 0.2
#Désactiver les secondes du toucher pour commencer le suivant
TIME_wait = 3
#SESAME API KEY
API_key = "Clé API Sesame"
#Préparation de la demande de connexion NFC
# 106A(NFC type A)Fixé avec
target_req_nfc = nfc.clf.RemoteTarget("106A")
print 'Veuillez toucher la carte IC...'
while True:
try:
#Instancier un lecteur de carte connecté par USB
clf = nfc.ContactlessFrontend('usb')
#Démarrage en veille de la carte IC
# clf.sense( [Cible distante], [Nombre de recherches], [Intervalle de recherche] )
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)
#Extraire l'ID
idm = binascii.hexlify(tag.identifier).upper()
print 'NFC detected. ID = ' + idm
#Vérification de la carte IC
if (idm == "tagtool.ID lu par py"):
#Définir le mode de spécification du numéro GPIO(BCM:Numéro de broche de rôle, CARTE:Code PIN)
GPIO.setmode(GPIO.BCM)
#Configuré pour utiliser la broche 23 (LED verte) comme sortie
GPIO.setup(23, GPIO.OUT)
#Clignotant
for i in range(3):
GPIO.output(23, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(23, GPIO.LOW)
time.sleep(0.5)
#Réinitialiser les paramètres GPIO
GPIO.cleanup()
url_control = "https://api.candyhouse.co/public/sesame/ID du terminal Sesame"
head_control = {"Authorization": API_key, "Content-type": "application/json"}
# get status
response_control = requests.get(url_control, headers=head_control)
#Une erreur se produira-t-elle si l'intervalle est court jusqu'à la prochaine demande? Alors attendez quelques secondes
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))
#La LED verte s'allume lorsqu'elle est déverrouillée
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))
#La LED verte clignote rapidement lorsqu'elle est verrouillée
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+Arrêté à C")
clf.close()
#Clignote violemment la LED rouge (broche 22) lorsqu'une erreur se produit
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()
#Clignote violemment la LED rouge en cas d'erreur
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
…… C'est un code maladroit que je viens de faire fonctionner pour le moment, mais cela ne gêne pas mon travail, donc je le laisse intact.
Pouvez-vous voir la LED clignoter sur le bureau? Seulement à ce moment, j'étais reconnaissant pour la paroi en verre de WeWork. Il aurait été plus gênant d'installer un lecteur de carte IC et une LED sur un mur ordinaire.
De cette manière, nous avons pu répondre au désir de déverrouiller et de verrouiller la pièce avec la carte IC de WeWork.
En raison du mauvais code et de la lenteur de la réponse de l'API et du point d'accès WiFi, ** le déverrouillage / verrouillage échoue souvent ** ou ** cela prend quelques secondes entre le toucher et le déverrouillage / verrouillage **. Bien qu'il y en ait, ce n'est pas grave car le nombre de personnes et la fréquence d'utilisation ne sont pas si élevés. Bumpy, c'est bien si je suis à l'aise.
En conséquence, je suis très heureux d'être libéré des clés physiques et des opérations sur smartphone et de pouvoir passer librement de l'espace commun au bureau privé avec une carte IC. Je suis heureux.