Moin zusammen,
ich bin zwar noch Neuling mit Alexa, aber habe das System schon rudimentär an Edomi angebunden.
Ich beschreibe mal kurz meinen aktuellen Stand:
Die Skills für Alexa werden auf https://developer.amazon.com definiert. Dort kann man die erkennbaren Sprachbefehle definieren.
Grundsätzlich hat man die Möglichkeit, alles selber zu definieren ("Custom Skill") oder das fertige Home Automation Skill von Amazon zu benutzen.
Die Logik kann (Custom Skill) bzw muss (Home Automation Skill) auf https://aws.amazon.com/ implementiert werden.
Custom Skill
Vorteil: Mehr Flexibilität, Möglichkeit direkt https-Requests von dort aus an eigene Server schicken (aber zb. ohne http-Client-Zertifikate)
Nachteil: Man muss alles selber definieren. Wenn ich das richtig verstanden habe muss außerdem ein weiteres "Hot-Word" wie beispielsweise "Haus" (Beispiel von ThorstenGehrig ) definieren
Fertiges Home Automation Skill:
Vorteil: Amazon hat viel vordefiniert, die wichtigsten Sachen laufen sehr flüssig und in verschiedenen Variation (Von: "Alexa, Wohnzimmer" an bis zu "Alexa, mach bitte das Licht im Wohnzimmer an")
Nachteil: Es funktioniert nur mit Amazon-Lambda zusammen, außerdem muss man noch diese einmalig nervige Authentifizierung ("OAuth") machen.
Ich habe mich für das fertige Home Automation Skill entschieden. Dazu muss man sich an zwei Amazon Seiten registrieren (developer & aws). Bei aws muss man dabei auch sofort seine Zahlugsdaten (Adresse & Kreditkarte) hinterlegen. Kostet aber nischt für unseren Zweck.
Hier ist es gut beschrieben, obwohl ich bei meiner Einrichtung dieses wiki noch nicht kannte: http://www.fhemwiki.de/wiki/Alexa-Fhem
Also, ich habe mich 2x registriert und das Home Automation Skills (developer) mit meiner Lambda-Funktion (aws) verknüpft.
Kurzer Exkurs: Was macht eine Lambda-Funktion?
Die kann bestimmt noch viel mehr, weiß ich nicht, aber in meinem Fall macht Sie genau zwei Sachen:
- Discovery
- Control
Generell bekommt die Lambda einen Input-Parameter (quasi von Alexa). In der Objektstruktur dieses Parameters steht der Befehl (Discovery oder Control) und einige andere vom Befehl abhängige Parameter. Als Antwort wird auch wieder ein Objekt zurückgegeben. Bei Discovery eine Liste von Geräten, bei Control ein "ok" oder "nicht ok".
Diese Antworten beschreibe ich kurz weiter unten.
Die beim Discovery gefunden Geräte müssen in der Alexa einmalig "importiert" werden: "Meine Geräte suchen" (Das löst auch dann den Request zur Lambda-Funktion aus)
Das Prinzip ist also bei mir:
Ich rede mit Alexa, Alexa erkennt Home-Automation-Befehl und sendet das an meine Lambda-Funktion.
Die Idee der Lambda-Funktion habe ich auch von FHEM übernommen: Die komplette Frage wird als JSON-String an meinen eigenen Webserver mit Client-Zertifikat geschickt. Client-Zertifikat bedeutet, dass nur dieser Amazon-Rechner überhaupt mit meinem Server reden darf. Dieses Client-Zertifikat ist die einzige Änderung gegenüber dem Skript von FHEM. Wie man diese Client-Zertifikate grundsätzlich erstellet, habe ich in meiner "Externer-Zugang-Fallstudie" beschrieben: https://knx-user-forum.de/forum/proj...terner-zugriff
Als Antwort bekommt der Amazon-Rechner wieder das entsprechende Objekt via JSON zurück.
Mein php-Skript, dass auf dem edomi Rechner läuft, antwortet also live auf Discovery Requests oder auf Controls (zb Licht schalten).
Außerdem kommuniziert es mit der Remote-Schnittstelle von edomi.
Das Skript liest seine "bekannten Geräte" aus einer Textdatei:
<KO1>; <Name1>
<KO2>; <Name2>
KO ist dabei direkt eine Gruppenadresse (die in Edomi natürlich explizit für Fernsteuerung/remote freigeschaltet werden muss!)
Das funktioniert jetzt soweit alles. Der Echo-Dot hat wirklich eine gute Spracherkennung. Selbst mit TV im Hintergrund noch ganz gut.
Was jetzt noch fehlt, sind Anpassungen in meinem lokalen alexa.php-Skript, damit auch andere Geräte wie Dimmer angesprochen werden können.
Das sollten aber nur kleine Modifikationen im alexa.php sein (Andere discoverte Geräte zurückgeben, ein wenig anders aus Control reagieren).
Viel Spaß beim Ausprobieren,
Steffen
Anhänge:
index.js (umbenennen!) ist meine Lambda-Funktion. Diese muss im ZIP mit client.crt und client.key hochgeladen werden, falls man die Client-Zertifikate benutzen will)
alexa.php (umbenennen!) liegt lokal auf dem Edomi-Rechner bei mir wird durch Amazon aufgerufen. Dieses Skript ruft edomi-remote auf und liest meine Konfiguration aus.
config.txt: Meine Konfiguration. KOs aus den Gruppenadressen von Edomi raussuchen und für Fernzugriff freischalten
Als "PS:" gibt es hier noch zur Erklärung kleine Beispiele für die Kommunikation Alexa->Lambda->´mein alexa.php Skript (das Lambda leitet eigtl nur weiter, muss aber zwingend für home-automation-skill benutzt werden)
Bei Klick auf "Meine Geräte suchen" in Amazon App gibt es discovery-Request:
Meine Antwort für Küche und Schlafzimmer. Mehr hab ich aktuell nicht, kann aber fix in der config.txt hinzugefügt werden. Im Device-Namen verstecke ich die KO-ID:
Schaltbefehle bzw allgemeine Steuerungsbefehle. Im Beispiel für device00524 = KO 524 = Wohnzimmer
Meine OK Antwort damit Alexa keine Fehlermeldung (sondern ein "okay") an den Benutzer ausgibt. Hier die passende TurnOffConfirmation:
ich bin zwar noch Neuling mit Alexa, aber habe das System schon rudimentär an Edomi angebunden.
Ich beschreibe mal kurz meinen aktuellen Stand:
Die Skills für Alexa werden auf https://developer.amazon.com definiert. Dort kann man die erkennbaren Sprachbefehle definieren.
Grundsätzlich hat man die Möglichkeit, alles selber zu definieren ("Custom Skill") oder das fertige Home Automation Skill von Amazon zu benutzen.
Die Logik kann (Custom Skill) bzw muss (Home Automation Skill) auf https://aws.amazon.com/ implementiert werden.
Custom Skill
Vorteil: Mehr Flexibilität, Möglichkeit direkt https-Requests von dort aus an eigene Server schicken (aber zb. ohne http-Client-Zertifikate)
Nachteil: Man muss alles selber definieren. Wenn ich das richtig verstanden habe muss außerdem ein weiteres "Hot-Word" wie beispielsweise "Haus" (Beispiel von ThorstenGehrig ) definieren
Fertiges Home Automation Skill:
Vorteil: Amazon hat viel vordefiniert, die wichtigsten Sachen laufen sehr flüssig und in verschiedenen Variation (Von: "Alexa, Wohnzimmer" an bis zu "Alexa, mach bitte das Licht im Wohnzimmer an")
Nachteil: Es funktioniert nur mit Amazon-Lambda zusammen, außerdem muss man noch diese einmalig nervige Authentifizierung ("OAuth") machen.
Ich habe mich für das fertige Home Automation Skill entschieden. Dazu muss man sich an zwei Amazon Seiten registrieren (developer & aws). Bei aws muss man dabei auch sofort seine Zahlugsdaten (Adresse & Kreditkarte) hinterlegen. Kostet aber nischt für unseren Zweck.
Hier ist es gut beschrieben, obwohl ich bei meiner Einrichtung dieses wiki noch nicht kannte: http://www.fhemwiki.de/wiki/Alexa-Fhem
Also, ich habe mich 2x registriert und das Home Automation Skills (developer) mit meiner Lambda-Funktion (aws) verknüpft.
Kurzer Exkurs: Was macht eine Lambda-Funktion?
Die kann bestimmt noch viel mehr, weiß ich nicht, aber in meinem Fall macht Sie genau zwei Sachen:
- Discovery
- Control
Generell bekommt die Lambda einen Input-Parameter (quasi von Alexa). In der Objektstruktur dieses Parameters steht der Befehl (Discovery oder Control) und einige andere vom Befehl abhängige Parameter. Als Antwort wird auch wieder ein Objekt zurückgegeben. Bei Discovery eine Liste von Geräten, bei Control ein "ok" oder "nicht ok".
Diese Antworten beschreibe ich kurz weiter unten.
Die beim Discovery gefunden Geräte müssen in der Alexa einmalig "importiert" werden: "Meine Geräte suchen" (Das löst auch dann den Request zur Lambda-Funktion aus)
Das Prinzip ist also bei mir:
Ich rede mit Alexa, Alexa erkennt Home-Automation-Befehl und sendet das an meine Lambda-Funktion.
Die Idee der Lambda-Funktion habe ich auch von FHEM übernommen: Die komplette Frage wird als JSON-String an meinen eigenen Webserver mit Client-Zertifikat geschickt. Client-Zertifikat bedeutet, dass nur dieser Amazon-Rechner überhaupt mit meinem Server reden darf. Dieses Client-Zertifikat ist die einzige Änderung gegenüber dem Skript von FHEM. Wie man diese Client-Zertifikate grundsätzlich erstellet, habe ich in meiner "Externer-Zugang-Fallstudie" beschrieben: https://knx-user-forum.de/forum/proj...terner-zugriff
Als Antwort bekommt der Amazon-Rechner wieder das entsprechende Objekt via JSON zurück.
Mein php-Skript, dass auf dem edomi Rechner läuft, antwortet also live auf Discovery Requests oder auf Controls (zb Licht schalten).
Außerdem kommuniziert es mit der Remote-Schnittstelle von edomi.
Das Skript liest seine "bekannten Geräte" aus einer Textdatei:
<KO1>; <Name1>
<KO2>; <Name2>
KO ist dabei direkt eine Gruppenadresse (die in Edomi natürlich explizit für Fernsteuerung/remote freigeschaltet werden muss!)
Das funktioniert jetzt soweit alles. Der Echo-Dot hat wirklich eine gute Spracherkennung. Selbst mit TV im Hintergrund noch ganz gut.
Was jetzt noch fehlt, sind Anpassungen in meinem lokalen alexa.php-Skript, damit auch andere Geräte wie Dimmer angesprochen werden können.
Das sollten aber nur kleine Modifikationen im alexa.php sein (Andere discoverte Geräte zurückgeben, ein wenig anders aus Control reagieren).
Viel Spaß beim Ausprobieren,
Steffen
Anhänge:
index.js (umbenennen!) ist meine Lambda-Funktion. Diese muss im ZIP mit client.crt und client.key hochgeladen werden, falls man die Client-Zertifikate benutzen will)
alexa.php (umbenennen!) liegt lokal auf dem Edomi-Rechner bei mir wird durch Amazon aufgerufen. Dieses Skript ruft edomi-remote auf und liest meine Konfiguration aus.
config.txt: Meine Konfiguration. KOs aus den Gruppenadressen von Edomi raussuchen und für Fernzugriff freischalten
Als "PS:" gibt es hier noch zur Erklärung kleine Beispiele für die Kommunikation Alexa->Lambda->´mein alexa.php Skript (das Lambda leitet eigtl nur weiter, muss aber zwingend für home-automation-skill benutzt werden)
Bei Klick auf "Meine Geräte suchen" in Amazon App gibt es discovery-Request:
Code:
{ "header":{ "namespace":"Alexa.ConnectedHome.Discovery", "name":"DiscoverAppliancesRequest", "payloadVersion":"2", "messageId":"06c4efaf-da9b-4deb-8561-54412400382c" }, "payload":{ "accessToken":"BLA BLA aber brauchen wir nicht(?)" } }
Code:
{ "header":{ "namespace":"Alexa.ConnectedHome.Discovery", "name":"DiscoverAppliancesResponse", "payloadVersion":"2" }, "payload":{ "discoveredAppliances":[ { "applianceId":"device00524", "manufacturerName":"Steffen", "modelName":"ST01", "version":"VER01", "friendlyName":"Wohnzimmer", "friendlyDescription":"Das Licht im Wohnzimmer (device00524)", "isReachable":true, "actions":[ "turnOn", "turnOff" ] }, { "applianceId":"device00526", "manufacturerName":"Steffen", "modelName":"ST01", "version":"VER01", "friendlyName":"K\u00fcche", "friendlyDescription":"Das Licht im K\u00fcche (device00526)", "isReachable":true, "actions":[ "turnOn", "turnOff" ] } ] } }
Schaltbefehle bzw allgemeine Steuerungsbefehle. Im Beispiel für device00524 = KO 524 = Wohnzimmer
Code:
{ "header":{ "namespace":"Alexa.ConnectedHome.Control", "name":"TurnOffRequest", "payloadVersion":"2", "messageId":"81c27978-cc0c-4ae8-b1bc-09510c597a60" }, "payload":{ "accessToken":"BLA BLA BLA", "appliance":{ "applianceId":"device00524", "additionalApplianceDetails":{ } } } }
Code:
{ "header":{ "namespace":"Alexa.ConnectedHome.Control", "payloadVersion":"2", "messageId":"81c27978-cc0c-4ae8-b1bc-09510c597a60", "name":"TurnOffConfirmation" } }
Kommentar