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.
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.
(Zeichnung: https://www.draw.io/?splash=0&libs=aws4)
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!
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.
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.
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.
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.
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}"}
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.
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!
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! !!