Alexa macht jetzt auch bei mir das Licht aus! Und noch vieles mehr!

Von einer Abschlussprüfung zur professionellen Anwendung

Hallo zusammen. Urlaub beendet, ich bin zurück und erkläre die Sommerpause offiziell für beendet. Heute möchte ich euch exemplarisch zeigen, wie ihr einen Skill für Amazon´s Alexa schreiben könnt. Weiterhin zeige ich euch, welche Lösung wir für unser Farm- und Home-Control entwickelt haben. Als Grundlage dient dabei ein Abschlussprojekt aus diesem Frühjahr von meinem Lehrling Jonas Kramer. Die Aufgabe meines Kollegen war es, sich mit der Skill-Entwicklung zu beschäftigen und eine Schnittstelle zu unserem Web-Service „PR-FC Web“ zu erstellen. Diese Aufgabe wurde von Jonas erfolgreich umgesetzt und als Belohnung hielt er im Sommer den Gesellenbrief zum Fachinformatiker in der Hand.

Jonas hat also als erstes herausgearbeitet, was alles benötigt wird, um mit der Skill-Entwicklung zu starten:

  • Amazon-Konto
    • Zugang zu developers.amazon.com (Hier erstellt man, auf welche Wörter oder Sätze ein Skill reagieren soll.)
    • Zugang zu aws.amazon.com (Und hier kann man dann die Programmlogik bzw. den Endpoint implementieren.)
  • Eine IDE für z.B. Node-JS (Wir haben mit Visual Studio gearbeitet.)

Erstellung eines Skills

Um die Funktionen eines Skills zu erstellen, wählt in eurem Browser developers.amazon.com und wählt dort die Developer Console. Wechselt nun vom Dashboard zum Alexa Skills Kit. Daraufhin erhaltet ihr eine Übersicht über eure bisher erstellten Skills.

Übersicht der vorhanden Skills.

Übersicht der vorhanden Skills.

Um einen neuen Skill zu erstellen, wählt einfach Create Skill. Gebt dem Skill einen Namen und wählt eure Sprache aus. Weiter unten können auch Vorlagen gewählt werden (Ich habe einfach Custom gewählt). Wenn ihr diese Einstellungen vorgenommen habt, betätigt einfach die Taste Create Skill.

Ansicht nachdem ein neuer Skill erstellt wurde.

Ansicht nachdem ein neuer Skill erstellt wurde.

