Amazon Echo an Symcon anbinden inklusive Proxy

Hallo Forum,
nach viel Gewürge hab ich nun meinen Amazon Echo an IP Symcon angebunden, sowie einen Proxy erstellt, damit man auf ein SSL Zertifikat verzichten kann.

Ich dachte, ich schreib mal aus dem Gedächtnis zusammen, wie das geht, und hänge die Sourcen an. Warnung - das ist sicher quick und dirty, und Programmierer bin ich auch nicht, d.h. das ganze ist aus Stücken, welche ich im Internet fand, zusammengebaut und auf Symcon modifiziert.

Das ganze basiert auf einem Custom Skill, die Variante Home Automation Skill überlasse ich Paresy. Wenn Ihr Euch erstmal das Prinzip ansehen wollt, schaut in das credits file (mein Dank für die Vorarbeiter!) und dort in die Vorgehensweisen.

Anleitung:

0. Amazon Echo / Dot / Tap organisieren
(hab ich beim letzten US trip mitgebracht).
Ihr braucht einen US account. Einfach mit (existierender) Dummy Addresse in USA anlegen. Wenn alles geht, wieder auf Euren deutschen Account umstellen. Klappt (mit einigen Einschränkungen, z.B. Prime geht bei mir nicht).
Untenstehendes ZIP file irgendwo auf Eurem PC auspacken - auf die files wird dann im Text verwiesen.
amazon echo symcon.zip (7.99 KB)

Edit: Halleluja, kommt auch in DE raus. Damit braucht man natürlich keinen US Account mehr und Prime Musik sollte dann auch funktionieren. Die Anleitung funktioniert dennoch weiterhin.

1. Account auf developer.amazon.com

[ul]
[li]Custom Skill anlegen[/li][li]Passenden Invocation name aussuchen, z.B. greenhouse. Euer Echo reagiert dann auf „Alexa, ask greenhouse …“[/li][li]Inhalt von intent.txt ins Intent Schema [/li][li]Inhalt von utterance.txt in das Feld Sample Utterances[/li][/ul]
Spätestens hier fällt auf, Amazon Echo wird nur als Spracherkennung genutzt, die ganze Logik passiert später unter Symcon in php.

Edit: Nun geht das auch auf deutsch. Intent und utterance ganz genau wie oben, unverändert, nur die invocation phrase natürlich dann in deutsch anlegen und in den deutschen Tab, der nun vorhanden ist, eintragen.

[ul]
[li]Unter Step Configuration könntet ihr nun:[/li][/ul]

Direct den https link zu Eurem Symcon Server eintragen, sofern a) der Server mit SSL läuft und bei einer Zertifizierungsorganisation zertifiziert ist. Mann muss also keineswegs auf AWS Lambda zurückgreifen, wie die Amazon Anleitungen suggerieren, das ist nur eine Option.
Wenn ihr nun kein SSL Zertifikat habt:
Davon, symcon mit SSL zu zertifizieren hab ich erstmal Abstand genommen, da dies doch recht aufwändig ist. Anstelle dessen habe ich einen Proxy bei Azure angelegt, d.h. ihr müsst dann hier unter Configuration (später) den Proxy link eingeben, der Anfragen auf Euren internen Symcon Server umlenkt. Dazu muss der natürlich über DynDNS im Web erreichbar sein.

Edit: Paresy’s Vorschlag von unten aufgreifend - man kann auch den Symcon Connect Link nehmen. Dazu muß der Connect Dienst in Symcon aktiviert sein. Dann den zugehörigen Link nehmen und um …/hook/<name eures webhooks> ergänzen und wie oben beschrieben unter Configuration eintragen.

Edit: Solltet Ihr zwei Sprachen unterstützen (Englisch/Deutsch) noch unter „Configuration“ beide Endpunkte (North America/Europe) anklicken und mit links auf entweder den Proxy oder Euren Symcon Connect Link versehen. Sonst gibt es beim Testen in der Sprache des jeweils nicht angewählten Endpunkts eine kryptische Fehlermeldung).

[ul]
[li]Unter SSL Certificate:[/li][/ul]
anklicken von:
My development endpoint is a subdomain of a domain that has a wildcard certificate from a certificate authority
Das passt deswegen, da ja der Azure Web service SSL zertifiziert ist. Damit ist Amazon Echo dann glücklich, und der redirect spart Euch den SSL Zertifizierungsumstand.

Edit: Genauso geht es mit dem Symcon Connect link.

