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

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

Vorheriges Thema - Nächstes Thema

blade-of-fire

Ich habe jetzt auch mal die Lib geupdated und mir ist aufgefallen, dass in dem Alexa Device ein neues Attribut namens "echoRooms" aufgetaucht ist mit dem Wert "#<deviceId>=<room>"
Ich konnte leider nichts über das Attribut finden. Was hat es damit auf sich?
VM mit Ubuntu und FHEM-Instanz (Hauptinstanz)
FHEM2FHEM
Raspberry Pi 3 B+ mit Eigenbau-Platine + Relais-Platine + Cul-Stick + FHEMDuino

Merlin123

Schau mal in den Beitrag von 23 Uhr gestern ;)
Gruß,
Oliver

dr_laplace

Hallo,

jetzt bin ich wieder am verzweifeln wegen den homebridgemappings. Mein Problem:
Jalousie fährt mit Angabe der Prozentzahl problemlos auf die gewünschte Posistion. Jetzt würde ich aber gerne noch über die Wörter "hoch" und "runter", die Jalousie entsprechend komplett hoch und komplett runter fahren. Also dementsprechend 0% und 100%

Hier ist meine Definition meine Jalousienaktors.define Rollo_EZ_hinten_KNX KNX 3/0/2:dpt5.001 3/0/0:dpt1.008 3/0/1:dpt1.001
attr Rollo_EZ_hinten_KNX IODev KNXDtul
attr Rollo_EZ_hinten_KNX alexaName Jalousie
attr Rollo_EZ_hinten_KNX alexaRoom Esszimmer
attr Rollo_EZ_hinten_KNX alias Jalousie Esszimmer
attr Rollo_EZ_hinten_KNX eventMap /value:slider,0,1,100/off g2:hoch/on g2:runter/on g3:stop
attr Rollo_EZ_hinten_KNX genericDeviceType blind
attr Rollo_EZ_hinten_KNX group Jalousie
attr Rollo_EZ_hinten_KNX homebridgeMapping clear CurrentPosition=state TargetPosition=state,cmd=value
attr Rollo_EZ_hinten_KNX room Alexa,Esszimmer
attr Rollo_EZ_hinten_KNX slider 0,1,100
attr Rollo_EZ_hinten_KNX webCmd value::hoch::runter::stop


Wie muss ich jetzt das homebridgemapping erweitern damit Alexa darauf reagiert. Also "Alexa sage FHEM fahre die Jalousie im Esszimmer runter/rauf".

Hat jemand einen Tipp oder kann mir weiterhelfen?

Gruß



justme1968

dazu ist nicht das homebridgeMapping sondern das alexaMapping im alexa device zuständig.

dazu wird auch direkt ein beispiel mit ausgeliefert und im artikel oben im thread beschrieben.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Schlimbo

#2464
Hallo Andre,
ich habe gerade auf Version 0.3.2 hoch gerüstet und das neue Attribut "echoRooms" ausprobiert.
Folgende Schwierigkeiten hatte ich dabei:
Der Echo steht im Wohnzimmer, also habe ich am Alexa Device echoRooms auf "amzn1.ask.device.xxxxxx=Wohnzimmer" gesetzt.
Ein Gerät "Licht" hat das alexaRoom Attribut "Wohnzimmer"

Sage ich jetzt "Alexa, sage FHEM schalte das Licht an" bekomme ich als Antwort:
"Ich habe keinen Raum Wohnzimmer mit Geräten vom Typ licht gefunden"

Nach langem suchen bin ich darauf gekommen, dass es an der groß/Kleinschreibung liegt.
Beim Ausführen von CustomSlotTypes werden alle Texte klein geschrieben und dadurch kennt Alexa dann nur den Raum "wohnzimmer", nicht aber "Wohnzimmer".

Nach dem ändern vom alexaRoom Attribut "Wohnzimmer" auf "wohnzimmer" und setzen von echoRooms auf "amzn1.ask.device.xxxxxx=wohnzimmer" funktioniert dann alles.

Kannst du hier noch etwas einbauen, damit groß/Kleinschreibung egal ist?

Und noch eine Frage zu echoId:
Dachte zuerst, dass dies die ID vom Gerät (z.B. Echo Dot) ist, diese ändert sich aber auch bei unterschiedlichen custom skills, also hängt die ID nicht nur vom Gerät ab sondern auch vom Skill?

Über die applicationId in ".alexa/config.json" konnte ja auch schon ein default Raum zugeordnet werden.
Ist dies mit der Neuen echoId nun hinfällig? Oder welcher Raum wird dann als Default genutzt?

Gruß Schlimbo

justme1968

