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

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

Vorheriges Thema - Nächstes Thema

amenomade

Prüf mal den Code deiner Lambda Funktion.

Ausserdem sieht man in deiner Log die Request nicht, sondern nur die Response. Es wäre gut, wenn Du den Alexa Dienst stoppen würdest, und dann Alexa manuell im Debugmode starten würdest. Das was man hier sieht ist nicht vom Namespace Discovery, sondern vom Namespace Control (Namespace für set on, off, percent & Co.)

Eine Request zur Discovery sieht man immer noch nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

hauwech

Der Alexa Service läuft bei mir als Service unter dem user alexa. Wenn ich versuche, Alexa manuell mit sudo -u alexa ./bin/alexa --debug zu starten, verwendet alexa die config in meinem home using /home/roland/.alexa/config.json
Wie kann ich denn alexa manuell sauber als user alexa starten?
Liegt hier möglicherweise das Problem: das Verzeichnis /opt/fhem/alexa-fhem und alle files darin gehören dem user roland.
Der im Wiki aufgeführte Befehl zur Useranlage useradd -M --system alexa legt außerdem kein home-Verzeichnis an. Hier kann man als User, der in Sachen Linux nicht soooo fit ist - wie ich - schon mal ins Schlingern kommen, wenns darum geht, die Rechte korrekt zu setzen.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

hauwech

