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

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

Vorheriges Thema - Nächstes Thema

justme1968

kurzer zwischenstand :)

- das api geht auch in deutschland
- man kann einem custom skill problemlos das recht geben listen zu lesen und/oder zu schreiben
- mit dem token kann man die listen problemlos holen und alles weitere machen

- es geht nicht für custom skills. d.h. die automatisch geräte suche jede stunde lässt sich nicht zum token
  refresh missbrauchen.

also erst mal abwarten ob das token morgen noch gültig ist

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

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

sbiermann

Wie gut das Docker so brav alles mitloggt... hier ein kleiner Teil meines Logs von heute:
[5/4/2017, 5:36:07 PM] accepted new token
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery","name":"DiscoverAppliancesRequest","payloadVersion":"2","messageId":"30782617-eab3-4706-b313-f537509e0213"},"payload":{"accessToken":"Atza|IwEBIABVj54_DADAT4Zg9zxPYt0D2w_1AAnAGQaVmA2ezTRd3SbENK7PtwAnInxp678cgNj_Jhy2xTR1DnFdxUZgkCPGphoXmg7SShpaIz30xRSHPOG6KLGKv3ymimjij91qM0MTiwOwmPqiU3vRYGreUpL-NfKdK42SQ5KUhgC7Zy0TR9MIUAo2GAnipekRSwd8osXziQj1keZhaZu3ESEfkZCV9kioRq6Ezl3vlQd0dYsylxMrHHyQuhTDHayc_V3h7JNQNQXMjOcU41jQJGE9lNedBC53Qf_Yatu3D2I-W4ifqfAqaACKxwpxdsQntRgc9GvnXCU2SmOxJQ17IPxFff4TllOSoJMHsm38aRKUr1EIS28PkxqF8kEiGgbIFaIJeVXARi1OL41Ed1q49NzUPa5-wHWfFj2_RA3Oc6hivH8E7sp_PWJhmT30IJB_uu-mTr8AQFTfBihx_2nBbLsfflCOsGm93tTFMCEHh8bMZHRFYP0EDXYkNYzCxiahPvKBngw"}}
[5/4/2017, 6:25:13 PM] accepted new token
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Control","name":"SetPercentageRequest","payloadVersion":"2","messageId":"1c0c8d89-a355-4b03-83ef-1d02e9479ca2"},"payload":{"accessToken":"Atza|IwEBIABVj54_DADAT4Zg9zxPYt0D2w_1AAnAGQaVmA2ezTRd3SbENK7PtwAnInxp678cgNj_Jhy2xTR1DnFdxUZgkCPGphoXmg7SShpaIz30xRSHPOG6KLGKv3ymimjij91qM0MTiwOwmPqiU3vRYGreUpL-NfKdK42SQ5KUhgC7Zy0TR9MIUAo2GAnipekRSwd8osXziQj1keZhaZu3ESEfkZCV9kioRq6Ezl3vlQd0dYsylxMrHHyQuhTDHayc_V3h7JNQNQXMjOcU41jQJGE9lNedBC53Qf_Yatu3D2I-W4ifqfAqaACKxwpxdsQntRgc9GvnXCU2SmOxJQ17IPxFff4TllOSoJMHsm38aRKUr1EIS28PkxqF8kEiGgbIFaIJeVXARi1OL41Ed1q49NzUPa5-wHWfFj2_RA3Oc6hivH8E7sp_PWJhmT30IJB_uu-mTr8AQFTfBihx_2nBbLsfflCOsGm93tTFMCEHh8bMZHRFYP0EDXYkNYzCxiahPvKBngw","appliance":{"applianceId":"NEQ1556437","additionalApplianceDetails":{"device":"HM_508FCB"}},"percentageState":{"value":100}}}
[5/4/2017, 6:33:33 PM] accepted new token
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Control","name":"TurnOnRequest","payloadVersion":"2","messageId":"f7c79fb6-f5d3-4ae2-b464-f6c4ff8b9b60"},"payload":{"accessToken":"Atza|IwEBIOG5HlrsH1QgOO-UprGCmjnLNlWhArZ3QcS0uUQnGwO79qa7xe8j3x9gEJJ_8mg1o4dd_CIbdnGY0PbwgdYYNrjT7qMBbDKWfOuSleb1qdNqplwHjXcL-Dcfh5gnGe6CnXLZhzFbVCGS0Y0rlNBx1oMZcADQ3-DdXvh5M87FUGbqVdOMpAtD6ZDCa_ZyiHPyHJqkxmDVgiT34y9DUhIhk-L92JCCoWdZgZ4b8dfIqNnMMehcw-NKx3NGHdVHXpf_-ozXHrQ5SVM9lYpNuFDggjF19n6-wD5Ncn6fkEF_OghIjYwD_AfN2u18-kQwHWnEExYin2iSlvg9yVqm13i-zbmRgqbVg2vwHHwVqU1Rwe2ZkvZMHJRCET9KmduLsW79cJFXLmnueZBVyLwbHdlTyaVbCv8eLx_a-ia3cUifB-nTW7bnkdqgM_ewRsEhtj_OoniVtSGo_6ahhZhaJR2JyKONPSPOe-f9NaDjc5Iap_MNnPxV__J38gQlBSU8yIZkBa0","appliance":{"applianceId":"Fernseher","additionalApplianceDetails":{"device":"Fernseher"}}}}
[5/4/2017, 7:00:39 PM] accepted new token
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Control","name":"TurnOffRequest","payloadVersion":"2","messageId":"4980d3c8-ed73-4476-a54b-284374156204"},"payload":{"accessToken":"Atza|IwEBIOG5HlrsH1QgOO-UprGCmjnLNlWhArZ3QcS0uUQnGwO79qa7xe8j3x9gEJJ_8mg1o4dd_CIbdnGY0PbwgdYYNrjT7qMBbDKWfOuSleb1qdNqplwHjXcL-Dcfh5gnGe6CnXLZhzFbVCGS0Y0rlNBx1oMZcADQ3-DdXvh5M87FUGbqVdOMpAtD6ZDCa_ZyiHPyHJqkxmDVgiT34y9DUhIhk-L92JCCoWdZgZ4b8dfIqNnMMehcw-NKx3NGHdVHXpf_-ozXHrQ5SVM9lYpNuFDggjF19n6-wD5Ncn6fkEF_OghIjYwD_AfN2u18-kQwHWnEExYin2iSlvg9yVqm13i-zbmRgqbVg2vwHHwVqU1Rwe2ZkvZMHJRCET9KmduLsW79cJFXLmnueZBVyLwbHdlTyaVbCv8eLx_a-ia3cUifB-nTW7bnkdqgM_ewRsEhtj_OoniVtSGo_6ahhZhaJR2JyKONPSPOe-f9NaDjc5Iap_MNnPxV__J38gQlBSU8yIZkBa0","appliance":{"applianceId":"Fernseher","additionalApplianceDetails":{"device":"Fernseher"}}}}