die schreibweise bei echoRoom repariere ich. bei alexaRoom ist sie jetzt schon egal.

amazon vergibt vermutlich deshalb pro skill jeweils eigene ids um es unmöglich zu machen die id über mehrere skills hinweg zu tracken. das gleiche wird auch mit den user ids gemacht. auch wenn du dich mit login for amazon einloggst bekommt jede app/skill eine eigene id präsentiert. die ist zwar jeweils eindeutig, erlaubt aber kein zusammenführen und identifizieren das es der gleiche user ist.

mit der echoId brauchst du nur noch einen einzigen custom skill. der workaround mit mehreren skills/accounts ist nicht mehr nötig. zumindest nicht für den default raum. wenn du mehrere skills hat um unterschiedliche invocation words zu haben kannst du das natürlich beibehalten.

wenn du einen raum für die skill id und die echoId vergeben hast hat aktuell die echoId vorrang. wenn es anders rum sinnvoller ist kann ich das aber rum drehen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Schlimbo

Danke für die Erklärung.

Ich habe momentan nur ein Alexa Gerät, und nutze unterschiedliche skills wegen den unterschiedlichen invocation.

Zitat von: justme1968 am 11 April 2017, 23:41:41
wenn du einen raum für die skill id und die echoId vergeben hast hat aktuell die echoId vorrang. wenn es anders rum sinnvoller ist kann ich das aber rum drehen.
Wollte nur den Zusammenhang verstehen, finde es sowie es jetzt ist auch sinnvoller. Dann schmeiß ich den default Raum aus der config.json wieder raus.  ;)

Mit der neuen Version funktioniert bei mir "get alexa customSlotTypes" nicht mehr richtig.
Beim betätigen im Webbrowser wird kein Popup angezeigt, erst wenn ich im Browser auf zurück klicke erscheint das Popup. "get alexa interactionModel" funktioniert.

Und noch etwas ist mir aufgefallen:
In alexaMapping habe ich eine Zeile mit:
Weckzeit=verb=schalte,property=wecker,values=aus:OFF
Im interactionModel kommt dann als Ausgabe der Custom Slot Types:
Weckzeit_ValueB
  aus:OFF

Das "OFF" sollte hier nicht erscheinen. Kannst du dir das bitte auch noch mal ansehen?

dr_laplace

Zitat von: justme1968 am 11 April 2017, 20:54:20
dazu ist nicht das homebridgeMapping sondern das alexaMapping im alexa device zuständig.

dazu wird auch direkt ein beispiel mit ausgeliefert und im artikel oben im thread beschrieben.
Ah ja. Langsam bekomme ich den Durchblick. Herzlichen Dank. Werde es über die Ostertage ausprobieren.

xaszy

#2468
Hallo Zusammen,

ich habe mir nun auch mal den Echo Dot gegönnt, nachdem ich das hier schon eine Weile verfolge.
Ich bin nun nach der Anleitung im Wiki vorgegangen und konnte soweit alles einrichten, auch wenn ich an manchen Stellen ein bisschen mit den Amazon Seiten verzweifelt bin, mit ID hier ID dort.
Allerdings erkennt meine Alexa App die Geräte nicht, wenn ich auf dem Fhem-Server in das Log von alexa-fhem schauen, sehe ich wenn ich auf Geräte suchen drücke eine Directive:

**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery","name":"DiscoverAppliancesRequest","payloadVersion":"2","messageId":"XXXX"},"payload":{"accessToken":"Atza|XXX"}}
response :{"header":{"name":"DiscoverAppliancesResponse","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Discovery","messageId":"XXXXX"},"payload":{"discoveredAppliances":[]}}

Ich habe die Befehle aus dem Wiki zum Test im Fhel erstmal 1:1 ausgeführt und habe damit im Fhem nun also ein Alexa Party Dummy:


define FHEM.Alexa.Status dummy

define FHEM.Alexa dummy
attr FHEM.Alexa event-on-change-reading state
attr FHEM.Alexa webCmd status:start:stop:restart

define FHEM.Alexa.DOIF DOIF ([FHEM.Alexa] eq "start")
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa start > /dev/null 2>&1 &")})
DOELSEIF ([FHEM.Alexa] eq "stop")
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa stop > /dev/null 2>&1 &")})
DOELSEIF ([FHEM.Alexa] eq "restart")
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa restart > /dev/null 2>&1 &")})
DOELSEIF ([FHEM.Alexa] eq "status")
(set FHEM.Alexa on, {system ("sudo /etc/init.d/alexa status > /dev/null 2>&1 &")})

define MyAlexa alexa