[ul]
[li]dann erstmal save. Am besten das Fenster weiter offenhalten, das braucht ihr nochmal weiter unten.[/li][/ul]

Edit: Ich glaube (bin mir nicht sicher), man braucht nun für die deutsche Variante noch einen Eintrag un

[ul]
[li]Unter Step Publishing[/ul][/li]unter Countries & Regions. Ich hab dort alle ausgewählt und in die übrigen Felder was halbwegs sinnvolles eingetragen. Eine Zertifizierung hab ich nicht ausgewählt, da nicht sinnvoll (der Skill ist ja nur für Euch). Diese war zumindest zum Zeitpunkt der Erstellung auch gar nicht anwählbar (15.09.2016).

2. Optionalen Proxy anlegen (kann man sich mit der Symcon Connect Variante sparen)

  • Kann man in AWS Lambda oder Azure machen. Ich habs in Azure gemacht (siehe 2.-ter link im credits file). Dazu:[/li][li]In Azure Account anlegen[/li][li]Kostenlosen Testaccount verwenden (läuft erstmal einen Monat). Danach sinds vermutlich auch nur kleine Pfennigbeträge, weiss ich selbst noch nicht was das kostet. [/li][li]Unter App Services auf hinzufügen klicken - Namen vergeben, irgendeine Ressourcengruppe vergeben, an Dashboard anheften, erstellen. Dauert ne Minute, dann habt ihr Euren proxy server. [/li][li]Dem muss man dann noch beibringen, bei Aufruf auf Euer Symcon umzulenken.[/li][li]Dazu auf Step Übersicht gehen, oben stehen alle links, die man so braucht.
    [li]Von dort Link URL kopieren, tragen wir nun (als https !) in den Tab Configuration bei developer.amazon.com ein. [/li]Achtung - hängt dort noch ein /hook/<irgend ein name für einen webhook> dran, z.B. https://hausproxy.azurewebsites.net/hook/hausecho. Das auswertende php file realisieren wir nämlich später in sycmon als webhook.
    [li]Unter Tab Anmeldeinformationen für Bereitstellung legt ihr nun noch ein FTP passwort an.[/li][li]Nun braucht ihr einen FTP client (Filezilla) auf eurem PC. Nutzt ftp hostname, bereitstellungs ftp benutzername und das neu angelegte passwort, um von Filezille auf Azure zuzugreifen.[/li][li]Navigiert in folder ‚site‘ und ladet dort file applicationHost.xdt hoch (im Verzeichnis Azure_proxy)[/li][li]Nun müsst ihr noch file web.config an Eure Situation anpassen - dazu sucht nach your.dyndns.domain:your_port und setzt dort Euren DynDNS Name für Euren Symcon Server ein. [/li][li]Anschliessend auf Azure ins Verzeichniss wwwroot gehen und dort web.config hochladen.[/li][li]Nun habt ihr Euren Proxy. Wenn ihr absolut keine Ahnung habt, was das war - googled ARR für IIS. [/li]Ach ja, da ist noch jede Menge Zeug in dem web.config, was man gar nicht braucht. War aber zu faul, das zu löschen - stört nicht weiter.

Kurz zum Verständnis: Wenn Ihr Eure Alexa anlabert, schickt die das zu dem Amazon Echo Service. Der dekodiert die Sprache in Text und schickt das an den Proxy. Der ist schön mit zertifiziertem SSL versehen (ist ja Microsoft Azure), eine Voraussetzung für den Amazon Service. Der macht jetzt ein Redirect auf Euren Symcon Server und ruft dort einen Webhook auf, den wir gleich anlegen.

3. Symcon einrichten

[ul]
[li]Legt Euch eine Kategorie an, z.B. AmazonEcho[/li][li]Kopiert files index, functions und lights.php dort als Scripte rein. Nennt die in Symcon auch so (umbenennen der automatisch vergebenen Skriptnamen). Oder alternativ ändert die ‚includes‘ im PHP index für diese files.[/li][li]Legt einen Webhook an auf index.php mit dem Namen, welchen Ihr oben in dem Amazon Echo Configuration Tab als Anhang an die Proxy Domain vergeben habt. [/li][li]Ach ja, mein symcon web server läuft mit SSL, ist aber nicht zertifiziert. Also die Variante, die im Browser erstmal hässliche Warnungen fabriziert, die man absegnen muß. Ich erwähn das mal, da ich die Translation in obigen ARR files nicht wirklich verstehe, und das eben genau so bei mir funktioniert. Müsste aber auch ohne SSL gehen. [/li][li]Das File index php ruft module auf (momentan nur eins bei mir, lights.php). Passt dort in ligths.php die Aufrufe Eurer Devices an, und auch die Auswertung der Texte.[/li][li]Edit:Für ein Quentchen mehr Sicherheit könnt ihr ggfs. die auskommentierten Checks in der index.php wieder aktivieren. Dazu application und userid per IPS_LogMessage testweise rausschreiben in die IPS Meldungen und dann ganz oben in index.php einfügen.Die Zertifiierungsabfragen gehen aber nicht, wenn ihr den Connect Service nutzt, da diese vom Connect Service nicht mitgegeben werden. Also diese nicht auskommentieren. [/li][li]Edit: Solltet ihr bi-lingual arbeiten wollen, dann könntet ihr auch die locale auswerten. Ggfs. müsste dann noch der Response entsprechend aufgebohrt werden. [/li][/ul]

