alexa-fhem: amazon alexa smart home skill für fhem

Begonnen von justme1968, 05 November 2016, 23:21:32

Vorheriges Thema - Nächstes Thema

michael.winkler

Zitat von: justme1968 am 15 Januar 2017, 12:51:57
sogar nur das wiki zu lesen reicht in den meisten fällen.

ein laufendes alexa-fhem und eine aws lambada routine reicht für beliebig viele skills.

@michael.winkler: es gibt keine möglichkeit per api festzustellen. welcher echo ein kommando gehört hat. amazon kennt das problem und ich denke sie werden irgendwann etwas einbauen. spätestens für die geplanten hotel installationen ist das nötig.

bis dahin gibt es zwei workarounds:
du kannst den custom skill mehrfach anlegen. mit je einem eigenen invocation word. wenn du das geschickt machst kannst du dann etwas in der art sagen: alexa, sage wohnzimmer mach das licht an. bzw alexa, sage schlafzimmer mach das licht an.

noch besser ist es wenn du mit mehreren amazon accounts arbeitest und jedem account nur einen der echos zuordnest.

für beide varianten kannst du dann im config.json file hinter die skill bzw. oauth id jeweils mit : den raum hängen der gemeint ist.

wenn im kommando dann kein raum explizig gesagt wird gilt der aus dem config file.

für die fhemIntents müsste oh diese unterscheidung noch einbauen.

gruss
  andre

@justme1968
OK, Ich habe mir jetzt einen zweiten Skill angelegt. Das hat auch alles super funktioniert. Trotzdem habe ich noch eine Frage

In FHEM habe ich aktuell nur ein Alexa DEVICE über welchen ich die Intens usw. baue. Ich würde jetzt gerne für jeden Custom Skill ein eigenes Alexa Device anlegen, damit ich dort jeweils meine Intens usw. zusammenbauen kann. (aktuell habe ich nur eines) Daher jetzt die Frage, findet dann der Alexaserver Teil auch das richtige Alexa Device? Perfekt wäre es wenn ich in der Konfigurationsdatei angegebn könnte, welcher Skill auf welches Alexa Device zeigen sollte.

Gruß
Michael








justme1968

für die fhemIntents muss ich mir noch etwas überlegen zwei alexa devices gefallen mir noch nicht. das gibt an anderer stelle probleme.

kommt demnächst.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

nesges