define Alexa.Party dummy
attr Alexa.Party alexaName party
attr Alexa.Party alexaRoom alexaroom
attr Alexa.Party genericDeviceType switch
attr Alexa.Party group AlexaGeräte
attr Alexa.Party room AlexaRoom
attr Alexa.Party setList on off


Dieser müsste nach meinem Verständis in der Alexa App auftauchen, wenn ich nach Geräten suche, tut es allerdings nicht.

Ich weiß jetzt nur nicht so richtig, an welcher Stelle ich nach dem Problem suchen soll, eventuell hat mir jemand nen Tipp wo ich ansetzten soll.


@Edit: Problem gelöst. Ich weiß zwar nicht genau was ich falsch gemacht habe, aber ich habe nochmals eine alte Konfig vom Fhem Server eingespielt und nochmals alles durchgemacht. Jetzt geht es.
Danke Euch! Super Sache
Grüße xasz

TomLee

Hallo,

dachte gelesen zu haben ARD, ZDF, RTL sei kein Problem mehr einfach nachschauen was im Verlauf in den Einstellungen der App verstanden wurde, fertig. Wollte das jetzt mit meiner Eigenbau ESP-IR Fernbedienung umsetzen.
Ein
Echo, schalte ARD aus
wird bei mir auch problemlos mit einem OK bestätigt und auch ausgeführt.

Mit
Echo, schalte ARD ein
bricht Alexa entweder mit einem kurzen Ton ab oder antwortet mit "Ich kann diesen Skill nicht finden, Skills findest ...". Das gleiche mit ZDF oder RTL.

DMAX mit alexaname d. max geht eigenartigerweise wiederum problemlos.

So schalte ich die Programme in Fhem

Internals:
   CHANGED
   DEF        LG_TV_Wohnzimmer:state
   DEVICE     LG_TV_Wohnzimmer
   NAME       rp_LG_TV_RTL
   NOTIFYDEV  global,LG_TV_Wohnzimmer
   NR         399
   NTFY_ORDER 50-rp_LG_TV_RTL
   READING    state
   STATE      off
   TYPE       readingsProxy
   Content:
     LG_TV_Wohnzimmer 1
   Readings:
     2017-04-12 21:29:15   lastCmd         off
     2017-04-12 21:29:15   state           off
Attributes:
   alexaName  a. r. d.
   devStateIcon on:control_on_off@green off:control_standby
   event-on-change-reading .*
   genericDeviceType switch
   room       Alexacontrol,TV Fernbedienungen
   setFn      { return 'KEY_3' if( $CMD eq 'on' );; return 'off';; }
   setList    on off
   valueFn    { return 'on' if( $VALUE eq 'KEY_3' );; return 'off';; }


Übersehe ich noch was, oder gehen diese einfach nicht? Mit schalte das Erste oder Zweite ein ist ja eine gute Alternative gegeben. RTL möchte ich aber auch gerne RTL nennen.


MarkusRobertAllen

Hallo,
ich habe seit einiger Zeit den SmartHome erfolgreich und mit Begeisterung im Einsatz, habe mich nun an den Custom Skill gewagt. Tatsächlich, es hat funktioniert und es öffnet sich eine riesige Palette der Möglichkeiten. :-)

Ich habe allerdings ein Verständnisproblem mit echoRooms. Ich scheine es nicht setzen zu können.
Mein Verstädnis ist, dass mit
Zitatattr MyAlexa echoRooms "amzn1.ask.device.<ganz lange Kombi aus Buchstaben>=Alexa"

der Standardraum für ein spezifisches Device gesetzt wird. Ich die DeviceID aus dem REading "echoId" aus dem Device MyAlexa entnommen. Trotzdem bleibt das Reading "EchoRoom" auf "unknown".
Ich habe einen generellen Raum "Alexa" für alle Devices angelegt, in dem ich auch ein neuen Dummy habe:

Zitatdefine Alexa.Rueckmeldung dummy
attr Alexa.Rueckmeldung alexaName rueckmeldung
attr Alexa.Rueckmeldung alexaRoom Alexa
attr Alexa.Rueckmeldung genericDeviceType switch
attr Alexa.Rueckmeldung group AlexaGeräte
attr Alexa.Rueckmeldung room Alexa
attr Alexa.Rueckmeldung setList on off
attr Alexa.Rueckmeldung webCmd status:on:off

Wenn ich nun Alexa folgendermassen bitte:
Zitat"Alexa, sage <Name> schalte Rueckmeldung an"
ist die Antwort
Zitat"Ich habe kein Gerät Rückmeldung im RAum "unknown" gefunden."

