Anbindung an Alexa

Laufende Hard- und Softwaretests. Anregungen/Diskussion für neue Funktionen.
Benutzeravatar
Frankie
Beiträge: 311
Registriert: 22. Dezember 2014, 22:29

Re: Anbindung an Alexa

Beitrag von Frankie »

Hallo zusammen
Hab das Strickmuster von einem Alexa Custom Skill so halbwegs verstanden
das ist am Ende signifikant besser geeignet als ein SmartHomeSKill, zumal verschiedene Aussprachvarianten benannt werden können
vor allem auch was die Verständigung angeht / Erkennen von Intens (Absichten, Wünsche, was Alexa machen soll)

man benötigt 2 Dinge :
einen Skill ( mit der Amazon developer Consoler)
eine Lambda Funktion welches als Endpoint dient
beide sind per Amazon id miteinander verlinkt
also der SKill bekommt die Nummer von der Lambda Funktion
die Lambdafunktion bekommt umgekehrt die id vom zugehörigen SKill
beide Codes kann ich bereitstellen ( muss man dann in den skil und den Lambda Editor reinkopieren), die beiden ids miteinander verlinken , in der Lambda Funktion noch den Trigger auf Skills Kit stellen
wer also bereits Developer Account und AWS account hat , für den sollte das recht simple sein

das wäre aktuell möglich :
Invocation name : puhl Steuerung ( geschriebener Name : pool Steuerung versteht das ding nicht)
aber dennoch "öffne pool Steuerung" ausgesprochen
Invocation Name kann man auch ändern ( im Skill), "meine Steuerung", "mein Puhl menue" .....
muss man halt ausprobieren

verschiedene Aussprache Samples
der Wert in den geschweiften Klammern ( weiter unten bei den Beispielen) ist der sogenannte Slot , dort sind Aussprachevarianten hinterlegt ( das macht man alles in der Developer Console)
also etwa :
chlor, klohr, klor, redox, ph minus, ph plus,
oder
puhltemperatur, pool, puhl, wasser,aussen Rücklauf, messzelle,...
das kann man in der Amazon developer Console im Skill beliebig erweitern
neue Namen / Aussprachen für das Gewünschte definieren
vielleicht auch
" Bro, schmeiss mal die Pumpe an" ( um die filterpumpe auf manuell on zu stellen)
oder
"schalt das verdammte Ding aus " , wenn man möchte das die Filterpumpe auch mit "Ding" angesprochen werden soll :-)

meist ist ein fixer Index für verschiedene Aussprachen vorgesehen
Dieser Index wird am Ende dazu verwendet bei verschiedenen Aussprachen dennoch den gleichen Relaisindex / Sensorindex zu treffen
egal wie man das am Ende ausgesprochen hat ( pumpe, filterpumpe, Ding, ...) ist am Ende Index 0 , weil Relais 0 i.d.R: die Filterpumpe ansteuer
da muss man also selber gucken, bei allem was dieFilterpumpe betrifft , ist es das 1. Relais ? oder ist die Filterpumpe an Relais 2 , dann muss als Index eine 1 statt einer 0 dahin

Alexa ordnet die erkannten / zulässigen Namen dem Slot zu ( mit genau einem Index)
sobald der gesamte Intent vollständig ist , wird die Lambda Funktion im AWS aufgerufen
wenn was fehlt, fragt Alexa nach ( bzw man gibt die Nachfragetexte selber vor um alle Slots des Intents zu füllen)
AWS Lambda besorgt dann am Ende den Rest , kommuniziert mit dem Controller und schafft alles herbei oder sorgt für die gewünschten Aktionen
der Ausgabetext wird in der Lambda Funktion vorbereitet und am Ende als Sprachausgabe zum Alexagerät zurückgeschickt, die Büchse plappert das dann nur noch nach

die Lambda Funktion ist erstmal soweit fertig, bischen Fehlerbehandlung fehlt noch , Aussnahmebehandlung usw
was man dort eintragen muss sind Name / Passwort und Controller URL
mehr ist da nicht zu tun, bzw man kann auch ein paar Texte ändern, wenn die einem nicht gefallen

im Skill ( Alexa Developer Consoler) konfiguriert man alle Intents, Rückfragem, mögliche Aussprachewerte usw
oder nimmt erstmal das was ich für mich identifiziert habe ( JSON Datei reinkopieren)
wenn sich das Alexa Teil mal verschluckt, bei irgendeiner unbekannten Aussprache / Formulierung könnte man den Satz auch als Ausspracheoption mit aufnehmen
damit beim nächstenmal klarer ist was zu tun ist