Ich nutze mehrere Customskills die sämtlich ausschliesslich mit fhemIntents arbeiten. Die Notwendigkeit das Attribut fhemIntents in dieser Konstellation zu setzen sehe ich nicht. Spricht etwas dagegen die Möglichkeit eine Wildcard zu nutzen einzubauen? Ich habe testweise in lib/server.js 695ff folgendes ergänzt:

        } else if (fhem.fhemIntents['FHEMALLIntent']) {
          match = true;
          fhem.execute( 'setreading '+ fhem.alexa_device.Name +' fhemIntent '+ intent_name.replace( /Intent.?$/, '' ).replace( /^FHEM/, '' ) );


und fhemIntents auf "ALL=Ok" gesetzt. Funktioniert soweit ich sehe problemlos.

michael.winkler

Zitat von: justme1968 am 16 Januar 2017, 12:38:35
für die fhemIntents muss ich mir noch etwas überlegen zwei alexa devices gefallen mir noch nicht. das gibt an anderer stelle probleme.

kommt demnächst.

gruss
  andre

Deswegen wollte ich erstmal fragen. Danke schon mal für die Antwort. Dann warte ich

michael.winkler

Zitat von: justme1968 am 16 Januar 2017, 12:38:35
für die fhemIntents muss ich mir noch etwas überlegen zwei alexa devices gefallen mir noch nicht. das gibt an anderer stelle probleme.

kommt demnächst.

gruss
  andre

Sorry noch ein Frage. Ist es eventuell möglich die Antwort von Alex, je nach FHEMIntent vorzudefinieren? Ungefähr so wie im angehängetn Code?


if( fhem.fhemIntents[intent_name] == 'buerogutenMorgen' | fhem.fhemIntents[intent_name] == 'gutenMorgen' ) {
response.response.outputSpeech.text = 'Guten Morgen Familie xxx. Ich hoffe Ihr hattet eine angenehme Nachtruhe!';
callback( response );
return;
}else {
response.response.outputSpeech.text = 'OK.';
callback( response );
return;
}



justme1968

das kommt noch. nicht nur für die fhem intents sondern auch für die status abfrage bzw. die abfrage von readings.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dk3572

Ich habe es so hinbekommen:
AlexaMapping
Programm=verb=stelle,articles=den,valuePrefix=auf,values=AMAZON.NUMBER
HomebridgeMapping
Programm=favoriteList,cmd=favoriteList
Nur die Antwort passt noch nicht:
Zitat"Ich habe  receiver auf 4 gestellt"
Könnte mir hierzu jemand einen Tipp geben?
Danke!

justme1968

was gefällt dir denn an der antwort nicht?

bis jetzt kann man ausser der vergangenheitsform für ein verb an den antworten noch nichts konfigurieren.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dk3572

Müsste es nicht heißen "Ich habe den receiver auf Programm 4 gestellt"?

justme1968

#1389
nur wenn du das im kommando auch gesagt hast. die aktuelle version holt den artikel aus dem kommando. schau auf der konsole was als kommando tatsächlich ankommt.

die nächste version holt den artikel auch aus dem alexaMapping attribut. aber nur wenn es nur einen artikel gibt.

in allen anderen fällen (nicht mit gesagt, es gibt mehr als einen artikel, es wird mehr als ein device geschaltete, ...) lässt sich der artikel nicht auf einfache art automatisch bestimmen.


die eigenschaft noch mit anzusagen ist in arbeit. aber ich weiss nicht ob das automatisch für alle möglichen kombinationen funktioniert. vom intent oder characteristic namen auf den zu sagenden begriff zu schliessen geht nicht automatisch.

ich glaube das im zweifel eine kurze antwort besser ist als eine lange und grammatikalisch trotztem falsche.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

dl6kbg

#1390
Ich wollte mal kurz meinen Dank aussprechen. Nach Studium von gefühlt 200 Beträgen habe ich das am Sonntag erledigt (Smart-Home-Skill und Custom Skill).
Wobei, der Custom Skill geht vom Prinzip, weil ich eine selbstgebaute US-Alexa habe, die aus Lizenzgründen nur US-Englisch kann und darf. Wer sich auch so ein Ding bauen will: http://www.instructables.com/id/Build-a-Raspberry-Pi-Powered-Amazon-Echo/. Das klappt beim Smart-Home-Skill ganz normal nur in Englisch halt. Demzufolge Antwortet Alexa beim Custom-Skill in Deutsch-Englisch. Auch lustig. Mal sehen, ob ich das zum Lernen noch einmal umschreibe. Aber der Smart-Home Skill ist schon cool. Nochmals Dank und weiter so.

Grüße, Oliver

justme1968

@nesges: ich verstehe noch nicht  was du machst machst.

du schreibst die sätze direkt in die skill konfiguration statt sie
aus dem attribut zu holen?

so eine wildcard geschichte kann ich einbauen. aber ich hoffe noch auf eine möglichkeit den skill direkt aus dem modul heraus zu konfigurieren.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

jual

Erst einmal auch von meiner Seite einen riesen Dank an justme1968 für den tollen Job. Seit dem Wochenende bin ich nun auch dabei Alexa und FHEM zu verheiraten und habe schon einiges umsetzen können. Nun habe ich versucht, den Wecker abzubilden und zwar in der ganz einfachen Version, die wohl justme1968 mit 3 Zeilen einmal dargestellt hat. Grundsätzlich scheint auch alles zu funktionieren, nur der Befehl wird nicht richtig erkannt. Bei mir werden nur die Stunden richtig erkannt - als ob er aufhört, sobald das Wort "uhr" gesagt wurde.

Sage ich "stelle Wecker auf 7 Uhr 40" bekomme ich als Antwort "habe den Wecker auf;für 7:00 Uhr gestellt". Das landet dann auch im Dummy. Nur mit "stelle den Wecker auf 7 40 Uhr" bekomme ich die richtige Uhrzeit in das Dummy. Was mich auch wundert ist, dass die Antwort "auf;für" enthält. Irgendwo scheint bei mir also noch etwas falsch zu laufen.

Hier noch ein Auszug aus dem Log:
IntentRequest
[1/16/2017, 10:52:48 PM] uhrIntent
[1/16/2017, 10:52:48 PM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BMyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[1/16/2017, 10:52:48 PM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20MyAlexa%20intent%20IntentRequest%20uhrIntent&XHR=1
[1/16/2017, 10:52:48 PM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BMyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[1/16/2017, 10:52:48 PM] 0
[1/16/2017, 10:52:48 PM] uhr
[1/16/2017, 10:52:48 PM] uhrIntent
[1/16/2017, 10:52:48 PM] [ 'Weckzeit' ]
[1/16/2017, 10:52:48 PM] Weckzeit
[1/16/2017, 10:52:48 PM] uhrIntent -> Weckzeit
[1/16/2017, 10:52:48 PM] [FHEM] du_Alexa_Wecker: executing set cmd for Weckzeit with value 07:00
[1/16/2017, 10:52:48 PM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=set%20du_Alexa_Wecker%20%20%2007:00&XHR=1
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Ich habe den wecker auf;für 07:00 uhr gestellt"},"shouldEndSession":false,"card":{"type":"Simple","title":"uhrIntent","content":"den wecker auf;für 07:00 uhr gestellt"}}}

justme1968

schau zuerst mal hier: http://alexa.amazon.de/spa/index.html was alexa wirklich verstanden hat und dann zeig die komplette konsolen ausgabe. vom start bis das eine kommando abgearbeitet ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

swhome

Krasse Sache, funktioniert tatsächlich! Habe soeben den Smart-Home-Skill ans Laufen gebracht. Vielen Dank an die wackeren Forscher und Entdecker hier  :D
Im Einsatz: FHEM auf Raspberry Pi mit 350 devices, hauptsächlich Homematic Wired und HM-Heizungsregler, dazu diverse Eigenbauten für Fussbodenheizung und LED Beleuchtung. Und jetzt mit Alexa!