Konfiguration für Cortana mit IPS V4

Als erstes müssen wir dem IP-Symcon Server ein wenig Basiswissen über die App beibringen 🙂

  • IP-Symcon Verwaltungskonsole starten
  • zur “Logischen Baumansicht” wechseln
  • zu “Kern Instanzen” navigieren
  • Modules öffnen
  • “hinzufügen” klicken
  • das Modulerepository “git://github.com/Seb0815/ips4Windows” hinzufügen
  • “übernehmen” klicken
  • dann im Objektbaum unter “Kern Instanzen” eine neue Instanz vom Typ “ips4WinCortana” hinzufügen
ips4
Unterhalb von ips4WinCortana“ gibt es jetzt zwei Skripte und eine Variable. „ips4WinCortanaHook“ wird bei einer Aktion von Cortana angesprochen und ist die Verarbeitung der Daten. „ips4WinCortanaSprachbefehle“ definiert die Befehle auf welche Cortana reagieren soll. Dieses Skript wird am ende einmal gestartet und schreibt dann seine Definition in die Variable „CortanaVoiceCommands“, von wo sie allen Geräten zur Verfügung steht.
Um jetzt nicht jeden einzelnen Befehl mit allen möglichen Füllwörtern schreiben zu müssen, gibt es eine „Metasprache“
Bsp: „Schalte das Licht im Wohnzimmer an“
Wenn man jetzt diesen Befehl für mehrere Räume haben möchte, müsste man eigentlich folgendes definieren:
Schalte das Licht im Wohnzimmer an
Schalte das Licht im Wohnzimmer aus
Schalte das Licht auf der Terrasse an
Schalte das Licht auf der Terrasse aus

In der Metasprache würde man jetzt folgendes definieren:
{action} [das] {actor}  [im] {room} {status}
Für {action} legt man dann „schalten, ändern, dimmen, …“ fest
Für {actor} legt man dann „Licht, Heizung, ….“ fest
Für {room} legt man dann „Wohnzimmer, Bad, Terrasse, ..“ fest
Für {status} legt man dann „an, aus, 10-100%, …“ fest

Vorteil dieser Methode, man bekommt später wenn Cortana eine Aktion für die App erkannt hat, alle diese Informationen von Cortana auch zurück geliefert und nicht nur den erkannten Satz – was die Auswertung deutlich erleichtert.

Besonderheiten Metasprache:

  • Alle definierten Elemente bekommt man bei einem erkannten Kommando im ips4WinCortanaHook“ später bei der Bearbeitung übergeben
  • Man kann Sätze für Cortana in Abschnitte packen (Commands)
    • Max. 100 Commands mit jeweils 10 Sätzen
    • Jeder Command hat ein Example (Beispiel für die Cortana Übersicht „Was kann ich sagen“) und Feedback (Rückmeldung von Cortana während der Befehl ausgeführt wird) Eintrag
      – Je Command sind max. 10 PhraseList Definitionen (Bsp. {room} {actor}..) vorhanden sein
      – Es können max. 2000 PharseList Einträge vorhanden sein
Damit die App mit all diesen Informationen etwas anfangen kann,
muss nach der Definition des Sprachfiles das Skript einmal ausgeführt werden.
Dabei werden alle Inhalte kodiert und in die Variable  „CortanaVoiceCommands“ geschrieben. Nach jeder Änderung der Sprachdefinition, muss das Skript einmal gestartet werden! Falls man die Pushbenachrichtigung aktiviert hat, bekommt jedes Gerät (unterhalb „Kern Instanzen – ips4WinDeviceRegistration“) eine automatische Nachricht zur Abholung und Verarbeitung der neuen Daten Sprachdaten.
Hier das Beispiel einer  Sprachdefinition:
ips5
ips6
Es ist natürlich auch möglich die Erstellung zu automatisieren z.B.:

$action =array(„öffne“,“schliesse“,“aktiviere“,“starte“,“ein“,“aus“,“an“,“ab“);
foreach ($action as $keyword) {
$ips4WinCortana->AddActionPhraseCommand(„action“,$keyword);
}

Um jetzt zu testen wie das mit Cortana funktioniert, muss im nächsten Schritt die App konfiguriert werden. Dazu in der App in den Einstellungen in den Reiter “Interaktionen” wechseln und “Cortana verwenden” aktivieren.

settings9

Standardmäßig springt Cortana später auf das Wort „Homecontrol“ oder „ips4Windows“ an, wobei der Name der App am Anfang oder am Ende eines Befehls stehen kann. Z.B. „ips4Windows schalte das Licht im Wohnzimmer an“ oder „schalte das Licht im Wohnzimmer an ips4Windows“. Über den Schalter eigener „App Name“ ist es möglich, den Rufname der App zu ändern. Ein Druck auf „Sprachbefehle einlesen“ sollte dann als Ergebnis die Anzahl gefundenen „Commands“ zurückliefen (in meinem Beispiel 2 – TempFragen und Block1).

Zum testen startet man jetzt Cortana und fragt als ersten, „Was kann ich sagen?“

Cortana.PNG

In der Liste erscheint meine App jetzt unter dem Wort „Haus“ (meinem „eigenen App Namen“), damit hat die Registrierung bei Cortana funktioniert. Ein Klick auf Haus in der Liste von Cortana, zeigt mir jetzt die in meiner Sprachdefinition angegebenen Beispiele.

Der nächste Test ist dann eine komplette Frage „Wieviel Grad haben wir im Wohnzimmer Haus?“, welche Cortana jetzt erkannt hat und an den IP-Symcon Server übergibt. Dort kümmert sich das Skript „ips4WinCortanaHook“ um die Verarbeitung. Hat man dort bisher nicht verändert, so findet man nach dem Absetzen im Log von IPS jetzt folgende Zeile:

ips7

hier findet man jetzt die definierten Elemente wieder. Solle der Befehl nicht bei IPS ankommen und statt dessen eine Suche bei Bing/Google gestartet werden, wurde der Befehl nicht als Bestandteil der App erkannt.

Als nächsten Schritt passen wir „ips4WinCortanaHook“ an.
In diesem Script findet die Verarbeitung der erkannten Kommandos statt. Anstelle jeden Satz einzeln abzufragen, würde ich auf die Elemente der Metasprach zurückgreifen.
ips8
ips9
Wichtig: Cortana wartet auf ein Ergebnis der Aktion!
Deswegen muss das Script am Ende einen speziell formatieren String zurück liefern.
ips10
Es gibt vier mögliche Antworten, welche zurück geliefert werden können:
  1. „SendFeedbackSuccess($Msg)“ -Es wird die Antwort ($Msg) vorgelesen und Cortana beendet sich wieder
  2. „SendFeedbackFailure($Msg)“  – Es wird die Antwort (Msg) vorgelesen und Cortana bricht die Kommunikation ab
  3. „SendFeedbackVerify($Msg)“ – Es wird ein Ja/Nein Dialog angezeigt und Antwort($Msg) vorgelesen, das Ergebnis der Abfrage wird als Feedback Variable an den Webhook zurück geliefert
  4. „SendFeedbackVerifyDetailed($Msg, ListofOptions as array)“ – Liest die Antwort ($Msg) vor und zeigt die Elemente aus dem Array zur Auswahl an. Das Ergebnis der Abfrage wird als Feedback Variable an den Webhook zurück geliefert. Es können max. 10 Elemente im Array sein.

 

 

Hinterlasse einen Kommentar