Homie – Ein Bot der die menschliche Sprache versteht


Heute freue ich mich besonders Euch einen Gast Beitrag von Stephan Bisser, präsentieren zu können:

Die Begriffe „Smart Homes“, „Smart Vehicles“ oder „Smart Everything“ sind heutzutage allgegenwärtig. Jedes Gerät, welches wir im Alltag einsetzen, muss „smart“ sein, damit wir es überhaupt benutzen. Es gibt heutzutage eine Vielzahl an Möglichkeiten ein Gerät mit Intelligenz zu versehen, ob das Spracherkennung ist oder das Gerät autonom Aktionen durchführen kann anhand von antrainiertem Wissen um uns das Leben zu erleichtern. Die wichtigste Komponente, um dieses Ziel zu erreichen, ist in jeder Variante immer dieselbe, egal ob das Produkt von Microsoft, Google oder Amazon ist. Hinter jedem dieser Produkte steckt stets künstliche Intelligenz (engl.: „Artificial Intelligence“) oder kurz AI.

Da ich mich sehr intensiv mit dem AI Ökosystem von Microsoft beschäftige (insbesondere mit den Themen Cognitive Services, Bot Framework und Azure Machine Learning) wollte ich einen intelligenten Service entwickeln, der mir das Leben erleichtert. Mein Hauptziel war es eine Lösung zu entwerfen, die gewisse Aktionen durchführen, sobald ich diesem Service eine Anweisung gebe. Und so entstand die Idee zu „Homie“ – meinem persönlichen Assistenten der mir gewisse alltägliche Dinge abnimmt. Nun wollt Ihr bestimmt wissen wer oder was Homie ist und vor allem was er kann. Die nächsten Absätze sollen hierzu ein bisschen die Funktionsweisen und den Aufbau der Lösung erläutern.

Wie sieht das Service-Design aus?

Stellt Euch vor Ihr sitzt im Büro und seit wirklich vertieft in die Arbeit. Dabei sollte man ja stets konzentriert und fokussiert sein auf das was man macht um die Aufgabe bestmöglich zu meistern. Da kann es schon mal vorkommen, dass man die Zeit übersieht und es draußen plötzlich dunkel wird. Anfangs ist das ja noch kein Problem, jedoch wenn es draußen wirklich stockfinster ist findet man sich selbst in einem dunklen Raum wieder wobei das einzige Licht durch den Monitor erzeugt wird. Als gemütliche Person ist man jedoch zu faul um aufzustehen und das Licht im Raum anzuschalten. Wie wäre es, wenn ich Euch sage, dass man ab sofort nicht mehr aufstehen muss, um das Licht anzuschalten? Wie wäre es, wenn Homie das für Euch erledigen würde? Um Homie dies beizubringen müsst Ihr lediglich die folgenden Schritte bewerkstelligen und die Services in der nachfolgenden Grafik miteinander verbinden und schon kann er für euch Aktionen durchführen.

clip_image002

Abbildung 1: Diese Lösung verbindet einige Azure Services miteinander um den Bot intelligent zu machen

Wie mache ich den Bot intelligent?

Zuerst muss der Bot einmal erstellt werden, indem man im Azure Portal einen neuen Azure Bot Service anlegt. Nachdem der Service fertig provisioniert wurde, ist es an der Zeit den Bot zu konfigurieren und so zum Leben zu erwecken. Ich wählte einen NodeJS Bot vom Typ „Language understanding“, da hierbei bereits einige Text- und Spracherkennungsfeatures vorkonfiguriert sind. Dieser Typ nutzt die Language Understanding Intelligent Service (LUIS) API aus dem Azure Cognitive Services Portfolio. Nun ist es an der Zeit die sogenannten „Intents“ zu der automatisch erstellten LUIS App hinzuzufügen, damit der Service weiß, auf welche Textmuster er getriggerd werden soll. Um dies durchzuführen muss man auf https://www.luis.ai navigieren, sich einloggen (oder registrieren) und danach einige der vordefinierten Intents hinzufügen. In diesem Szenario habe ich die Intents, welche im folgenden Bild zu sehen sind, gewählt, da diese für die Steuerung von Heimgeräten hervorragend geeignet sind.