aktuell gibts sowas :

manuelle Dosierung starten:
"{chemie} dosieren",
"{chemie} fuer {dauer} minuten",
"dosiere {dauer} minuten {chemie}",
"{chemie} fuer {dauer} minuten",
"dosiere {chemie} fuer {dauer} minuten"

manuelle Dosierung starten:
"stoppe {chemie} dosierung",
"{chemie} dosierung anhalten",
"{chemie} dosierung abbrechen",
"stopp {chemie} dosierung"

Abfrage Temperatursensoren:
"wie warm ist das {tempSensor}",
"wie warm ist der {tempSensor}",
"wie warm ist es {tempSensor}",
"wie warm ist die {tempSensor}"

Abfrage Elektrodenwerte:
"wo steht {elektrode}",
"wie hoch ist der {elektrode} wert",
"wie ist der {elektrode} wert"

Abfrage Relaiszust#nde:
"wie ist der status von {relais} ",
"wie ist der status vom {relais} ",
"wie ist der status von der {relais} ",
"wie ist der {relais} status"

Setze Relaiszustände:
"schalt {relais} {relaisMode}",
"stell {relais} {relaisMode}",
"setze {relais} {relaisMode}",
"stell {relais} auf {relaisMode}"

Abfrage Kanisterinhalte:
"wieviel ist noch im kanister",
"wieviel ist im kanister",
"wieviel ist im {chemie} kanister",
"wieviel ist noch im {chemie} kanister"

Abfrage analog Inputs:
"wie hoch ist die {analog}",
"wie hoch ist der {analog}",
"welchen wert hat der {analog} ",
"wie hoch ist der Wert vom {analog}"

wens interessiert , meldet sich einfach

gruß
Frank

Benutzeravatar
Frankie
Beiträge: 311
Registriert: 22. Dezember 2014, 22:29

Re: Anbindung an Alexa

Beitrag von Frankie »

Hi all
Im Anhang ein paar PDF Slides zum Erstellen eines Alexa Custom Skills , Custom Skill Code und AWS Lambda Code zum initialen Verwendung.
Weiterhin der erforderliche Custom SKill Code und der AWS Lambda Code, beides kann man anpassen wie man mag.

Vorraussetzung : Amazon Developer und AWS Account sind vorhanden, IAM und Security Rolle gibst scho vom Smarthoem Skill, das ist da erklärt was zu tun ist )
Wenn das bereits vorhanden ist , ist es vergleichsweise unkompliziert einen Alexa Custom SKill zu erstellen
was so aktuell "geht" ist :

Temperatur: Status
(Alexa), wir warm ist der pool ( das Wasser)
(Alexa), wie hoch ist die {tempSensor} Temperatur

Analog Sensoren: Status
(Alexa), wie hoch ist der {analog} ( z,B „Kesseldruck“ ausgesprochen)

Relais Abfrage:
(Alexa), wie ist der {relais} Status ( z,B Relais = „Absorber“ ausgesprochen)

Relais Setzen:
(Alexa), stell {relais} auf {relaisMode} ( = „händisch an“ / „aus“, „ manuell ein / aus“, „auto mode“, …)

Elektroden Abfrage:
(Alexa), wie hoch ist der {elektrode} wert ( z,B elektrode = ph minus, oder Redox )

Kanister –Inhalt Abfrage
(Alexa), wieviel ist noch im {chemie} Kanister ( z,B chemie= ph minus, oder Chlor)

