[alexa-fhem | Custom Skills] Eure Setups

Begonnen von prodigy7, 28 Januar 2017, 13:59:09

Vorheriges Thema - Nächstes Thema

myrave

Ich möchte den Custom Skill dazu nutzen, um den Status von Geräten abzufragen, z.B. "Alexa frag FHEM status Waschmaschine"

Das Gerät wurde unter FHEM_Device korrekt gelistet und hat die Attribute AlexaName und Alias "Waschmaschine".

Ich bekomme immer die Fehlermeldung: "Ich habe kein Gerät mit Namen waschmaschine im Raum unknown gefunden."
--> Ich will die Abfrage ja ohne Raum machen, aber scheinbar habe ich dort etwas falsch eingestellt - nur wo?

In den Sample Utterances gibt es folgenden Eintrag, die für mich keinen Raum benötigt - aber irgendwo fehlt noch etwas:
StatusIntent {Device} status

Alternativ funktioniert die Abfrage nach einem Raum - ohne Angabe des Gerätes, z.B. "Alexa frag FHEM status Waschraum"
Es werden korrekt die dort enthaltenen Geräte mit Status zurückgegeben, z.B. Waschmaschine ist aus.

Danke für den entscheidenden Tipp, wo ich hier noch eine Änderung machen muss, damit ich direkt nach dem Gerät fragen kann. :)

justme1968

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

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

myrave

#47
Danke für die schnelle Antwort, habe es gerade installiert - einen Schritt weiter, noch ein kleines Problem:

ERROR: TypeError: Cannot read property 'roomsOfName' of undefined

Muss ich irgendwo noch eine weiteres Attribut hinzufügen?

Oder kann ich den echoRoom auf "Alexa" setzen, da alle Geräte ja dieser Gruppe in FHEM angehören?

justme1968

wann genau kommt diese meldung? was steht auf der konsole?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

myrave

Ich habe zum Testen den Befehl "Alexa frag FHEM status Waschmaschine" über Test bei developers.amazon.com im Custom Skill abgesetzt.

Service Request
{
  "session": {
    "sessionId": "SessionId.xxx",
    "application": {
      "applicationId": "amzn1.ask.skill.xxx"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.xxx"
    },
    "new": true
  },
  "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.xxx",
    "locale": "de-DE",
    "timestamp": "2017-04-26T08:01:37Z",
    "intent": {
      "name": "StatusIntent",
      "slots": {
        "Device": {
          "name": "Device",
          "value": "Waschmaschine"
        },
        "preposition": {
          "name": "preposition"
        },
        "Room": {
          "name": "Room"
        }
      }
    }
  },
  "version": "1.0"
}


Service Response
1. The response is invalid

Im roten X steht folgendes ... copy and paste geht leider nicht:
Parse error on line 1:
The response is inva
Expecting 'String', 'Number' ... got 'undefined'


Im Terminal seh ich folgende Ausgabe:

**** Received Directive: {"version":"1.0","session":{"new":true,"sessionId":"SessionId.xxx","application":{"applicationId":"amzn1.ask.skill.xxx"},"attributes":{},"user":{"userId":"amzn1.ask.account.xxx"}},"request":{"type":"IntentRequest","requestId":"EdwRequestId.xxx","timestamp":"2017-04-26T08:01:37Z","locale":"de-DE","intent":{"name":"StatusIntent","slots":{"preposition":{"name":"preposition"},"Room":{"name":"Room"},"Device":{"name":"Device","value":"Waschmaschine"}}}}}
[4/26/2017, 10:02:43 AM] StatusIntent
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20myAlexa%20intent%20IntentRequest%20StatusIntent&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20myAlexa%20echoId%20unknown&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20myAlexa%20echoRoom%20unknown&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]     caching: On: 0 (as number; from 'off')
[4/26/2017, 10:02:43 AM] ERROR: TypeError: Cannot read property 'roomsOfName' of undefined from ::ffff:52.209.132.237

justme1968

beim testen musst du aufpassen:
- normalerweise lässt man  das 'alexa, frage fhem' weg. es wird nur der text eingegeben der direkt an den skill geht
- ist das invocation word bei dir FHEM oder fhem? die schreibweise ist an dieser stelle wichtig.

der service request scheint aber trotzdem korrekt zu sein. ich habe die oben verlinkte version noch mal aktualisiert. bitte schau mal ob es damit besser geht.