stattdessen bei:
Zitat"Alexa, sage <Name> schalte Rückmeldung in Alexa an"
schaltet Alexa alle Geräte im Raum Alexa an (?) und gibt mir in der App folgendes zurück:
Zitatrueckmeldung, Ich kann das Gerät mit Namen undefined nicht schalten. badezimmerlicht (hier kommen jetzt alle Geräte im Raum Alexa) und rueckmeldung angemeschaltet.

Hier die INfos zu MyAlexa:
ZitatInternals:
   CFGFN      /opt/fhem/FHEM/99_alexa.cfg
   NAME       MyAlexa
   NR         254
   STATE      active
   TYPE       alexa
   active     1
   alexa-fhem version 0.3.2
   Readings:
     2017-04-13 11:50:48   echoId          amzn1.ask.device.AFIXXAFZZXBLUWXYCLK3R625Y3EP4RQP6A7JEEBYS3QEUIDYPBNR6AN5AIJABZ4N5SOSMGKALYZJ6RCHONEM7BYGV4ILVNGKB45G7O6LRH2BADCDUDVQYLFL6HU5BFGKL44IYUW22SCOMN4AFGWMSCRJXELQ
     2017-04-13 11:50:48   echoRoom        unknown
     2017-04-13 11:39:46   fhemIntent      gutenMorgen
     2017-04-13 11:50:48   intent          IntentRequest OnIntent
Attributes:
   alexaMapping #Characteristic=<name>=<value>,...
On=verb=schalte,valueOn=an;ein,valueOff=aus,valueToggle=um

Brightness=verb=stelle,property=helligkeit,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent

Hue=verb=stelle,valuePrefix=auf,values=rot:0;grün:128;blau:200
Hue=verb=färbe,values=rot:0;grün:120;blau:220

Saturation=verb=stelle,property=sättigung,valuePrefix=auf,values=AMAZON.NUMBER
Saturation=verb=sättige,values=AMAZON.NUMBER

TargetPosition=verb=mach,articles=den,values=auf:100;zu:0
TargetPosition=verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent

TargetTemperature=verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=grad

Volume:verb=stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent

Weckzeit=verb=stelle,valuePrefix=auf;für,values=AMAZON.TIME,valueSuffix=uhr
   alexaTypes #Type=<alias>[,<alias2>[,...]]
light=licht,lampen
blind=rolladen,rolläden,jalousie,jalousien,rollo,rollos
   echoRooms  "amzn1.ask.device.<viele Buchstaben>=Alexa"
   fhemIntents #IntentName=<sample utterance>
gutenMorgen=guten morgen
guteNacht=gute nacht
   room       Alexa
   verbose    5

justme1968

@MarkusRobertAllen: wenn du echoRooms setzt musst du danach alexa-fhem neu starten. ich habe das automatische neu einlesen vergessen. kommt in der nächsten version.

du ordnest mit echoRooms die device id nicht dem raum Alexa zu sondern dem raum in dem der echo steht. und du darfst keine anführungszeichen um den attribut wert machen.


der raum Alexa ist nur zum gruppieren und filter der devices die alexa kennt. nicht um ihn in den gesprochenen kommandos zu verwenden.


@TomLee: schau in der alexa app nach was alexa verstanden hat. eine solche antwort kommt von amazon und nicht von alexa-fhem d.h. hier geht schon vorher etwas schief.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

TWART016

Hallo,

ich habe einen dummy Wohnzimmer_Modi welchen ich auf bestimmte Werte setze. z.B. set Wohnzimmer_Modi aufstehen. Das Gerät wird in Alexa auch erkannt. Das Gerät Zudem gibt es ein paar HomebridgeMappings
On=activity,subtype=heimkommen,valueOn=heimkommen,cmdOn=heimkommen,cmdOff=wählen
On=activity,subtype=aufstehen,valueOn=aufstehen,cmdOn=aufstehen,cmdOff=wählen


Was muss ich noch konfigurieren, dass ich folgendes sagen kann: alexa, schalte aufstehen ein? Muss ich das notify Gerät von aufstehen bearbeiten?

jvollmer

Hallo bitte Hilfe!
Ich habe heute das neue 0.3.2 über das 0.3.1 installiert. Bekomme jetzt folgenden Fehler in Alexa --debug
Zitat
ERROR: TypeError: Cannot read property 'System' of undefined from ::ffff:52.48.80.153
Im developer Test : invalid Response ....
Ich weiss nicht mehr weiter!
Danke für Hilfen.

RaspiLED

Hi,
Ich finde das schreit nach einem IPv6 vs. IPv4 Problem. Kannst Du mal Testweise IPv6 abschalten:
https://www.raspberrypi.org/forums/viewtopic.php?f=36&t=138899

Add the line
blacklist ipv6
to /etc/modprobe.d/ipv6.conf
Save and reboot

Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...