Was mir bei dem Ansatz gefiel, war die Möglichkeit, die Auswertung in php zu machen. Im Grund wird nur nach Schlüsselworten gesucht. Ihr könnt soviel drumrumquatschen, wie ihr wollt.
Z.B. führen bei mir „Alexa, ask <euer invocation name> switch north“ genauso zum Umschalten der nördlichen Wohnzimmerlampe, als wenn ich sagte: „Alexa, ask <euer invocation name> switch lamps in living room north.“
Man muß lediglich darauf achten, dass die Schlüsselworte nicht zweideutig werden.

Edit: Die scripts sind genauso auch für die deutsche Variante verwendbar. Einfach den Text in deutsch ändern und die Schlüsselworte auf deutsch hinterlegen und ein wenig anpassen. Ich hab mir dazu einfach die englischen Scripte kopiert, umbenannt (lights.php --> licht.php), ein „require“ darauf ergänzen, und dann geht das sogar bi-lingual.

Noch ein Wort zu dem index.php - man erkennt, dass der clevere Programmierer (nicht ich) dort auch schon Sicherheitscode lt. Anweisung der Amazon Developer Documentation hinterlegt hat. Das braucht man, wenn man sich den code von Amazon für ein Publishing zertifizieren lassen will. Den hab ich für meine Zwecke erstmal rauskommentiert.

So, war doch ganz einfach, oder? Vermutlich hab ich Details vergessen niederzuschreiben - fragt ggfs., dann antworte ich so gut ich es weiss und ändere das hier.

PS: Als Tip: Erstmal einen testhook erstellen, der vielleicht nur ein echo „hallo world“ enthält, und schauen, ob die proxy redirection als url in einem Browser funktioniert. Ansonsten ist das debugging schwierig.

So, traut Euch - das Teil ist geil.

Viele Grüsse
Axel

In ein paar Tage auch in Deutschland erhähllich !
Habe gerade von Amazon eine Einladung erhalten… Auch ein ECHO Dot Gen 2 wird vorgestellt…

Ich werde es beobachten…wenn es gut mit IPS funktioniert hätte ich lust…

Super, wird auch Zeit.

Die Spracherkennung ist erstaunlich gut. Bei mir natürlich noch in Englisch. Man kann damit prima fernsteuern. Inzwischen bei mir Licht und Jalousien. Das lässt sich nach obigem Schema leicht erweitern.

Eine Einschränkung: Unser Wohnzimmer ist recht gross, und hallt ein wenig. Das mag sie nicht immer. In gedämpfteren Räümen mit mehr Teppich ist die Erkennung echt erstaunlich gut.

Was ich mich frage, ob es einen Unterschied machen mag, die utterances explizit auszupermutieren. Das sollte die Freiheitsgrade bei der Spracherkennung ja so einschränken, dass diese noch besser sein können sollte. Bei der Variante oben wird Sprache ja frei erkannt, mal von den Triggerbegriffen abgesehen, ist aber auch schon prima.

Wie auch immer, hab mir grad auch eine Einladung angefordert. Der Tap wäre ja fast noch besser, da dieser aktiv Bluetooth rausschicken kann, z.B. über einen Bluetoothadapter an die Stereoanlage. Das kann der Echo nicht, der empfängt nur Bluetoothmusik, wenn man das will.

Grüße

Kleiner Tipp wegen SSL: Wenn ihr den Symcon Connect Dienst bei euch aktiviert, bekommt ihr SSL quasi frei Haus :slight_smile:

paresy

Wo liegt den der unterschied zwischen dem DOT und dem Echo? Weil für die Haussteuerung müsste der DOT ausreichen oder? Dann könnten man ihn auch in 2-3 Räumen verteilen und hätte so überall sprachsteuerung…oder was kann der kleine weniger?

