[PYTHON] Ich habe einen IFTTT-Knopf gemacht, der den Eingang 2-Sesam mit 1 Knopf (über AWS Lambda) entsperrt.

Hintergrund

Am Eingang meines Hauses befindet sich ein Sesam-Mini mit 2 Schlössern. Es kann über die offizielle App entsperrt werden, es kann jedoch etwa 15 bis 20 Sekunden dauern, bis sich die Kommunikation stabilisiert hat, insbesondere wenn Sie eine Verbindung über einen Wi-Fi-Punkt oder eine Verbindung über Bluetooth herstellen, je nach dem empfindlichen Gefühl der Entfernung. Ich muss eine Weile vor dem Eingang stehen, besonders im Winter.

Ich dachte: "Dann lassen Sie uns entsperren, ohne die offizielle App zu verwenden. Werde ich auf die API klicken?" Also nahm ich die Methode, die Sesam-API direkt vom iPhone aus zu treffen, indem ich den hausgemachten Code von Pythonista ausführte, aber diesen Pythonista Ich weiß nicht, ob es schwer ist oder nicht, aber auf dem iPhone friert es oft ein, und obwohl es kalt ist, stehe ich oft etwa 20 Sekunden vor der Haustür.

Was ich dort gedacht habe

Der Python-Code, der auf die Sesam-API trifft, wurde während der Pythonistaista-Ära erstellt. Daher dachte ich, ich würde ihn in einer anderen Umgebung als dem iPhone ausführen ... aber ich hatte keine Saba und wollte keine Saba kaufen und betreiben, also mit AWS Lambda Ich beschloss, es zu verschieben. Die API kann mit AWS API Gateway erstellt werden.

Die Architektur ist wie folgt.

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

Hauptprämisse

Alle Zielsesame, die Sie bedienen möchten, sind mit Wi-Fi Access Point verbunden. Wenn Sie keine Verbindung zum Internet herstellen, können Sie die API nicht verwenden!

Was ich getan habe

1. Beziehen Sie den API-Schlüssel und die Sesam-ID für 2 Einheiten von der Sesam-API

Erhalten Sie den API-Schlüssel und die Sesam-ID unter Bezugnahme auf den offiziellen Blog-Artikel unten (dieser wird in AWS Lambda verwendet, das später beschrieben wird). Dieses Mal möchte ich die beiden über und unter dem Eingang installierten Sesam-Minis entsperren, also zwei Sesam-IDs erhalten. Es ist nur ein API-Schlüssel erforderlich.

2. AWS Lambda-Einstellungen

2-1. Lambda neue Schöpfung

Erstellen Sie ein AWS Lambda mit einem beliebigen Namen. Da es nicht erforderlich ist, es anderen AWS-Ressourcen als API Gateway zuzuordnen, ist der Installationsort außerhalb der VPC in Ordnung.

2-2. Hochladen des externen Moduls pysesame2

Um die API auf der Candyhouse-Seite aufzurufen, um sie auszuführen, verwendet der Python-Code, der später in Lambda geschrieben wird, ein externes Modul namens "pysesame2". AWS Lambda verfügt jedoch nur über wenige Modultypen, die standardmäßig ausgeführt werden können, und es scheint, dass es nicht mit pip von außen abgerufen werden kann. Daher muss es im Voraus als Zip-Datei hochgeladen werden.

Laden Sie also "pysesame2" in Ihre Umgebung herunter, komprimieren Sie es und laden Sie es hoch. Weitere Informationen zum spezifischen Verfahren finden Sie im folgenden Artikel.

2-3. Schreiben Sie Python-Code

Schreiben Sie nach dem Hochladen der Zip-Datei den folgenden Code für Lambda. Die Python-Version kann alles sein, aber da sie mit 3.8 funktioniert hat, habe ich mich für 3.8 entschieden.

from uuid import UUID
from pysesame2 import Sesame
import os

device_id_1 = UUID(os.environ['DEVICE_ID_1']) # 'DEVICE_ID_1'Ist die erste Sesam-ID, die später als Umgebungsvariable in einem separaten Fenster eingegeben wird.
device_id_2 = UUID(os.environ['DEVICE_ID_2']) # 'DEVICE_ID_2'Ist die zweite Sesam-ID, die später als Umgebungsvariable in einem separaten Fenster eingegeben wird.

def lambda_handler(event, context):
    APIKey = event['apikey'] #Schlüssel von JSON später von IFTTT gesendet`apikey`Öffnen Sie den Wert der Variablen`APIKey`Ersatz in
    sesame_1 = Sesame(device_id_1, APIKey)
    sesame_2 = Sesame(device_id_2, APIKey)
    sesame_1.async_unlock() #Erste Bestellung freischalten
    sesame_2.async_unlock() #Zweite Entsperrreihenfolge

Schreiben Sie nach dem Schreiben des Codes die beiden Sesam-IDs nacheinander in die darunter liegende "Umgebungsvariable" und speichern Sie sie wie folgt.

無題.png

2-4. Test

Wenn Sie die oben genannten Schritte ausgeführt haben, schreiben Sie unter "Test" oben rechts auf dem Bildschirm den folgenden JSON in das Testereignis und testen Sie den Code. Erfolg, wenn zwei Sesame freigeschaltet werden.

{"apikey": "{API-Schlüssel im Voraus erhalten}"}

3. API-Gateway-Einstellungen

Ich bezog mich auf diesen Artikel, schrieb ihn jedoch in "Amazon API Gateway erlauben, Lambda-Code von außen auszuführen". Wie Sie sehen können, habe ich API Gateway installiert und es mit Lambda verknüpft, indem ich auf die folgenden zwei Artikel verwiesen habe.

4. IFTTT-Einstellungen

Stellen Sie "Button Widget" usw. als Auslöser ein und setzen Sie wie folgt unter "Webhooks".

Artikelname die Einstellungen
URL Endpunkt-URL des bereitgestellten API-Gateways
Method POST
Content Type application/json
Body {"apikey": "{API-Schlüssel im Voraus erhalten}"}

Nachdem Sie sich bis zu diesem Punkt eingerichtet und das "Button Widget" gedrückt haben, werden beide Sesame freigeschaltet!

Wie es funktioniert

Es gibt immer noch eine Zeitverzögerung von ca. 15 Sekunden vom Drücken bis zum eigentlichen Entsperren, aber Sie müssen nicht vor dem Eingang stehen und warten, bis die Bluetooth-Verbindung hergestellt ist, und es gibt auch eine Taste zum Bedienen. Ich bin sehr glücklich zu sein.

Als eine Szene, um es tatsächlich zu benutzen, steigen Sie zuerst in den Aufzug der Wohnung und zielen auf Ihr Zimmer, drücken Sie während der Fahrt "Button Widget" und es fühlt sich an, als würde sich der Sesam öffnen, sobald Sie im Zielgeschoss ankommen. Ich muss nicht länger 15 bis 20 Sekunden vor dem Eingang stehen und mich kalt fühlen. Vor allem, wenn sich die Aufzugstür öffnet, fühlt es sich an, als würde sich der Sesam öffnen, also habe ich viel Gepäck in der Hand oder bringe Kinder mit. Es ist so einfach, in die Haustür zu gelangen, wenn ich es tue, und ich bin wirklich sehr glücklich! !!

Recommended Posts

Ich habe einen IFTTT-Knopf gemacht, der den Eingang 2-Sesam mit 1 Knopf (über AWS Lambda) entsperrt.
Ich habe versucht, den Sesam für Eingang 2 mit einem einzigen Druck auf die AWS IoT-Taste zu entsperren
Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Ich habe den APL-Teil mit der Alexa-Fertigkeit "Industry Term Conversion" erstellt.
Ich habe einen Slack-Bot geschrieben, der Verzögerungsinformationen mit AWS Lambda benachrichtigt
Erstellt einen Slack-Bot, der AWS Lambda über das Ablaufdatum eines SSL-Zertifikats bestätigt und benachrichtigt
Ich habe gerade FizzBuzz mit AWS Lambda gemacht
Ich habe ein Extenum-Paket erstellt, das die Enumeration erweitert
Ich habe versucht, AWS Lambda mit anderen Diensten zu verbinden
Ich habe eine Amazon Web Service Dash-Schaltfläche erstellt
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).