clip_image004

Abbildung 2: Dies sind die gewählten vordefinierten LUIS Intents

Nachdem die Intents hinzugefügt wurden ist es an der Zeit die LUIS App zu testen und zu trainieren, damit die Sprach- und Texterkennung funktioniert. Sobald dies erfolgreich durchgeführt wurde, ist es an der Zeit wieder zum Azure Portal zurück zu kehren, um dem Bot einiges an „Magie“ einzuflößen. Die folgenden Codezeilen sorgen dafür, dass der Bot tatsächlich intelligent wird und dass der Bot Aktionen durchführt an Hand der erkannten Intention, welche aus der Nachricht des Users hervorgeht.

intents.matches('HomeAutomation.TurnOn',function(session, args){ 
    session.sendTyping();
    if(args.entities[0]) {
        var deviceEntity = builder.EntityRecognizer.findEntity(args.entities, 'HomeAutomation.Device');
        var roomEntity = builder.EntityRecognizer.findEntity(args.entities, 'HomeAutomation.Room');
    if (roomEntity){
        session.send("Ok, I will turn the %s on in the %s", deviceEntity['entity'], roomEntity['entity']);
        session.endDialog();
    var commandJSON= {
        "device": deviceEntity['entity'],
        "room": roomEntity['entity'],
        "action": "Turn on"
        };
        request({
            url: "<URL of your Azure Function>",
            method: "POST",
            json: true, // <-- This is very important!
            body: commandJSON
            }, function (error, response, body){
            console.log(response);
            });
        }
    } 
});

Das Internet der Dinge

Nachdem der Bot nun bereit ist um Nachrichten zu erhalten und zu verarbeiten, muss der IoT Part noch an die Service Landschaft angebunden werden, um die smarten Heimgeräte zu steuern. Dazu wird ein Azure IoT Hub verwendet, der mit den Geräten kommuniziert und Kommandos an die Geräte senden kann beziehungsweise auch Telemetrydaten von den Geräten empfangen und weiteleiten kann. Also erstellen wir im Azure Portal einen neuen IoT Hub und fügen Geräte hinzu. In diesem Szenario habe ich ein Gerät für mein Büro hinzugefügt, welches ein Raspberry PI ist. Somit habe ich das Device „office_controller” genannt, wie in der nächsten Grafik zu sehen ist.

clip_image005

Abbildung 3: Bei der Anlage eines neuen Gerätes am IoT Hub ist es wichtig, dass der Authentication Type "Symmetric Key" ausgewählt ist

Azure Functions um die Server zu schonen

Nachdem der IoT Hub konfiguriert ist, wird der letzte Azure Service konfiguriert. Ich habe mich dazu entschieden den Großteil meiner Logik in eine Azure Function (JavaScript HTTP Trigger) zu verpacken, da diese perfekt dazu geeignet sind. Nachdem die Azure Function im Portal angelegt wurde müssen zu aller erst die Dependencies via NPM mittels folgendem Befehl in der Command Line der Function installiert werden:

npm install azure-iothub –save

Nun können wir im Code auf dieses Package referenzieren und es nutzen. Der Code der auf die IoT Hub Funktionalitäten zugreift sieht wie folgt aus:

var Client = require('azure-iothub').Client;
var Message = require('azure-iot-common').Message;
var connectionString = '<yourIoTHubConnectionString>';
var targetDevice = 'office_controller';
var serviceClient = Client.fromConnectionString(connectionString);

Um eine Nachricht an den Azure IoT Hub zu übermitteln werden folgende Codezeilen verwendet:

