[PYTHON] J'ai fait un bouton IFTTT qui déverrouille l'entrée 2 lock sésame avec 1 bouton (via AWS Lambda)

Contexte

Il y a un mini sésame à 2 serrures à l'entrée de ma maison. Il peut être déverrouillé via l'application officielle, mais cela peut prendre environ 15 à 20 secondes pour que la communication se stabilise, surtout s'il y a une sensation délicate de distance entre la connexion via des points Wi-Fi et la connexion via Bluetooth. Je dois me tenir devant la porte d'entrée pendant un moment, surtout en hiver.

J'ai pensé: "Alors, débloquons sans utiliser l'application officielle. Vais-je accéder à l'API?", J'ai donc pris la méthode pour frapper l'API Sesame directement depuis l'iPhone en exécutant le code maison de pythonista, mais ce pythonista Je ne sais pas si c'est lourd ou pas, mais ça gèle souvent sur l'iPhone, et même s'il fait froid, je me tiens souvent devant la porte d'entrée pendant environ 20 secondes.

Ce que j'y ai pensé

Le code python qui atteint l'API sésame a été établi pendant l'ère des opérations pythonista, alors j'ai pensé que je le ferais fonctionner à partir d'un environnement autre que l'iPhone ... mais je n'avais pas de saba et je ne voulais pas acheter un saba et l'exploiter, donc avec AWS Lambda J'ai décidé de le déplacer. L'API peut être créée avec AWS API Gateway.

L'architecture est comme ci-dessous.

Lambda to Sesame.png (Dessin: https://www.draw.io/?splash=0&libs=aws4)

Prémisse majeure

Tout le sésame cible que vous souhaitez exploiter est connecté au point d'accès Wi-fi. Si vous n'êtes pas connecté à Internet, vous ne pouvez pas utiliser l'API!

Ce que j'ai fait

1. Obtenez la clé API et l'identifiant Sesame pour 2 unités à partir de l'API Sesame

Obtenez la clé API et l'identifiant Sesame en vous référant à l'article du blog officiel ci-dessous (cela sera utilisé dans AWS Lambda, qui sera décrit plus tard). Cette fois, je veux déverrouiller les deux minis Sesame installés au-dessus et en dessous de l'entrée, alors obtenez deux identifiants Sesame. Une seule clé API est requise.

--Article de blog officiel

2. Paramètres AWS Lambda

2-1. Nouvelle création Lambda

Créez un AWS Lambda avec un nom arbitraire. Puisqu'il n'est pas nécessaire de l'associer à des ressources AWS autres que API Gateway, l'emplacement d'installation est OK en dehors du VPC.

2-2. Téléchargement du module externe pysesame2

Afin de frapper l'API côté Candyhouse pour l'exécuter, le code python qui sera écrit plus tard dans Lambda utilise un module externe appelé pysesame2. Cependant, AWS Lambda a peu de types de modules qui peuvent être exécutés par défaut, et il semble qu'il ne puisse pas être récupéré de l'extérieur avec pip, il est donc nécessaire de le télécharger en tant que fichier zip à l'avance.

Alors, téléchargez pysesame2 dans votre environnement, zippez-le et téléchargez-le. Veuillez vous référer à l'article suivant pour la procédure spécifique.

2-3. Ecrire du code Python

Écrivez le code suivant pour Lambda après avoir téléchargé le fichier zip. La version Python peut être n'importe quoi, mais comme elle fonctionnait avec la version 3.8, j'ai décidé d'utiliser la version 3.8.

from uuid import UUID
from pysesame2 import Sesame
import os

device_id_1 = UUID(os.environ['DEVICE_ID_1']) # 'DEVICE_ID_1'Est le premier identifiant de sésame qui sera entré dans une fenêtre séparée plus tard en tant que variable d'environnement.
device_id_2 = UUID(os.environ['DEVICE_ID_2']) # 'DEVICE_ID_2'Est le deuxième ID de sésame qui sera entré dans une fenêtre séparée plus tard en tant que variable d'environnement.

def lambda_handler(event, context):
    APIKey = event['apikey'] #Clé de JSON envoyée par IFTTT plus tard`apikey`Ouvrez la valeur de la variable`APIKey`Remplacer dans
    sesame_1 = Sesame(device_id_1, APIKey)
    sesame_2 = Sesame(device_id_2, APIKey)
    sesame_1.async_unlock() #Premier ordre de déverrouillage
    sesame_2.async_unlock() #Deuxième ordre de déverrouillage

Après avoir écrit le code, écrivez les deux ID sésame un par un dans la "variable d'environnement" en dessous et enregistrez-le comme suit.

無題.png

2-4. Test

Une fois que vous avez fait ce qui précède, à partir de "Test" en haut à droite de l'écran, écrivez le JSON suivant dans l'événement de test et testez le code. Succès si deux sésame sont déverrouillés.

{"apikey": "{Clé API obtenue à l'avance}"}

3. Paramètres de la passerelle API

Je faisais référence à cet article, mais je l'ai écrit dans «Permettre à Amazon API Gateway d'exécuter du code Lambda de l'extérieur». Comme vous pouvez le voir, j'ai installé API Gateway et l'ai associé à Lambda en faisant référence aux deux articles suivants.

4. Paramètres IFTTT

Définissez Button Widget etc. comme déclencheur et définissez-le comme suit à partir de Webhooks.

nom de l'article Réglages
URL URL du point de terminaison de la passerelle API déployée
Method POST
Content Type application/json
Body {"apikey": "{Clé API obtenue à l'avance}"}

Après avoir configuré jusqu'à ce point et appuyé sur Button Widget, les deux sésame sont déverrouillés!

Comment ça fonctionne

Il y a encore un délai d'environ 15 secondes entre la pression et le déverrouillage réel, mais il n'est pas nécessaire de se tenir devant l'entrée et d'attendre que la connexion Bluetooth soit établie et d'appuyer sur le bouton.Il y a également un bouton pour fonctionner. Je suis très heureux de l'être.

En tant que scène pour l'utiliser, montez d'abord dans l'ascenseur de l'appartement en visant votre chambre, appuyez sur Bouton Widget pendant que vous roulez, et vous aurez l'impression que le sésame s'ouvre juste lorsque vous arrivez à l'étage de destination. Je n'ai plus besoin de me tenir devant l'entrée pendant 15 à 20 secondes et d'avoir froid, et surtout, lorsque la porte de l'ascenseur s'ouvre, j'ai l'impression que le sésame va s'ouvrir, j'ai donc beaucoup de bagages dans ma main ou emmener des enfants. C'est tellement facile d'entrer dans la porte d'entrée quand je le fais, et je suis vraiment très heureux! !!

Recommended Posts

J'ai fait un bouton IFTTT qui déverrouille l'entrée 2 lock sésame avec 1 bouton (via AWS Lambda)
J'ai essayé de déverrouiller l'entrée 2 lock sésame d'une simple pression sur le bouton AWS IoT
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
J'ai créé la partie APL avec la compétence Alexa "Conversion des termes de l'industrie"
J'ai écrit un bot Slack qui notifie les informations de retard avec AWS Lambda
Création d'un bot Slack qui confirme et notifie à AWS Lambda la date d'expiration d'un certificat SSL
Je viens de faire FizzBuzz avec AWS Lambda
J'ai créé un package extenum qui étend enum
J'ai essayé de connecter AWS Lambda à d'autres services
J'ai créé un bouton Amazon Web Service Dash
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)