Ich habe jetzt mal alexa mit meinem "Arbeits-"user roland mit --debug gestartet:roland@fhem-nuc:/opt/fhem/alexa-fhem$ ./bin/alexa --debug
[2017-12-18 13:03:20] using /home/roland/.alexa/config.json
[2017-12-18 13:03:20] ---
[2017-12-18 13:03:20] this is alexa-fhem 0.3.4
[2017-12-18 13:03:20] Fetching FHEM devices...
[2017-12-18 13:03:20] [FHEM] starting longpoll: https://127.0.0.1:8083/fhem?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1513598600794
[2017-12-18 13:03:20] Server listening on: https://:::3000
[2017-12-18 13:03:20] [FHEM] Checking devices and attributes...
[2017-12-18 13:03:20] [FHEM]   executing: https://127.0.0.1:8083/fhem?cmd=%7BAttrVal(%22global%22,%22userattr%22,%22%22)%7D&fwcsrf=csrf_135579220598823&XHR=1
[2017-12-18 13:03:20] [FHEM]   executing: https://127.0.0.1:8083/fhem?cmd=jsonlist2%20TYPE=alexa&fwcsrf=csrf_135579220598823&XHR=1
[2017-12-18 13:03:20] [FHEM] Fetching FHEM devices...
[2017-12-18 13:03:20] [FHEM] fetching: https://127.0.0.1:8083/fhem?cmd=jsonlist2%20room=Alexa&fwcsrf=csrf_135579220598823&XHR=1
[2017-12-18 13:03:21] [FHEM] alexa device is myAlexa
[2017-12-18 13:03:21] [FHEM] mappings for myAlexa: {}
[2017-12-18 13:03:21] [FHEM] myAlexa is switch
[2017-12-18 13:03:21] [FHEM] myAlexa has
[2017-12-18 13:03:21] [FHEM] homebridgeMapping: #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;die,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
[2017-12-18 13:03:21] [FHEM] value2homekit: { 'AMAZON.NUMBER': 'AMAZON.NUMBER' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { rot: '0', 'grün': '128', blau: '200' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { rot: '0', 'grün': '120', blau: '220' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { 'AMAZON.NUMBER': 'AMAZON.NUMBER' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { 'AMAZON.NUMBER': 'AMAZON.NUMBER' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { auf: '100', zu: '0' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { 'AMAZON.NUMBER': 'AMAZON.NUMBER' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { 'AMAZON.NUMBER': 'AMAZON.NUMBER' }
[2017-12-18 13:03:21] [FHEM] value2homekit: { 'AMAZON.NUMBER': 'AMAZON.NUMBER' }
[2017-12-18 13:03:21] [FHEM]   executing: https://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&fwcsrf=csrf_135579220598823&XHR=1
[2017-12-18 13:03:21] [FHEM]   executing: https://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22alexa-fhem%20version%22%7D%20=%20%220.3.4%22%7D&fwcsrf=csrf_135579220598823&XHR=1
[2017-12-18 13:03:21] [FHEM]   executing: https://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&fwcsrf=csrf_135579220598823&XHR=1
[2017-12-18 13:03:21] perfectOfVerb:
[2017-12-18 13:03:21] { stelle: 'gestellt',
  schalte: 'geschaltet',
  'färbe': 'gefärbt',
  mach: 'gemacht' }
[2017-12-18 13:03:21] verbsOfIntent:
[2017-12-18 13:03:21] [ OnIntent: [ 'schalte' ],
  prozentIntent: [ 'stelle' ],
  HueIntent: [ 'stelle' ],
  HueIntentB: [ 'färbe' ],
  SaturationIntent: [ 'stelle' ],
  SaturationIntentB: [ 'sättige' ],
  TargetPositionIntent: [ 'mach' ],
  gradIntent: [ 'stelle' ] ]
[2017-12-18 13:03:21] characteristicsOfIntent:
[2017-12-18 13:03:21] { OnIntent: [ 'On' ],
  prozentIntent: [ 'Brightness', 'TargetPosition', 'Volume' ],
  HueIntent: [ 'Hue' ],
  HueIntentB: [ 'Hue' ],
  SaturationIntent: [ 'Saturation' ],
  SaturationIntentB: [ 'Saturation' ],
  TargetPositionIntent: [ 'TargetPosition' ],
  gradIntent: [ 'TargetTemperature' ] }
[2017-12-18 13:03:21] prefixOfIntent:
[2017-12-18 13:03:21] { OnIntent: undefined,
  prozentIntent: 'auf',
  HueIntent: 'auf',
  HueIntentB: undefined,
  SaturationIntent: 'auf',
  SaturationIntentB: undefined,
  TargetPositionIntent: undefined,
  gradIntent: 'auf' }
[2017-12-18 13:03:21] suffixOfIntent:
[2017-12-18 13:03:21] { OnIntent: undefined,
  prozentIntent: 'prozent',
  HueIntent: undefined,
  HueIntentB: undefined,
  SaturationIntent: undefined,
  SaturationIntentB: undefined,
  TargetPositionIntent: undefined,
  gradIntent: 'grad' }
[2017-12-18 13:03:21] alexaTypes:
[2017-12-18 13:03:21] { light: [ 'licht', 'lampen' ],
  blind:
   [ 'rolladen',
     'rolläden',
     'jalousie',
     'jalousien',
     'rollo',
     'rollos' ] }
[2017-12-18 13:03:21] roomOfEcho:
[2017-12-18 13:03:21] {}
[2017-12-18 13:03:21] fhemIntents:
[2017-12-18 13:03:21] { FHEMgutenMorgenIntent: 'gutenMorgen',
  FHEMguteNachtIntent: 'guteNacht' }
[2017-12-18 13:03:21] [FHEM] got: 5 results
[2017-12-18 13:03:21] [FHEM] mappings for BS_SW_02: { On:
   { reading: 'state',
     valueOff: '/off|A0|000000/',
     cmdOn: 'on',
     cmdOff: 'off' } }
[2017-12-18 13:03:21] [FHEM] BS_SW_02 is switch
[2017-12-18 13:03:21] [FHEM] BS_SW_02 has
[2017-12-18 13:03:21] [FHEM]   On [state;on,off]
[2017-12-18 13:03:21] [FHEM] { reading: 'state',
  valueOff: '/off|A0|000000/',
  cmdOn: 'on',
  cmdOff: 'off',
  device: 'BS_SW_02',
  informId: 'BS_SW_02-state',
  characteristic_type: 'On',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'FHEM' } }
  2017-12-18 13:03:21 caching: BS_SW_02-state: off
[2017-12-18 13:03:21] [FHEM] mappings for Test: { On:
   { reading: 'state',
     valueOff: '/off|A0|000000/',
     cmdOn: 'on',
     cmdOff: 'off' } }
[2017-12-18 13:03:21] [FHEM] Test is switch
[2017-12-18 13:03:21] [FHEM] Test has
[2017-12-18 13:03:21] [FHEM]   On [state;on,off]
[2017-12-18 13:03:21] [FHEM] { reading: 'state',
  valueOff: '/off|A0|000000/',
  cmdOn: 'on',
  cmdOff: 'off',
  device: 'Test',
  informId: 'Test-state',
  characteristic_type: 'On',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'FHEM' } }
  2017-12-18 13:03:21 caching: Test-state: on
[2017-12-18 13:03:21] [FHEM] d_FHEM.Alexa: no service type detected
[2017-12-18 13:03:21] [FHEM] no device created for d_FHEM.Alexa (dummy)
[2017-12-18 13:03:21] [FHEM] d_FHEM.Alexa.Status: no service type detected
[2017-12-18 13:03:21] [FHEM] no device created for d_FHEM.Alexa.Status (dummy)
[2017-12-18 13:03:21] [FHEM] myAlexa: no service type detected
[2017-12-18 13:03:21] [FHEM] no device created for myAlexa (alexa)

Die config files und Zertifikate in den home Verzeichnissen für alexa und roland sind identisch, gehören aber jeweils dem entsprechenden user.
Die config.json sieht jetzt so aus:
    "alexa": {
        "port": 3000,
        "name": "Alexa TEST",
        "keyFile": "./key.pem",
        "certFile": "./cert.pem",
        "nat-pmp": "",
        "nat-upnp": false,
        "applicationId": "",
        "oauthClientID": "amzn1.application-oa2-client.###client-id aus dem Amazon security profile###"
    },

    "connections": [
        {
            "name": "FHEM",
            "server": "127.0.0.1",
            "port": "8083",
            "webname": "fhem",
            "auth": {"user": "meinfhemuser", "pass": "meinpasswd"},
            "ssl": true,
            "filter": "room=Alexa"
        }
    ]
}

applicationId ist nach Wiki-Empfehlung leer: Wenn man nur den SmartHome-Skill verwenden möchte, kann dieser Eintrag leer bleiben.
Wenn ich jetzt von Alexa eine Gerätesuche starte, kommt:[2017-12-18 13:05:20] event not supported
[2017-12-18 13:05:20] ERROR: UnsupportedOperationError from ::ffff:34.242.74.27
response :{"header":{"name":"UnsupportedOperationError","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Control","messageId":"ea696ac3-196b-4a29-8582-94818022f5fd"},"payload":{}}
[2017-12-18 13:05:20] event not supported
[2017-12-18 13:05:20] ERROR: UnsupportedOperationError from ::ffff:34.242.74.27
response :{"header":{"name":"UnsupportedOperationError","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Control","messageId":"9141bfba-2e5b-463b-83fd-d1387b493bd7"},"payload":{}}

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

Prof. Dr. Peter Henning

Haben wir eine Möglichkeit, in den Skill eine Abfrage einzubauen, von welchem Echo Device er aufgerufen wurde ?

Mit zunehmender Verteilung meiner Dosen ergibt sich das Problem, dass ich nicht alles von allen steuern lassen möchte.


LG

pah

hauwech

Zitat von: amenomade am 18 Dezember 2017, 12:26:54
Prüf mal den Code deiner Lambda Funktion.
In Zeile 42 kommt eine Warnung, daß createError und ERROR_TARGET_OFFLINE nicht definiert sind.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

justme1968

@pah: im alexa device gibt es ein reading das angibt von welchem echo ein kommando ausgelöst wurde.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Prof. Dr. Peter Henning

#3471
@justme1968: Ich sehe zwar die Stelle in der server.js, allerdings wird das Reading bei mir nicht gesetzt.

Edit: Nach Neustart von FHEM geht es.

LG

pah

amenomade

@hauwech:
ZitatIn Zeile 42 kommt eine Warnung, daß createError und ERROR_TARGET_OFFLINE nicht definiert sind.
Den Fehler habe ich auch. Das sollte nicht das Problem sein.

Die Response, die man sieht, ist immer noch keine Antwort auf einem Discovery. Es sieht eher so aus, wie eine Antwort auf einem Test in der Aws Console.

Sowas solltest Du sehen:
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery......
response :{"header":{"name":"DiscoverAppliancesResponse","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Discovery","messageId":".....


In der AWS Console, ist der Trigger "Alexa Smart Home" da (im rechten Teil, unter dem Name von deiner Funktion)?
Und ganz unten, ist es aktiviert? Stimmt dort den "amzn1.ask.skill......." mit derSkillId des Smart Home Skills in dem Developer Portal?
(siehe Bild)

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

hauwech

#3473
Zitat von: amenomade am 18 Dezember 2017, 22:57:55
@hauwech:Den Fehler habe ich auch. Das sollte nicht das Problem sein.
Die Response, die man sieht, ist immer noch keine Antwort auf einem Discovery. Es sieht eher so aus, wie eine Antwort auf einem Test in der Aws Console.

Sowas solltest Du sehen:
**** Received Directive: {"header":{"namespace":"Alexa.ConnectedHome.Discovery......
response :{"header":{"name":"DiscoverAppliancesResponse","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Discovery","messageId":".....
Bei einem Discovry sehe ich lokal nur:Dez 19 10:05:39 fhem-nuc alexa[7223]: [2017-12-19 10:05:39] event not supported
Dez 19 10:05:39 fhem-nuc alexa[7223]: [2017-12-19 10:05:39] ERROR: UnsupportedOperationError from ::ffff:34.248.13.27
Dez 19 10:05:39 fhem-nuc alexa[7223]: response :{"header":{"name":"UnsupportedOperationError","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Control","messageId":"52ce5a23-f1c0-4708-bf0f-c2d9b636bddc"},"payload":{}}
Dez 19 10:05:39 fhem-nuc alexa[7223]: [2017-12-19 10:05:39] event not supported
Dez 19 10:05:39 fhem-nuc alexa[7223]: [2017-12-19 10:05:39] ERROR: UnsupportedOperationError from ::ffff:34.248.13.27
Dez 19 10:05:39 fhem-nuc alexa[7223]: response :{"header":{"name":"UnsupportedOperationError","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Control","messageId":"9d582897-2d3a-4fed-b1e7-0db338d91f66"},"payload":{}}

Was mich stutzig macht: bei allen Events ist immer von payloadVersion 2 die Rede. Die läßt sich für einen Skill nicht mehr auswählen. Ich weiß aber, daß bei meinen ersten Versuchen letzten Samstag die Version 2 noch wählbar war.
ZitatIn der AWS Console, ist der Trigger "Alexa Smart Home" da (im rechten Teil, unter dem Name von deiner Funktion)?
Und ganz unten, ist es aktiviert? Stimmt dort den "amzn1.ask.skill......." mit derSkillId des Smart Home Skills in dem Developer Portal?
(siehe Bild)
Der Trigger paßt (zumindest dem äußern Anschein nach). Ich habe allerdings nur den "Alexa Smart Home" Trigger, den "Alexa Skills Kit" braucht man - wenn ich das richtig verstanden habe - nur für den Custom Skill. Die ID paßt zum Skill und "enabled" ist er auch. Ich hatte zwischendurch alles auf Amazon-Seite weggeschmissen und komplett neu angefangen - bis auf das Security Profile und die Role.
Muß man eigentlich beim Skill auch die letzten beiden Schritte "Publishing Information" und "Privacy & Compliance" ausführen? Das habe ich nicht gemacht, weil im Wiki davon nix steht und ich denke, das braucht man nur, wenn man den Skill offiziell veröffentlichen möchte.

Bei meinem ersten Versuch bin ich streng nach Wiki vorgegangen und hatte auch den Custom Skill angelegt. DER hatte funktioniert, mich hatte aber gestört, daß immer sagen muß: "Alexa, sage fhem, schalte dies ein". Das bekomme ich meiner Familie nicht beigebogen, deshalb versuche ich verzweifelt, den Smart Home Skill ans Laufen zu kriegen.

Nebenher versuche ich natürlich, die beiden Threads nach Hinweisen durchzuackern, aber das ist mit 232 bzw. 134 Seiten nicht mal eben so schnell gemacht.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

hauwech

Warum kommt bei mir:Alexa.ConnectedHome.ControlanstattAlexa.ConnectedHome.Discovery
- Ist doch der Trigger falsch?
- Hängt das mit der payloadVersion2/3 zusammen?

Ich habe jetzt mittlerweile alles neu gemacht. Auf Amazon-Seite (Trigger, Skills) dreimal, lokal habe ich alexa nach Wiki auch nochmal komplett neu installiert. Ich meine, ich habe jeden Schritt aus dem Wiki befolgt. Leider komme ich keinen Schritt weiter.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS

alexclp93

Ich hab den gleich Fehler wie hauwech.

Ich kann auch nur noch die Payload Version 3 auswählen.


response :{"header":{"name":"UnsupportedOperationError","payloadVersion":"2","namespace":"Alexa.ConnectedHome.Control","messageId":"71616e96-ea7d-4e3b-983c-c1c84d5479e8"},"payload":{}}
[12/19/2017, 3:47:37 PM] event not supported
[12/19/2017, 3:47:37 PM] ERROR: UnsupportedOperationError from ::ffff:52.50.212.67

daxstar

#3476
das kommt daher, dass die alexa-fhem Version 0.3.4 die Payload Version 3 des Alexa Smart Home Triggers schlicht nicht supported
die Version 0.3.5 ist da zu mindestens besser drauf vorbereitet, funktionstüchtig ist diese Version allerdings ebenso nicht,
da dort hard coded solche Sachen während des Discovery Vorgangs auftauchen:

payload = {
            "endpoints": [
                {
                    "capabilities": [
                        {
                            "interface": "Alexa.RemoteVideoPlayer",
                            "type": "AlexaInterface",
                            "version": "1.0"
                        },
                        {
                            "interface": "Alexa.ChannelController",
                            "type": "AlexaInterface",
                            "version": "1.0"
                        },
                        {
                            "interface": "Alexa.PlaybackController ",
                            "type": "AlexaInterface",
                            "version": "1.0"
                        }
                    ],
                    "endpointId": "videoDevice-001",
                    "description": "Device description for the customer",
                    "displayCategories": [],
                    "friendlyName": "video",
                    "manufacturerName": "Amazon",
                    "cookie": {}

                }
            ]
        };

Das ist das Sample der Amazon API doc. Wir müssen wohl noch abwarten.

oder gibt es mittlerweile schon eine alexa-fhem 0.3.6 ?


daxstar

ok, allerdings auch hier noch keinen Support der neuen API...

hauwech

#3479
Ich habe jetzt nochmal einen Custom Skill angelegt, der funktioniert auf Anhieb. Muß man sich mit dem "Alexa, sag fhem:schalte Test ein" möglicherweise erstmal anfreunden. Der WAF leidet aber  :(
Schade, daß ich meinen "payloadVersion V2"-Skill vom Samstag weggeschmissen habe, da ging's noch.

Gruß Roland
Fhem auf Intel NUC11TNKi5+M2 NVMe+32GB RAM mit Ubuntu 22.04 LTS