SeiteBallon84 hat geschrieben: ↑So 3. Sep 2017, 09:59
Also ich finde den Vorschlag sehr interessant. Meinst du in der AWS Console einen Custom Skin kreieren?
Du kannst das mit AWS machen oder auch anders. In AWS musst Du Dir halt selber Funktionen schreiben, die die APIs abrufen wie Google Kalender oder Wetter vom DWD, Yahoo, Wunderground was immer man bevorzugt. Dann lässt Du diese Daten zurückgeben. Das starten der Playlist erfolgt durch einen Curl Aufruf an die Amazon Seite, dazu müssen allerdings Parameter wie DeviceSerialNumber usw. hinterlegt werden und der Cookie.
Deutlich einfacher geht das Ganze wenn man nicht selber Funktionen schreiben muss um die APIs auszulesen, sondern auf die Werte die Alexa zurückgeben soll, sowieso schon Zugriff hat, weil die Datenpunkte schon in einer Hausautomation vorhanden sind. Ich selber löse das über IP-Symcon. Die Wetterdaten hole ich vom DWD und
Wunderground. damit sind alle Daten, die für den Wetterbericht benötigt werden (Temperatur, Luftfeuchte usw.), schon in Variablen vorhanden. Diese müssen dann nur noch von Alexa angesagt werden. Die Kalender Daten hole ich vom Google Kalender diese sind in dem einfachen Beispiel jetzt aber ausgenommen. Das vorgehen ist das Gleiche, die Datenpunkte die man vorgelesen haben will werden dann eingebunden. Der Aufruf der Playlist mache ich mit
Amazon Echo Remote Control.
Für den Custom Skill nutzte ich das
Patami Alexa Skill Framework dann braucht man nur wenige Zeilen Code um das gewünschte zu erreichen.
Im Developerportal also einen Custom Skilll anlegen, das Interaktion Modell ist in dem Fall ja kurz und knapp, es soll ja nur ein Launchintent ausgeführt werden. Also reicht so was wie
Code: Alles auswählen
{
"intents": [
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": []
},
{
"name": "AMAZON.StopIntent",
"samples": []
},
{
"name": "Morning",
"samples": [
"was gibt es Neues"
],
"slots": []
}
]
}
Dann an den Endpoint weitereichen, ob das jetzt AWS ist oder ein Server der per HTTPS erreichbar ist, ist dann einem selber überlassen. In meinem Fall ist es nicht AWS sondern der Rechner auf dem dann auch der Custom Skill weiter verarbeitet wird und von dem die Datenpunkte ausgelesen und die Playlist auf dem Echo gestartet wird. Im Fall des Patami Frameworks reicht es aus einen Custom Skill Intent anzulegen mit dem Namen der im Interaction Modell festgelegt worden ist, in dem Beispiel Morning.
Jetzt brauchst man noch ein Skript was die Antwort für Alexa erzeugt, das sieht als exemplarisches Beispiel so aus:
Code: Alles auswählen
<?
function Execute(Request $request)
{
$name = "Schlafmütze";
$hour = date("G");
$minute = intval(date("i"));
$temperature = GetValue(24112 /*[Info\Wetter\WundergroundWetter\Temperatur]*/);
$humidity = GetValue(41536 /*[Info\Wetter\WundergroundWetter\Luftfeuchtigkeit]*/);
StartPlaylist();
$text = sprintf('Guten Morgen %s. Es ist %s Uhr und %s Minuten. Es sind gerade %s Grad bei einer Luftfeuchtigkeit von %s Prozent.', $name, $hour, $minute, $temperature, $humidity);
return TellResponse::CreatePlainText($text);
}
function StartPlaylist()
{
IPS_RunScript(21048 /*[Geräte\Amazon Echo Alexa\Alexa Guten Morgen\Morning\Start Playlist]*/);
}
In dem simplen Beispiel werden also erst mal die Datenpunkte ausgelesen die man übergeben will wie Temperatur, Luftfeuchte usw.. Das ganze kann man beliebig komplex machen, bis einem Alexa die gesamten Wetterdaten ansagt. Man kann sich hier natürlich auch noch ganz andere Sachen ansagen lassen wie einen RSS Feed vorlesen wie Nachrichten, Kinoprogrammm usw.
Kurz bevor die Antwort an Alexa gegeben wird, wird ein weiteres Skript aufgerufen, dies startet dann mit zeitlicher Verzögerung die Wiedergabe der Playlist auf dem Echo. So stellt man sich dann also das zusammen was man will.
Aufrufen würde man das dann mit dem Invocation Name z.B.
Alexa starte Guten Morgen.
Das ist das Skript was aufgerufen wird und dann die Playlist startet.
Code: Alles auswählen
IPS_Sleep(10000);
$trackid = "abcde0e8-f396-4821-b9cd-750548c7a2c5";
EchoRemote_ImportedMusic(21617 /*[Geräte\Amazon Echo Alexa\Amazon Steuerung\Bad Dot]*/, $trackid);