17:37 bis 18:25 hielt das erste Token, dann um 18:33 gab es ein neues. Ich denke damit dürften so um die 50 Minuten Lebensdauer sein.

justme1968

falsches token :)

das token in deinem log ist das accessToken das zu oauth und dem home automation skill gehört. das ist tatsächlich etwa eine stunde gültig. alexa-fhem prüft diese gültigkeit auch gegen die amazon server.

für die listen gibt es ein neues zusätzliches consentToken das nur mit geschickt wird wenn der skill den listen zugriff anfordert und der anwender diesen explizit erlaubt hat. es existiert auch nur für den custom skill.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

sbiermann

Ich würde aber mal stark davon ausgehen das die Token die selbe Gültigkeit haben werden. RefreshToken wäre ja nice, aber so wie die API aussieht auf der verlinkten Seite wird der wohl nicht gesendet.

justme1968

das consentToken schaut zwar identisch aus, hat zumindest in so weit ein anderes internes format als das accessToken das es sich nicht über das api verifizieren lässt und auch keine gültigkeit abfragbar ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

schade. hält leider trotzdem nur eine stunde.

d.h. man kann nicht wirklich damit arbeiten ohne zumindest ein sprach kommando zu geben...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

sbiermann

Naja, dann kann man ja Trick 17 nutzen. Einfach einen Lautsprecher in die Nähe von einen Alexa Device stellen und dort einfach nach einer Stunde eine MP3 Datei abspielen welche Alexa befiehlt einen neuen Token zu senden bzw. den passenden Befehl das am Ende ein neuer Token heraus purzelt.

Fixel2012

Zitat von: sbiermann am 05 Mai 2017, 08:07:45
Naja, dann kann man ja Trick 17 nutzen. Einfach einen Lautsprecher in die Nähe von einen Alexa Device stellen und dort einfach nach einer Stunde eine MP3 Datei abspielen welche Alexa befiehlt einen neuen Token zu senden bzw. den passenden Befehl das am Ende ein neuer Token heraus purzelt.

Naja, der Aufwand ist da glaube ich eher größer als der Nutzen im Endeffekt  ;D
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

jneroes

Hi,

könntest du das in dein Modul mit integrieren?  :)

https://github.com/gravesjohnr/AlexaNotificationCurl

Dann könnte aus FHEM heraus Benachrichtigungen ausgeben.

Gruß

Sören

Esjay

Zitat von: jneroes am 06 Mai 2017, 14:13:35
Hi,

könntest du das in dein Modul mit integrieren?  :)

https://github.com/gravesjohnr/AlexaNotificationCurl

Dann könnte aus FHEM heraus Benachrichtigungen ausgeben.