Schock-Dosierung starten :
( (Alexa), dosiere( ph minus / Chlor ) für (x) Minuten

Schock-Dosierung stoppen :
(Alexa), ( ph minus / Chlor ) Dosierung anhalten / abbrechen

DMX Farbe
(Alexa), stell {spot} auf {farbe}

gruß
Frank
CustomLambdaProConIp.txt
(17.55 KiB) 240-mal heruntergeladen
AlexaCustom.pdf
(859.45 KiB) 281-mal heruntergeladen
CustomSkillProConip.txt
(39.73 KiB) 281-mal heruntergeladen
Zuletzt geändert von Frankie am 17. Mai 2020, 22:18, insgesamt 1-mal geändert.

Benutzeravatar
SuSaGi
Beiträge: 44
Registriert: 22. Juni 2016, 02:06

Re: Anbindung an Alexa

Beitrag von SuSaGi »

Hallo zusammen,

Ich habe diesen CustomSkill bei mir schon ausprobiert. Und es funktioniert einwandfrei.
Was ich empfehle sind die "Befehle" auf die eigene Aussprache anpassen.
Ansonsten funktioniert alles einwandfrei.
Auch die Dosierung von Chlor oder ph Minus über Alexa lief super. Die pumpen haben sich nach meiner Vorgaben abgeschaltet.

Ich finde das ganze als sehr gute alternative wenn man grad kein Smartphone oder Tablet in der nähe hat.

Sollten noch fragen dazu sein, oder hilfe benötigt wird, einfach melden.

Giro

Benutzeravatar
Frankie
Beiträge: 311
Registriert: 22. Dezember 2014, 22:29

Re: Anbindung an Alexa

Beitrag von Frankie »

Hi Giro
danke fürs reviewen der Doku.

Entscheidend ist das man sich mit den Dingen Utterances, Intents und Slots auseinandersetzt ( Amazon Developer Dok Seite aufrufen)
Wenn man das verstanden hat, so wird klar was es damit auf sich hat , und wie man das für seinen Sprachgebrauch nutzen kann.
Das ist dann lediglich ein Rumspielen/Ausprobieren mit der Amazon Developer GUI um neue oder alternative Aussprachen festzulegen / hinzuzufügen.
Programmieren muss man hierbei nichts, nur das sog. Interaction Model anpassen , mit all den Floskeln/ Redewendungen , die man so verwenden möchte um eines der vorgesehenen Dinge zu tun.

Ich glaub , da gibt es keinerlei Beschränkungen , wie viele alternative Aussprach Optionen man vorsehen möchte.

gib mir den aktuellen Wert von ...
wie ist der Wert von xy ...
sag mir wie hoch ist der Wert von xy ...
wie hoch ist ...
aktueller xy Wert ? ....

man stellt sich also die Frage :
wenn ich den Wert von xy haben möchte ...
was sag ich typischerweise ... ?
genau das muss ich im Interaktion Model angeben , verschiedene Phrasen ( mit den Platzhaltern (Slots) für das eigentliche Gerät)

genau die Redewendung konfiguriert man und gibt den Slot an ( der den gesprochenen Namen des Geräts enthält)
Wenns passt wird der Intent zur Lambda Funktion weitergeleitet , die macht dann den Rest.
gruß
Frank

Benutzeravatar
kriede
Beiträge: 9
Registriert: 18. Januar 2021, 21:30

Re: Anbindung an Alexa

Beitrag von kriede »

URL, Benutzername und Kennwort des Controllers Procon.IP werden von diesem Skript unverschlüsselt über den Server von @Frankie übertragen, er kann sie also in seinem Http-Log sehen und benutzen. Auch wenn ich @Frankie hier keine böse Absicht unterstellen möchte, sicher hat er besseres zu tun, als die Einstellungen unserer Controller zu verändern, wäre mir wohler, wenn ich das Skript selbst hosten kann, auch für den Fall, dass @Frankie seinen Server irgendwann mal umzieht oder abschaltet.
@Frankie könntest Du bitte auch Dein PHP-Skript von Deinem Server hier bereitstellen?

Benutzeravatar
Frankie
Beiträge: 311
Registriert: 22. Dezember 2014, 22:29

Re: Anbindung an Alexa

Beitrag von Frankie »

Hallo Kriede
ich hab deine ( und auch die der anderen Alexa User) Sorgen verstanden und die Scripts vom Server entfernt.
Zur Beruhigung : ich hab und hatte zu keinem Zeitpunkt ein Interesse an irgendwelchen Zugangsdaten , EInstellungen verändern o.ä..
Wenn du mich jetzt nicht dran erinnert hättest , hätt ich ganz vergessen das ich da noch Scripts auf dem Server hab, die einige Leute scheinbar nutzen ?

du müsstest also jetzt selber eine modernere Lösung entwickeln wie du die ZugangsDaten von allen beteiligten Controllern in irgendeiner Form verschlüsseln kannst..

Mein Script ist dafür nicht geeignet, bzw bei den genannten Security Bedenken möchte ich nicht auch noch offenlegen wie man das macht
Wenn das einfach nur woanders gehostet wird, entsteht kein neuer Security Level , das von dir geschilderte Ausgangsproblem bleibt bestehen ( den schwarzen Peter hast du dann).

gruß
Frank