var message = new Message('lightsOnOffice');
message.ack = 'full';
message.messageId = "ID_001";
serviceClient.send(targetDevice, message, printResultFor('send'));

Und wo bleiben die Devices?

Um die Cloud Services jetzt auch wirklich nutzen zu können, muss das Gerät welches gesteuert werden soll noch konfiguriert werden. Ich habe mich in diesem Fall für ein Raspberry PI 3 entschieden, da es sich für diesen Showcase gut eignet. Um zu zeigen, dass Homie wirklich das Licht ein/ausschalten kann habe ich in diesem Fall ein Breadboard mit dem PI verbunden auf dem ich ein LED Licht angebunden habe, da ich keine „kluge Glühbirne“ bei der Hand hatte. Es geht ja schließlich auch darum zu zeigen, dass Homie in der Lage ist Geschriebenes zu verstehen und eine Aktion anhand der Usernachrichten zu setzen, oder? Die Bauanleitung für den PI samt Breadboard und LED sieht wie folgt aus:

clip_image007

Abbildung 4: Pinbelegung des Raspberry PI wie auf GitHub zu finden

Nachdem die Pinbelegung so aussieht wie auf der obenstehenden Grafik ist es an der Zeit am PI NPM und NodeJS zu installieren, da wir eine kleine NodeJS Applikation in Betrieb nehmen werden, welche die Befehle die vom Azure IoT Hub kommen auch empfangen und ausführen können. Der folgende Code ist dafür zuständig das Licht im Büro ein- beziehungsweise auszuschalten, wenn der Befehl dazu vom IoT Hub übermittelt wird.

var wpi = require('wiring-pi');

// GPIO pin of the led
var configPin = 7;
wpi.setup('wpi');
wpi.pinMode(configPin, wpi.OUTPUT);

// Turn LED on
var isLedOn = 0;
isLedOn = +!isLedOn;
wpi.digitalWrite(configPin, isLedOn );

Und das ist es im Prinzip. Unser Homie ist nun bereit Nachrichten zu empfangen und die richtigen Aktionen daraus abzuleiten. So sollte der Bot bei der Nachricht “Turn the lights on in the office” das Licht beziehungsweise die LED Lampe im Büro einschalten.

Einbinden des Bots in Microsoft Teams

Nun da der Bot soweit fertig ist, müssen wir ihn unseren Usern zur Verfügung stellen. Und welches Tool eignet sich besser um mit einem Bot zu chatten als Microsoft Teams? Die verfügbaren Kanäle die in der nächsten Illustration zu sehen sind können unter https://dev.botframework.com/bots hinzugefügt werden. Ihr könnt natürlich für euren Bot eure Lieblingskanäle hinzufügen.

clip_image009

Abbildung 5: Dies sind die momentan verfügbaren Kanäle in denen der Bot eingebunden werden kann

Nachdem der Teams Kanal hinzugefügt wurde, ist der Bot bereit Nachrichten in Teams zu empfangen ohne weitere Konfiguration:

clip_image011

Abbildung 6: Die Kommunikation mit dem Bot in Teams ist gleich wie die Kommunikation mit Arbeitskollegen

Das Fazit

  • Azure, Cognitive Services und das Bot Framework passen hervorragend zusammen, da die Interaktion zwischen den Services out-of-the-box funktioniert
  • Azure Functions eignen sich stets gut um Applikationslogik zu hosten und diese anderen Services bereitzustellen
  • Bots die die menschliche Sprache verstehen werden in Zukunft sowohl im Consumer als auch im Business Bereich immer mehr eingesetzt, da diese einige alltäglichen Dinge erleichtern können
  • Azure Cognitive Services können einen Service etwas menschlicher gestalten, da sie es den Menschen erlauben mit Services zu interagieren als wären diese ebenfalls Menschen

clip_image012

Eine kurzer Showcase von Homie ist unter https://www.youtube.com/watch?v=kZPuI3JwVww zu finden.


Skip to main content