Gruß

Sören

Das ist nicht möglich! Kurzes Zitat des Programmierers


Yes,

This is true.  This script does not push the answer to the Echo. Push is
not available.

So what I did was setup the bluetooth speaker on the Echo so when the
reply comes on my computer, it sounds like it is coming from the Alexa...

Gruß

megadodopublications

Hallo zusammen.

Ich laufe hier in ein Problem, Ursache ist vermutlich die Fehlerbehandlung von MAX in Kombination mit Alexa. (oder mein Unvermögen in Perl einen Fehler sauber abzufangen..)  (bevor wer fragt: meine Perl "Kenntnisse" beschränken sich darauf bestehende Codeschnipsel für meine Bedürfnisse anpassen... das funktionierte bisher eigentlich ganz gut..)

Ich versuche das Problem mal in Stichpunkten zu umreißen:

- es gibt ein selbst gestricktes Stück Perl in 99_myutils
- das Stück Perl wird als Sub von einem fhemIntent aufgerufen -> {alexa_auf_wiedersehen()}=auf wiedersehen
- aus alexa_auf_wiedersehen() werden zwei weitere Subs aufgerufen: sub 1 schaltet Licht aus, sub 2 schaltet mehrere Heizkörperthermostate aus
- Heizung ist MAX! (mit Cube)
- als return an Alexa gibt es eine Sprachausgabe (.. Licht ist ausgeschaltet, Heizung ist ausgeschaltet..mach's gut...)

- sofern ich "trocken" teste (also die eigentlichen set Befehle nur simuliere/in's Log ausgebe), ist alles gut
- auch im "echten Leben" ist immer noch alles gut, die Routine tut was sie soll (set Befehle werden wirklich ausgeführt)

Probleme macht die Rückgabe an Alexa:

Sofern es bei der Ausführung bei MAX (und nur dort habe ich bisher ein solches Problem festgestellt) eine Fehlermeldung gibt (MAXLAN_Parse: Command was discarded - also zB Dutycycle voll), passieren zwei Dinge

1.) alle Befehle werden korrekt ausgeführt  (natürlich mit Ausnahmen: Dutycycle, Kommando konnte aus anderen Gründen nicht abgesetzt werden,.. etc)

2.) der Skill meldet einen Fehler an AWS zurück "The remote endpoint could not be called, or the response it returned was invalid."

Aufgrund von 2. gibt es keine Sprachausgabe.

Sehr schade, denn eigentlich ist alles gut:
- Den auszugebenden Text habe ich im Log
- die Kommandos werden ausgeführt

Die grosse Frage: wie kann ich einen MAXLAN Fehler so abfangen, dass Alexa trotzdem das return ausgibt ?

Mir ist klar, dass zur Analyse zu wenig Infos bereit stehen, wenn also Bedarf an Logfile xy besteht: einfach fragen.

Viele Grüße,
Ralph.

Bei der Gelegenheit: ein herzliches DANKESCHÖN an alle, die ihr Freizeit in FHEM stecken bzw gesteckt haben!

jvollmer

Hallo mega....,
ich hatte ein ähnliches Problem. Seit dem stecke ich komplexe Fhembefehle in ein "at .. ", dann funktioniert die Sprachausgabe und die Befehle werden unabhängig ausgeführt.

megadodopublications

Klasse Workaround  :)  Funktioniert. Danke!

Ralph.

Flar64

Hallo zusammen,
erstmal ein Lob an justme1968 und auch alle anderen die alexa-fhem soweit gebracht haben.

Vielleicht kann mir jemand bei meinem kleinen Problem weiter helfen.
Ich habe alexa-fhem auf meiner Himbeere unter Debian Jessie laufen, das heißt ich kann es per Konsole von meinem Rechner aus mit ./bin/alexa starten und alles funktioniert soweit tadellos.
Jedoch bekomme ich die Sache nicht als Service zum laufen. Nach einem sudo systemctl start alexa und einem sudo journalctl -u alexa -f bekomme ich folgenden Fehler ausgegeben:
Failed at step USER spawning /opt/alexa-fhem/bin/alexa: No such process
Ich habe schon einige Versuche mit Benutzer und Verzeichnis Rechten hinter mir, leider ohne Erfolg.
Was habe ich evtl. übersehen?
Google konnte mir zu der Meldung leider auch nichts sagen.

Für einen kleinen Tipp wäre ich sehr dankbar.

Gruß Flar64

MadMax-FHEM

Hi,

vielleicht findet sich hier etwas:

https://forum.fhem.de/index.php/topic,71612.msg631248.html#msg631248

oder halt hier:

https://forum.fhem.de/index.php/topic,60452.0.html

wobei der Thread schonetwas lang ist aber gegen Ende kommen auch Fragen/Probleme/Lösungen bzgl. systemd und alexa...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)