Amazon Alexa Echo Dot als Internet Radio für beliebigen Stream URLs Livestreams
Direkt aktivieren und ausprobieren
Schnittstelle für die Kommunikation mit HTTP Webservern: ESP8266, ESP32, Raspberry Pi, Arduino mit Ethernet Modul, PHP-Skript, WebSocket-Server.
Das ist eine Alternative zum Webhook von kostenpflichtigen IFTTT

Grundfunktion: Nach dem Aufruf des Skill fragt Alexa „ich höre zu“. Sie sagen einen beliebigen Satz. Dieses Satz wird dann als GET-Parameter an, von Ihnen abgelegte URL, gesendet.
Der Ziel Server (Ihre Anwendung) analysiert die Wörter in dem gesprochenen Satz, macht Schaltvorgänge oder Messungen und antwortet mit einem Text, der dann von Alexa vorgelesen wird. Auf diese Weise können Befehle zu Ihrem Web Server transportiert werden und Antworten angesagt werden.

So funktioniert es: Besuchen Sie die Webseite https://esp8266-server.de/alexa/webhook/
Legen Sie die Trigger Wörter und Webadressen ihres Servers oder PHP-Skripts an. (Ihre Daten werden nur für Sie zugänglich.)

ESP8266 Steuern mit Alexa Skill. Auch als Sensor nutzbar.


Bedienung

Trigger Wort: „Nachtlicht“
URL: „http://sg0f3t4jpcdrhntk1kf.myfritz.net:81/schalte.php?password=14631574&text="

Sie sagen "Alexa meine Steuerzentrale"
Alexa antwortet "ich höre zu"
Sie sagen "Nachtlicht 60%"

Dabei wird auf die Adresse http://sg0f3t4jpcdhntk1kf.myfritz.net:81/schalte.php die GET-Variablen übergeben: „password“ mit dem Inhalt "14631574" und "text" mit dem Inhalt „Nachtlicht 60%“.

Die Trigger Wörter bilden eine Weiche die zwischen mehreren URLs und damit zwischen Ihren Geräten umschaltet.

Wenn Sie nur einen einzigen Server benutzen, lassen Sie das Eingabefeld "Trigger Wort" frei. Dann werden alle Anfragen an diese Adresse gesendet.

Sie können auch die URL eines beliebigen Dokuments im WWW ohne Parameter angeben. Deren Textinhalt wird dann auch vorgelesen. Der Text muss Codierung UTF-8 haben.

Aktivierungswort ändern: Der Skill ist so konzipiert, dass Sie durch die Verwendung von Routinen-Funktion der Alexa Apps, das Aktivierungswort ersetzen durch eigene Phrase können. Richten Sie eine Routine für Webhook Skill unter Menü Routinen im Alexa App.

Ihre ESP8266 oder ESP32 müssen vom Internet erreichbar sein. Das heißt Portweiterleitung im Router einrichten und DynDNS (eventuell von der Fritzbox) nutzen. Sie können durch ein Domen mehrere ESP8266 / ESP32 Geräte zuhause erreichen in dem Sie die Geräte über verschiedene Ports ansprechen. Obwohl Ihr Echo Gerät im lokalen Netz angemeldet ist, befindet sich der Skill samt Datenbank im WWW, von dort gehen auch die Anfragen an Ihren Server.

Vorlesen einer Textdatei

Tragt Alexa Webhook :

Triggerwort: "kurzgeschichte"
URL: https://esp8266-server.de/alexa/webhook/kurzgeschichte.txt

"Alexa meine steuerzentrale" => "ich höre zu" => "erzähle eine Kurzgeschichte".

Die Textdatei hat keine HTML-Tags und ist UTF-8 kodiert.

Kleines PHP Skript zum Testen, was Alexa verstanden hat

Empfangene Text wird einfach als Text zurückgegeben und vorgelesen.
https://esp8266-server.de/alexa/webhook/webhookEcho.php?text=hallo welt
Tragen Sie die URL "https://esp8266-server.de/alexa/webhook/webhookEcho.php?text=" beim Alexa Webhook.
Hier der Inhalt der webhookEcho.php –Datei:
<?php 
if (array_key_exists('text', $_GET)) echo $_GET['text'];
?>