wenn es immer noch nicht geht: starte alexa-fhem mal mit --debug und teste mit einem gesprochenen kommando.

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

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

myrave

Hey justme1968,

habe die neue Version installiert und es funktioniert jetzt. Vielen Dank dafür und auch generell für den Engagement für Alex FHEM, echt klasse!

Am Testen lag es nicht, das war schon korrekt gewesen. Ich habe auch jeweils andere Befehle ausprobiert, die korrekt funktioniert haben. :)

ohosch

Wie bekomme ich in dem Beispiel mit der Temperatur es hin, wenn ich den Raum draußen ohne preposition abfragen will?

{alexaRoomTemperature($preposition,$Room)}=wie {preTemperature:warm;kalt} ist es {preposition} {Room}

Die Frage "Wie warm ist es im Bad" klappt prima, aber bei "Wie kalt ist es draußen" wird der Raum nicht geliefert. Wenn ich frage "Wie kalt ist es im draußen" funktioniert die Abfrage......

  "FHEMperlCodeIntent_preTemperature": {
          "name": "FHEMperlCodeIntent_preTemperature",
          "value": "kalt"
        },
        "preposition": {
          "name": "preposition"
        },
        "Room": {
          "name": "Room"
        }

justme1968

mach die präposition optional in dem du eine zweite sample utterance ohne {preposition} angibst:{alexaRoomTemperature($preposition,$Room)}=wie {preTemperature:warm;kalt} ist es {preposition} {Room}|wie {preTemperature:warm;kalt} ist es {Room}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ohosch

Hi Justme,
das könnte ich mal versuchen.
Jetzt ist die Frage ob ich Amazon die Sample utterance einfach unterjuble, oder sie von FHEM erzeugen lasse, dann benötige ich aber einen neuen fhemIntentes Eintrag.
Ich muss auch mal sehen was meine Ausführende Routine in der MyUtils dazu sagt, wenn ein Parameter fehlt. Ich hoffe der wird dann einfach leer übergeben.
Wenn alle Stricke reißen mache ich einen eigenen Intent für "wie kalt ist es draußen". Da brauche ich dann auch keinen Parameter mehr ;).

Ich hatte erhofft, dass man einen Parameter tatsächlich als optional kennzeichnen kann. Vielleicht kommt das noch mal in der Zukunft.

Viele Grüße
Ohosch

justme1968

#55
so wie oben geschrieben kannst du in einem fhemIntent mehrtet sampler utterances mit | getrennt angeben.

d.h. du brauchst keinen zweiten fhemIntent.

so ist das auch der offizielle api weg. bei optionalen parameter gibt man je ein beispiel mit und ohne an.

der andere weg ist nicht preposition zu verwenden sondern einen eigenen custom
slot type und hier am anfang ein leeres element einzubauen. ich weiß aber gerade nicht ob das im modul schon komplett eingebaut ist.

fehlende parameter werden als undef übergeben. das musst du in deinem
code berücksichtigen und gut ist.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ohosch

klappt leider nicht  :(

Fhem baut mit dem oder im Intent wie erwartet einen 2ten Eintrag in der Sample Utterance.
Amazon mag es allerdings nicht, wenn wenn derselbe Slot 2 mal durch den intent verwendet wird, und schmeisst mir eine Fehlermeldung. 

Ich glaube ich muss das doch durch einen komplett eigenen Intetnt mit eigenem Custom Slot lösen.

Viele Grüße
Ohosch

justme1968

der slot darf nur ein mal vorhanden sein. wo kommt der zweite her?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

ohosch

Der Slot ist nur einmal vorhanden.
Amazon sagt aber dass er 2 mal vom Intetnt verwendet wird. Ich muss am WE mal genauer schauen warum. Am 2ten Eintrag in der Sample Utterance lag es nicht. Nachdem ich den Manuell raus genommen habe konnte ich das Interaction Model immer noch nicht speichern.

justme1968

schau noch mal nach.

- jeden intent darf es nur ein mal geben. jeweils mit allen (auch den eventuell unbenutzten slots)
  wenn hier etwas doppelt ist -> das wäre ein fehler im alexa modul. oder copy&paste fehler.
- die custom slots darf es je nur ein mal geben. wenn hier etwas doppelt ist -> fehler im modul. oder copy&paste fehler.
- die sample utterances darf es so oft geben wie man es braucht. jeweils mit anderen sätzen und anderer kombination an slot typen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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