Korrekt ! Der kleine ist in meinen Augen ein ganz großer :wink:
Ihm fehlt lediglich der Lautsprecher mit BUMS :wink:
In dem Teil ist nur ein kleiner Lautsprecher eingebaut ABER man kann ihn z.B. an einem Sonos Play 5 etc. anschlißen.

Die Telekom hat gerade verkündet, daß ihr SmartHome System (Qivicon) Amazons Echo von Anfang an unterstützt.

Hallo Paresy,

könntest Du Dir bei der Rechtslage eine „offizielle“ Unterstützung bzw. Einbindung ins IPS vorstellen?

Joachim

Wäre super !! Vor allem da die Rechtslage um einiges angenehmer geworden ist, da sich die Telekom mit Amazon zusammengesetzt hat und Amazon Echo Anfragen ausschließlich über EU bzw Deutsche Server laufen.

Servus

Für die PHP Auswertung des erkannten Textes sieh dir mal an was sebiman für WindowsPhone gebaut hat:
Vorstellung Windows App - oder endlich eine Frau die macht was ich sage :slight_smile:
Ich finde das ist cool gelöst und funktioniert sehr gut. Damit kann man sogar richtig schöne Dialoge erstellen welche in der Wortwahl selbst aber flexibel sind. d.h. man kann sehr natürliche Sprache verwenden.

Gewöhnen kann ich mich an Spracheingabe aber (noch) nicht. Sehe das eher als nette Spielerei, fürn Alltag ist es aber noch sehr befremdlich.

gruß
bb

Hallo Axel,

vielen Dank erst mal für deine gute Beschreibung zur Einrichtung von Alexa, wirklich super gemacht. Auch wenn wir in Deutschland auf die offizielle Version des Echo noch etwas warten müssen, hört sich das ganze Thema für mich sehr vielversprechend an.

Ich habe natürlich gleich mal deine Version umgesetzt. Die Verbindung zu IPS klappt wunderbar. Wenn man schon SSL hat ist das ganze bei Amazon in wenigen Minuten eingerichtet. Genial finde ich, das man die ganze Logik der Steuerung in IPS relativ einfach bauen kann und den gesprochenen Satz in IPS auswertet. Damit spart man sich das ganze Amazon Lamda gedönz, wo ich noch nicht durchgestiegen bin.

Mal sehn ob ich über die Einladung so ein teil bekomme. Testen kann man schon mal damit… https://echosim.io/.

Bisher habe ich bereits die Cortana mit dem Modul von Sebiman wie Bernhard geschrieben hat im Einsatz. Auch das funktioniert wunderbar, auf Cortana Seite ist die Logik etwas anders, dort bekommt man vordefinierte Begriffe geliefert, deshalb muß alles etwas umgebaut werden und ist ggf. nicht direkt kompatibel.

Ich bin sehr gespannt wie die Alexa die Befehle innerhalb eines Zimmers (z.B. vom Sofa aus) erkennt. Das ist für mich entscheidend, um der Sprachsteuerung zum Durchbruch zu verhelfen.
Machbar scheint mir damit dann alles zu sein, auch wenn man das Risiko eingeht im Wohnzimmer belauscht zu werden ;-). Aber ohne Risiko kein Spaß…

In diesem Sinne dann allen viel Spaß beim testen und tüfteln
Helmut

Hallo,
hab mal eben Paresy’s Vorschlag mit dem Symcon Connect Dienst ausprobiert, funktioniert einwandfrei. Ich trag das mal oben nach, damit spart man sich die reverse proxy Geschichte.

Ich hab auch grad mal ausprobiert, ob die deutsche Erkennung funktioniert, und ja, ist alles schon auf der developer Seite vorhanden. Im Testmodus klappt das auch schon hervorragend. Auch die Wiedergabe von deutschem Text ist einwandfrei. Nur in echt (an einem Echo Gerät) geht es grad noch nicht (Stand 15.09.2016) vermutlich ist das noch nicht möglich oder ich mache etwas falsch. Die App ist ja auch noch nicht auf German erweitert.

helhau, die Spracherkennung ist wirklich gut, auch auf mehrere Meter und bei Musikwiedergabe. Etwas schwieriger wird’s bei Störgeräuschen, z.B. Fernseher läuft. Trainingsrunden via App machen auch einen deutlichen Unterschied.