Wenn GET-Parametr mit Namen "text" empfange, dann den Wert des GET-Parametrs "text" ausgeben.

Kommunikation vom ESP8266 initiieren

Mit einem zusätzlichem Skill ist es möglich das ESP8266 die Interaktion startet. Das heißt: Alexa kann unaufgefordert etwas ansagen oder vorlesen. Die Aufgabe besteht darin, das "Alexa Webhook" skill nicht durch den Benutzer zu starten, sondern über eine API.

Dieses ist möglich durch Benutzung von Alexa Routinen und eines virtuellen Triggers.

"Webhook Routine Trigger" skill ist ein Smart Home Skill der virtuellen Türklingel erzeugt. Jede Türklingel kann als Trigger für eine Routine benutzt werden. Die Auslosung von Türklingel passiert über Aufruf einer URL.

ESP8266 muss als Klient diese API URL aufrufen.

Aktivieren Sie "Alexa Routine Trigger" skill. Erzeugen Sie eine Routine mit dem Auslöser "Trigger1" und als Ziel der Routine stellen" benutzerdefiniert"- ihren Text, mit dem sie normalerweise das Skill aufrufen.

Auf der Homepage vom "Webhook Routine Trigger" finden Sie die URL, die ihre Routine startet.

Jetzt können Sie vom Mikrocontroller über das Aktivierungslink die Routine und dadurch das Skill starten.

ESP8266 Beispiel Quellcode / Arduino Sketch

Schalten eines Relais mit Alexa Echo Gerät

"Alexa meine Steuerzentrale" => "Ich höre zu" => "Schalte das Licht ein".

Oder "Alexa sage meine Steuerzentrale das Licht ausschalten".

Das Umschalten:
"Alexa meine Steuerzentrale" => "Ich höre zu" => "Bitte Licht umschalten" => "ausgeschaltet"

if ((server.arg("text").indexOf("aus"))>=0)
in dieser Zeile wird überprüft, ob im GET-Argument "text" das Wort "aus" vorhanden ist. Die Zeichenkette "aus" kann als einzige Wort oder teil eines anderes Wortes sein.


PHP-Skript zum simulieren ESP8266 DHT22 Thermometers / Hygrometers

Hier hoch mal zum veranschaulichen der Kommunikation zwischen Amazon Alexa und dem Server.
Alexa Echo Gerät fügt nach dem "="- Zeichen die Spracheingabe des Benutzers.
Der ESP8266 / ESP32 oder Raspberry Pi -Server sucht nach bestimmten Worten und entschiedet was zu tun ist.

https://esp8266-server.de/alexa/webhook/webhooktest.php?text=wie ist die feuchtigkeit im wohnzimmer

https://esp8266-server.de/alexa/webhook/webhooktest.php?text=wie ist die temperatur im wohnzimmer

https://esp8266-server.de/alexa/webhook/webhooktest.php?text=bla bla
Bei dem Aufruf mit "bla bla" antwortet der PHP-Skript mit dem Fragezeichen am Ende. Alexa liest die Antwort und erwartet eine neue Eingabe.

Inhalt der webhooktest.php -Datei

<?php 
if (array_key_exists('text', $_GET)) 
    {
        $text = $_GET['text'];	
        if(strpos($text, 'temperatur')!==false)
        {
               echo 'Herzlich Willkommen beim Test Skript für Alexa Webhook. Du hast gerade nach Temperatur gefragt. Temperatur beträgt '. 
		(rand(150, 28)/10) .' Grad';
        }
        elseif (strpos($text, 'feuchtigkeit')!==false) 
        {
               echo 'Die Feuchtigkeit beträgt '.rand(40, 90).'%';
        }
        else
        {
               echo 'Du hast weder Temperatur noch Feuchtigkeit genannt. Was möchtest du den erfahren?';
        }
    }
?>

Nach oben