Heimautomatisierung mit Alexa und Raspberry Pi — Teil 6

Überarbeitung der Lambda-Funktion

Joachim Baumann
Oct 6 · 5 min read
Image for post
Image for post

Einleitung (Links einfügen)

Eigentlich läuft unsere Heimautomatisierung mit Alexa und unserem Raspberry, den wir in den Teilen 1–5 unserer Artikelserie gebaut haben, sehr zuverlässig und ohne Probleme.

Der Ansatzpunkt

In unserer Lambda-Funktion rufen wir die Funktion handleControl() dann auf, wenn eine Direktive von Alexa kommt (siehe Teil 5). In dieser Funktion senden wir die Details des Aufrufs an die MQTT-Instanz und erzeugen im Erfolgsfall eine Nachricht, die wir im letzten Schritt an Alexa zurücksenden.

Listing 1: Unser Ansatzpunkt für die Erzeugung der Nachricht mit mehreren Rückgabewerten

AWS Lambda: Wechsel zwischen Implementierungen

Bevor wir uns in die notwendigen Änderungen stürzen, noch ein Hinweis auf eine sehr geschickte Funktionalität von AWS Lambda, die es uns erlaubt, die Implementierung unserer Lambda-Funktion sehr einfach und schnell auszutauschen.

Image for post
Image for post
Bild 1: Die Auswahl des Handlers in AWS Lambda

Die Implementierung

Damit wir die Antwort korrekt erzeugen können, brauchen wir zuerst die Menge der möglichen Fähigkeiten (capabilities) und ihrer Eigenschaften, für die wir Werte zurückliefern können, müssen dann entscheiden, für welche dieser Eigenschaften Alexa tatsächlich eine Antwort braucht, und wir müssen entscheiden, ob wir einen “echten” (von Alexa in der Direktive mitgelieferten) Wert zurückliefern, oder ob wir einfach einen “beliebigen”, sinnvollen Wert zurückgeben.

Listing 2: Die Iteration durch die Eigenschaften aller Fähigkeiten unseres Endpunkts
  • Verwendung des Wertes, der im Payload der Direktive mitgeschickt wurde
  • Ignorieren dieser Eigenschaft

Verwendung eines sinnvollen, künstlichen Wertes

Hierzu erweitern wir das assoziative Feld acceptableValues, das wir auch bisher verwendet hatten, um eine künstliche Antwort zurückzuliefern. Anstatt eines einzigen Wertes für jede benutzen wir jetzt ein weiteres assoziatives Feld, das für jede von Alexa aufgerufene Direktive die Werte für die verschiedenen Eigenschaften der gewählten Fähigkeit enthält.

Listing 3: Die Abbildung von Direktive auf künstliche Rückgabewerte

Verwendung des Wertes, der im Payload der Direktive mitgeschickt wurde

Im nächsten Schritt versuchen wir für die Eigenschaften, die nicht bereits über diese Abbildung einen Rückgabewert erhalten haben, den Wert aus dem Payload der Direktive zu extrahieren. Im Prinzip haben wir dies auch bisher getan, es gibt aber gerade bei dem Alexa.Speaker-Interface (und wahrscheinlich bei anderen) eine zusätzliche kleine Herausforderung. Während die Eigenschaft muted heißt, lautet der Name des Wertes im Payload der Direktive mute. Unverständlich, aber hierfür führen wir ein zusätzliches Feld propertyDirectiveMapping ein, das diese Abbildung liefert.

Ignorieren der Eigenschaft

Sofern wir über keine der beiden Vorgehensweisen einen Rückgabewert für die Eigenschaft erhalten, gehen wir davon aus, dass kein Antwortwert notwendig ist und ignorieren die Eigenschaft für die Antwort an Alexa.

Die Implementierung

Mit diesen Betrachtungen sieht die vollständige Implementierung wie folgt aus:

Listing 4: Die vollständige Implementierung

Zusammenfassung

In diesem Artikel haben wir die Lambda-Funktion so verallgemeinert, dass sie auf alle von Alexa geschickten Direktiven eine sinnvolle Antwort liefern kann. Diese Implementierung ist trotz ihrer höheren Komplexität erstaunlicherweise kaum länger als die simplere Variante aus dem letzten Artikel der Serie. Durch Erweiterung der beiden Felder acceptableValues und propertyDirectiveMapping ist sie beliebig erweiter- und anpassbar und damit auch für die Zukunft mit Alexa gut gerüstet.

Digital Frontiers — Das Blog

Dies ist das Blog der Digital Frontiers GmbH & Co.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store