Nun seht ihr links ein Menü bestehend aus:

  • Custom
    • Interaction Model (Hier werden die Einstellungen vorgenommen, auf welche Wörter der Skill reagieren soll.)
      • Invocation (Gebt hier das Schlagwort an, mit welchem der Skill später erweckt werden soll. Ich habe für unsere Skills „meine farm“ bzw. „mein haus“ gewählt. Dies bedeutet, dass der Skill mit dem Satz „öffne meine farm“ oder „starte meine farm“ geöffnet wird. Testet euer Schlagwort, ob es von Alexa vernünftig verstanden wird. Denkt bitte daran, dass Alexa euch immer nur Kleinbuchstaben zurück gibt und auch der korrekte Satzbau wird nicht berücksichtigt.)
      • Intents (Dies sind weitere Schlagwörter, auf die der Skill später reagieren soll. Z.B. „öffne meine farm und ‚mach … {irgend etwas} …'“.
    • Interfaces (Hier können weitere Schnittstellen mit eingebunden werden.)
    • Endpoint (Hier kann eingestellt werden, wo die Programmlogik liegt. Dabei kann aws-lambda oder ein eigener Webservice verwendet werden.)
  • Account linking (Hier können Einstellungen für Account linking vorgenommen werden. Was ist das? Account linking ermöglicht die Identifizierung eines Benutzers. Googelt danach einfach.)
  • Permissions (Hier können weitere Berechtigungen vom Benutzer des Skills angefordert werden.)

Machen wir ein kleines Beispiel:

Als Invocation wähle ich das Wort „taschenrechner“. Dies ermöglicht, dass der Skill gestartet werden kann, wenn man z.B. sagt „Alexa, öffne Taschenrechner“

Invocation eines Skills

Invocation eines Skills

Als nächstes lege ich ein Intent an. Ihr werdet feststellen, dass drei Intents bereits vorhanden sind. CancelIntent, HelpIntent und StopIntent. Wählt alle drei an und gebt dort entsprechende Schlagwörter ein. Dies kann z.B. sein beim CancelIntent „abbrechen“, „abbruch“ etc. Beim HelpIntent z.B. „hilfe“, „hilf mir“ etc. Beim StopIntent „stopp“, „stop“, „beenden“ etc. Ein Intent kann also mehrere Wörter oder Satzbauten enthalten. Nun aber zurück zum neuen Intent.

Erstellen eines neuen Intent

Erstellen eines neuen Intent

Bei dem angelegten RechneIntent trage ich diese Schlagwörter ein.

Einstellungen zu einen Intent

Einstellungen zu einen Intent

Durch diese Eingabe wird es möglich sein zu sagen: „Alexa, öffne Taschenrechner und rechne 2 plus 3“. Unter Edit Dialog bei jedem Intent Slot können weitere Einstellungen vorgenommen werden.

Ich denke das Prinzip, wie ihr einen Skill erstellt, ist nun verdeutlicht worden. Als nächstes muss die Logik erstellt werden.

Erstellung der Logik

Wechselt nun zu aws.amazon.com und wählt dort die AWS Management Console. Wählt dort unter „All Services“ „Lambda“ aus. Auch hier landet ihr in einer Übersicht mit allen Funktionen, die ihr evtl. erstellt habt.

Management Console

Management Console

Wählt nun oben rechts „Funktion erstellen“. Um nun erstmal eine Vorlage zu haben, wähle ich immer unter Vorlagen den „alexa-skill-kit-sdk-factskill“ aus. Ganz wichtig ist dabei (ich bin damals auch darauf reingefallen), dass die Region auf Irland steht und nicht Deutschland. Scheinbar ist es in Deutschland nicht erlaubt einen Alexa-Skill zu schreiben.

Erstellen einer neuen Funktion mit Vorlage

Erstellen einer neuen Funktion mit Vorlage

Gebt nun der neuen Funktion einen Namen und wählt eine Rolle aus.

Name und Rolle.

Name und Rolle.

Nun wurde die neue Funktion erfolgreich erstellt.

Neue Funktion erstellt

Neue Funktion erstellt

Jetzt wird es etwas kompliziert, denn die erstellte Funktion muss nun mit dem zuvor erstellten Skill verbunden werden. Klickt im Menü unter Designer auf Amazon Skills Kit.

Verbindung über ARN schaffen.

Verbindung über ARN schaffen.

Nun müsst ihr in euer Skill Entwicklungsportal zurückkehren und unter Endpoint die Funktion AWS Lambda ARN aktivieren. Kopiert die angezeigte „Your Skill ID“ und fügt diese unter AWS Lambda ein und speichert die Funktion dort. Kopiert daraufhin die ARN der erstellten Funktion (arn:aws:lambda:… {findet ihr oben rechts in der Funktion}) und fügt diese im Skill Entwicklungsportal unter Endpoint „Default Region“ ein und speichert auch dies ab. Wenn ihr jetzt auf den von euch vergebenen Funktionsnamen drückt, erscheint unten auch sofort Code.

Mit Coding starten.

Mit Coding starten.

Das Coding direkt in AWS-Lambda ist leider nur bis zu einer gewissen Größe möglich. Es ist aber möglich den kompletten Code herunterzuladen und mit einer eigenen IDE zu bearbeiten. Der Offline erstellte Code kann einfach als zip-File wieder hochgeladen werden.

Hier mal ein Beispiel, wie man den bisherigen Code für unser genanntes Beispiel schnell abändern kann.

'use strict';
const Alexa = require('alexa-sdk');
const APP_ID = undefined; // Hier könnt ihr eure ARN eintragen!
const SKILL_NAME = 'Taschenrechner';
const WELCOME_MESSAGE = 'Willkommen zum Taschenrechner. Sage jetzt zum Beispiel: rechne 2 plus 3.';
const GET_FACT_MESSAGE = "Das Ergebnis beträgt: ";
const HELP_MESSAGE = 'Sage zum Beispiel einfach rechne 2 plus 3.';
const HELP_REPROMPT = 'Wie kann ich dir helfen?';
const STOP_MESSAGE = 'Auf Wiedersehen!';
 
const handlers = {
    'LaunchRequest': function () {
        this.emit('GetNewFactIntent');
    },
    'GetNewFactIntent': function () {
        const speechOutput = WELCOME_MESSAGE;
        this.emit(':askWithCard', speechOutput, HELP_REPROMPT, 'Taschenrechner', speechOutput);
        this.emit(':responseReady');
    },
    'RechneIntent': function () {
        const slot1 = this.event.request.intent.slots.ValueA.Value;
        const slot2 = this.event.request.intent.slots.ValueB.Value;
        const sum = slot1 + slot2;
        const speechOutput = GET_FACT_MESSAGE + sum;
        this.emit(':tellWithCard', speechOutput, 'Taschenrechner', speechOutput);
        this.emit(':responseReady');
    },
    'AMAZON.HelpIntent': function () {
        const speechOutput = HELP_MESSAGE;
        const reprompt = HELP_REPROMPT;
 
        this.response.speak(speechOutput).listen(reprompt);
        this.emit(':responseReady');
    },
    'AMAZON.CancelIntent': function () {
        this.response.speak(STOP_MESSAGE);
        this.emit(':responseReady');
    },
    'AMAZON.StopIntent': function () {
        this.response.speak(STOP_MESSAGE);
        this.emit(':responseReady');
    },
};
 
exports.handler = function (event, context, callback) {
    const alexa = Alexa.handler(event, context, callback);
    alexa.APP_ID = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

Speichert die Funktion und wechselt wieder in euer Skill Entwicklungsportal und betätigt dort die „Build Model“-Schaltfläche. Wechselt nun zu „Test“ und aktiviert die Testfunktion. Wenn Ihr nun in der Testfunktion „öffne taschenrechner und rechne zwei plus drei“ eingebt und dies abschickt, so sollte die Antwort sein: „Das Ergebnis beträgt: 5“

Einsatz von Alexa im Farm- und Home-Control

Auf Basis von dem, was hier vorgestellt wurde, haben wir ebenfalls zwei Skills für unser Farm- und Home-Control erstellt. Diese können ab sofort auch über die Alexa-App aktiviert werden. Was wird dazu benötigt? Über unsere Extension-App-Platform kann die App „Alexa-Voice-Control“ direkt in das Farm- oder Home-Control integriert werden. Das war eigentlich schon alles.

Wird die App gestartet, so wird man aufgefordert seinen Amazon-Konto-Namen einzugeben, um die Anfragen von einem Alexa-Gerät an unserem Web-Service „PR-FC Web“ unterscheiden und zuordnen zu können. Daraufhin kann man über diese App selber eigene Befehle anlegen und eine Aktion dahinter konfigurieren.

Die Alexa-Voice-Control App.

Die Alexa-Voice-Control App.

 

Eigene Befehle in der App anlegen.

Eigene Befehle in der App anlegen.

Durch dieses Konzept sind wir sehr flexibel und können im Grunde genommen fast jeden Datenpunkt einer Anlage bearbeiten oder abfragen. Bis zur EuroTier 2018 in Hannover soll das Projekt vollständig fertig gestellt sein. Ich bin gespannt und ich hoffe, dass ich eure Kreativität anregen konnte.

Natürlich teste ich die Funktionen fleißig an meinem eigenem Haus und bin überrascht, dass sogar meine Kinder (6 und 2 Jahre) damit klar kommen. Die Einfachheit der Sprachsteuerung hat mich definitiv überrascht. Vor allem hat mich die Qualität der Spracherkennung überzeugt. Selbst bei vielen Störgeräuschen werden die Sprachbefehle von Alexa sehr gut verstanden. Zukünftig könnten solche Geräte (muss ja nicht von Amazon sein) auch Einzug in die Maschinensteuerung haben. Der Vorteil wäre, dass eine Maschinenbedienung frei Hand erfolgen könnte.

Was meint ihr?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.