Wie kann ich Zugriff auf einen lokalen API mit Amazon Alexa
Ich vorhabe zu bauen eine Reihe von Fähigkeiten für Amazon Alexa integrieren wird mit einer custom-software-suite, die läuft auf einem RaspberryPi in meinem Haus.
Ich bin kämpfen, um herauszufinden, wie ich den Echo /Dot selbst einen API-Aufruf, um den raspberry pi direkt - ohne Umweg über das internet, als das Zielgerät wird nichts mehr dann eine intranet - Anschluss- es wird in der Lage sein, um Befehle von Geräten auf dem lokalen Netzwerk, aber nicht zugänglich ist über die Welt.
Von dem, was ich gelesen habe, wird der typische workflow ist wie folgt
Echo -> Alexa Service -> Lambda
Wo eine Lambda-Funktion gibt eine blob-Daten zu den Smart-Home-Gerät; mit dieser Rückgabewert
Ist es möglich, und wie kann ich machen das Alexa Gerät selbst eine API-Anforderung an ein Gerät auf dem lokalen Netzwerk nach dem Empfang einer Antwort von lambda?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das gleiche problem und meine Lösung ist die Verwendung von SQS, als Sie die Nachrichten-bus, so dass mein RaspberryPi nicht zugänglich sein müssen, aus dem internet.
Dies funktioniert gut, solange:
Diese geben den Vorteil:
Könnten Sie versuchen, mithilfe von AWS IoT:
Wenn ich etwa mit diesem für meine Alexa RasberryPi Projekt, aber die Idee aufgegeben, da die AWS-IoT nicht bieten eine dauerhaft Kostenlose tier. Aber das Gratisangebot ist nicht länger ein Anliegen, da Amazon bietet jetzt Alexa AWS-Werbe-credits.
https://developer.amazon.com/alexa-skills-kit/alexa-aws-credits
Eine Möglichkeit ist das installieren von node-rot auf deinen rPi. Node-red-hat-plugins (https://flows.nodered.org/node/node-red-contrib-alexa-local) zu simulieren, Philips hue und macht Alexa sprechen ihn direkt an. Es ist eine sofortige Reaktion. Der Nachteil ist, dass es funktioniert nur für 3 Befehle:
on
,off
,set to x %
. Funktioniert Super für software/- Geräten, Kontrolle Lichter, Schatten und air-con.increase%
,decrease%
dataplicity
service-und setup nginx und Sie haben eine unbegrenzte Anzahl von API-Endpunkte.Beantwortet wurde in diese forum eine Weile her, und ich habe Angst, Ihnen zu sagen, die situation hat sich nicht geändert seit:
10.0.0.10:8080
In diesem Sinne, habe ich internet Verbindung auf Alexa, aber der Letzte Befehl ausgeführt werden soll, lokal zu vermeiden, dass ein Loch wieder in mein Netzwerk für die lambda-Funktion zu berühren.Gibt es ein paar workaround-Methoden, die ich gesehen habe verwendet.
Die erste Methode ist eine, die ich verwendet habe:
Ich setup Wenn Diese Dann (IFTTT) zu hören, für einen bestimmten Satz von Alexa, dann sende Befehle über das Telegramm sichere chat - /messaging-Dienst, wo ich eine "chat-bot" läuft auf meinem raspberry PI zu Lesen und zu handeln, auf diese Nachrichten.
Die zweite Methode, die ich zuletzt sah, würde verwenden Sie IFTTT, um Zeilen hinzufügen, um ein google-spreadsheet, das der raspberry pi überwachen könnte und zu handeln.
War ich nicht sonderlich zufrieden mit der performance/Latenz entweder von diesen Methoden, aber wenn ich schrieb, eine benutzerdefinierte Alexa-service mit einer ähnlichen Methodik könnte es zumindest zu beseitigen, die IFTTT Verzögerung.
Können Sie erreichen dies, indem mithilfe von proxy. BST hat ein tool für, dass ich derzeit verwenden, dass man http://docs.bespoken.tools/en/latest/commands/proxy/
So, anstatt einen
Lambda
können Sie die lokale Maschine.Im wesentlichen wird es
Echo -> Alexa Service -> Local Machine
Installieren npm bst auf Ihrem lokalen Rechner
https://www.npmjs.com/package/bespoken-tools
npm install bespoken-tools --save
Gehen, die für Ihre Projekte index.js Ordner und führen Sie die proxy-Befehl
bst proxy lambda index.js
Dadurch erhalten Sie eine url wie folgt:
https://proxy.bespoken.tools?node-id=xxx-xxx-xxx-xxx-xxxxxxxx
Nun gehen Sie zu Ihrem alexa Geschick über die Entwickler.amazon und klicken Sie auf konfigurieren Sie Ihre Fähigkeiten.
Wählen Sie Ihren service-Endpunkt als "https" und geben Sie die url ausgedruckt BST
Klicken Sie dann auf speichern, und boooom Ihrem lokalen Rechner zum endgültigen Ende.
Echo -> Local Machine
? das ist im Augenblick nicht möglich, denke ich.Echo -> Alexa Services -> Lambda -> Echo -> Local Machine
, der Letzte Endpunkt wird ein Stück hardware im inneren des Hauses, das nicht cloud-Konnektivität selbst.Öffnen Sie einfach einen SSH-tunnel in dein rPi mit einem Dienst wie https://ngrok.com/ und teilt anschließend mit, dass entweder der Endpunkt oder von der lambda.