bbernhard, hab mir mal die php Variante von sebiman angeschaut, da brauch ich allerdings noch etwas zum durchsteigen. Das ist ein anderes Kaliber von PHP als das oben. An meiner (abgeschauten) Lösung gefällt mir die Simplizität - das ist so einfach, dass auch Anfänger wie ich das verstehen.

Grüsse

Wenn Qivicon und die Telekom schon nen Skill bereitstellen, dann doch auch IPS oder nicht ^^

BITTE LIEBES NETTES FLEISSIGES IPS TEAM… INTEGRIEREN bzw offiziellen Skill anbieten :smiley: :loveips: :smiley: nicht verschlafen !

EDIT:
@axelroro - super info ! Danke. hatte ich jetzt erst gelesen. Aber wäre trotzdem ein Gimmick wenn IPS das tief integriert oder es ein richtiges Modul geben würde.

Kann Echo auch auf lokale Webserver im eigenen LAN zugreifen ohne den Umweg übers Internet?

Ich bin kein Freund davon, Hausautomation in irgendeiner Form über das Internet zur Verfügung zu stellen (Ausnahme VPN).

Dass die Spracherkennung über das Internet läuft, ist klar. Aber kann als Resultat der Spracherkennung ein lokaler Webserver wie IPS aufgerufen werden, ohne dass dieser aus dem Internet erreichbar sein muss?

@thezepter - gerne und ja, stimme zu, wäre toll, wenn Zugriff mit Hilfe eines Moduls als smart home skill möglich wäre. Ich hab das leise Gefühl, das wird nicht allzul lange dauern :-). Die API des Smart Home ist relativ begrenzt, ich glaub, schalten, Temperatur und Prozentwerte - aber das deckt schon 90% ab.

@slummi - ja, genau das, siehe meine Beschreibung oben. Die Spracherkennung findet im Internet statt. Den erkannten Text verpackt der Alexa Web Service in ein sogenanntes JSON Konstrukt. Wie das aussieht, kann man sich sehr schön under dem Test Tab in developer.amazon.com anschauen. Dieses wird nun an den Webserver von IP-Symcon weitergegeben mit Hilfe eines webhooks (siehe symcon Doku, sofern nicht bereits bekannt).

Wenn man die Amazon Doku zu Alexa liest, bekommt man den Eindruck, man müsse die Interpretation mit AWS Lambda (ein Cloud-Webservice von Amazon) ausführen lassen. Muß man aber nicht - jeder SSL geschützte, private Webserver tut es auch. D.h. die Kommunikation selbst läuft schon über das Internet (wie auch sonst), aber verschlüsselt. Wenn Du kein SSL Zertifikat hat, kann man Paresy’s Variante von weiter oben nutzen. Die Kommunikation ist dann eben auch SSL geschützt, d.h. selbst der erkannte Text wird sicher weitergegeben.

Alle Heimautomatisierungslogik findet also privat statt, davon kriegt Amazon nichts mit (mal abgesehen von irgendwelchen Antworttexten, die man das Alexa-Gerät sagen lassen möchte).

Grüsse
Axel

Alles soweit eingerichtet: hook / developer etc.
Dank der tollen Anleitung.
Jetzt fehlt mir nur noch die Hardware :-))))

… btw: Wäre natürlich SUUUUPER, wenn paresy und co mal an einer Integration versuchen und das in den Standard aufgenommen wird, scheint mir nicht allzu kompliziert zu sein, wenn doch vermutlich etwas tricky, da ja der Skill quasi über einen zentralen IPS Server kommunizieren müsste um dann wiederum mit den lokalen instanzen … mal sehen

Da bietet es sich dann vielleicht an, den Connect Service um eine Funktion Amazon Echo zu erweitern, da dieser ja eh tunnelt. Dann ist es vermutlich nicht allzu kompliziert, die verschiedenen Methoden durchzureichen an irgendein weiteres Modul.

Hallo Alexa Fans,

ist es eigentlich auch möglich den Echo zum reden zu bringen, ohne das vorher ein Befehl per Sprache ausgelöst wird?

Also sozusagen eine Sprachnachricht von IPS über den Echo Lautsprecher ausgeben… ??

Grüße Helmut

@Helmut:

Anscheinend nein:
trigger_alexa_to_say_something/

VG
Michael

Richtig, als Schutz vor allzu geschätzigen Services ist das wohl im Moment nicht möglich, aber …

Gerüchteweise soll es vielleicht noch diesen Herbst möglich werden:
http://www.digitaltrends.com/home/amazon-alexa-push-notifications-fall-voice-activated/

Wäre natürlich noch ein Grund mehr sich einen zu holen. :cool: