alexa-fhem: amazon alexa smart home skill für fhem, api version 3

Begonnen von justme1968, 19 Dezember 2017, 22:16:30

Vorheriges Thema - Nächstes Thema

MephistoJB

Hi Leute, sagt mal hat schonmal jemand darüber nachgedacht mit dem skill hier kodi über fhem zu steuern? Durch das kodi Plugin in fhem kann man ja fast alles steuern. Was wäre wohl dafür notwendig?

cs-online

Hallo,

ich verzweifel gerade am Umstieg auf Custom V3-API. Die Amazon-Seiten sehen alle komplett anders aus als im Wiki. Ich habe die Checkliste mit den 4 Bereichen Invocation-Name (genannt wie vorher), in Intents, samples & Slots habe ich das Jason aus dem alten Skill reinkopiert, dann build gemacht, unter Endpoint die Lamda-ARN vom alten Skill reinkopiert. alles sauber durchgegangen, bei Test kommt immer "bei der Antwort.......". Ich habe vprher in der Alexa-App den alten Skill deaktiviert, der neue war schon aktiviert.

Hat jemand eine Idee, wo ich suchen kann ?
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

cs-online

EDIT: Ich habe auch in der vorhandenen Lambda (vom bisherigen Skill) die neue Skill-ID als zusätzlichen Trigger unter "Alexa Smart Home", da wo auch der bisherige Skill eingetragen war. Aber gleiches Ergebnis. Wenn ich allerdings den "alten" Skill in der App wieder aktiviere, dann kann ich auch im neuen im Test zumindest schon mal zum "hallo, wie kann ich helfen" vordringen. Muss ich denn vom "neuen" Skill sonst noch irgendwo etwas eintragen ?
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

cs-online

na klar, auch in die config.json.... und siehe da, nun läuft das auch......
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

stefanru

Hi,

bin neu im Alexa bereich.
Habe es soweit am laufen, mit Schaltern, Max Thermostaten und Temperatur Sensoren.

Leider klappt es noch nicht mit den MAX Fensterkontakten. Er wird garnicht angezeigt in der Alexa App.
Als generic type habe ich contact genommen.

Im Alexa log:
[2018-04-07 01:41:08] [FHEM] MAX_05e9f9 is ContactSensor
[2018-04-07 01:41:08] [FHEM] MAX_05e9f9 has
[2018-04-07 01:41:08] [FHEM]   StatusLowBattery [battery]
[2018-04-07 01:41:08] [FHEM]   FirmwareRevision [firmware]
[2018-04-07 01:41:08] [FHEM]   ContactSensorState [state]
[2018-04-07 01:41:08] [FHEM]   CurrentDoorState [state]
[2018-04-07 01:41:08] [FHEM] { reading: 'battery',
  values: [ 'ok:BATTERY_LEVEL_NORMAL', '/.*/:BATTERY_LEVEL_LOW' ],
  device: 'MAX_05e9f9',
  informId: 'MAX_05e9f9-battery',
  characteristic_type: 'StatusLowBattery',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'FHEM' },
  value2homekit: { ok: 'BATTERY_LEVEL_NORMAL' },
  value2homekit_re: [ { re: '.*', to: 'BATTERY_LEVEL_LOW' } ] }
  2018-04-07 01:41:08 caching: MAX_05e9f9-battery: ok
[2018-04-07 01:41:08] [FHEM] { reading: 'firmware',
  _isInformation: true,
  device: 'MAX_05e9f9',
  informId: 'MAX_05e9f9-firmware',
  characteristic_type: 'FirmwareRevision',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'FHEM' } }
  2018-04-07 01:41:08 caching: MAX_05e9f9-firmware: 1.3
[2018-04-07 01:41:08] [FHEM] { reading: 'state',
  values: [ 'closed:CONTACT_DETECTED', '/.*/:CONTACT_NOT_DETECTED' ],
  device: 'MAX_05e9f9',
  informId: 'MAX_05e9f9-state',
  characteristic_type: 'ContactSensorState',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'FHEM' },
  value2homekit: { closed: 'CONTACT_DETECTED' },
  value2homekit_re: [ { re: '.*', to: 'CONTACT_NOT_DETECTED' } ] }
  2018-04-07 01:41:08 caching: MAX_05e9f9-state: closed
[2018-04-07 01:41:08] [FHEM] { reading: 'state',
  values: [ 'closed:CLOSED', '/.*/:OPEN' ],
  device: 'MAX_05e9f9',
  informId: 'MAX_05e9f9-state',
  characteristic_type: 'CurrentDoorState',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'FHEM' },
  value2homekit: { closed: 'CLOSED' },
  value2homekit_re: [ { re: '.*', to: 'OPEN' } ] }


Im FHEM.js habe ich das gesehen:
  } else if( s.Internals.TYPE == 'MAX'
             && s.Internals.type == 'ShutterContact' ) {
    this.service_name = 'ContactSensor';
    this.mappings.ContactSensorState = { reading: 'state', values: ['closed:CONTACT_DETECTED', '/.*/:CONTACT_NOT_DETECTED']  };
    this.mappings.CurrentDoorState = { reading: 'state', values: ['closed:CLOSED', '/.*/:OPEN']  };


Das reading des Kontakts ist:


Internals:
   CULMAX1_MSGCNT 66
   CULMAX1_TIME 2018-04-07 13:22:13
   DEF        ShutterContact 05e9f9
   IODev      CULMAX1
   LASTInputDev CULMAX1
   MSGCNT     66
   NAME       MAX_05e9f9
   NR         929
   RSSI       -41.5
   STATE      opened
   TYPE       MAX
   addr       05e9f9
   backend    CULMAX1
   rferror    0
   type       ShutterContact
   READINGS:
     2018-04-07 13:22:13   RSSI            -41.5
     2018-04-07 13:22:13   battery         ok
     2018-03-18 11:21:45   firmware        1.3
     2018-03-18 11:21:45   groupid         0
     2018-03-18 11:21:45   msgcnt          24
     2018-04-07 13:22:13   onoff           1
     2018-04-07 13:22:13   state           opened
     2018-03-18 11:21:45   testresult      15
   internals:
     interfaces switch_active;battery
Attributes:
   IODev      CULMAX1
   alexaName  Fensterbüro
   alexaRoom  Büro
   alias      Fenster Büro
   devStateIcon closed:fts_window_2w@green opened:fts_window_2w_open_l@red
   genericDeviceType contact
   icon       fts_window_2w
   room       Alexa,MAX
   sortby     8


Jemand eine Idee?

Gruß,
Stefan

Prof. Dr. Peter Henning

Kann mir jemand sagen, wie ich erreichen kann, dass nicht jedesmal,wenn mein RollladenIntent aus einem der Skills aufgerufen wird, versucht wird, einen nummerischer Wert einzusetzen ?

Alexa-fhem ist Version 0.4.4, das Verhalten ist unabhängig dvon, ob der genericDeviceType des rollladen_Device auf switch oder blind ist, und auch das alexaMapping ist mit
ZitatRollladen:verb=mach:mache,articles=den,values=hoch:100;runter:0
Rollladen:verb=fahr:fahre,articles=den,values=hoch:100;runter:0
Rollladen:verb=stell:stelle,valuePrefix=auf,values=AMAZON.NUMBER,valueSuffix=prozent
eigentlich ok.

Der Test mit "Fahr den Rollladen hoch" kommt beim rollladen-Device immer mit "set pct NaN" an (klar, es wird ja kein Zahlenwert erkannt).

LG

pah

P.S.: ich schlage vor, bei der nächsten Überarbeitung von Alexa-fhem "rolladen" und "rolläden" durch "rollladen" und "rollläden" zu ersetzen.

justme1968

was sagt denn die debug ausgabe von alexa-fhem? dort sollte eigentlich zu sehen sein das hoch auf 100 gemapped wird. oder wenigstens ein hinweis warum das nicht passiert. am besten mal mit --debug starten.

der grund für rolladen statt rollladen ist das alexa zumindest damals tatsächlich immer rolladen erkannt hat und das wort nur mit zwei l im event geschickt hat. wenn es bei dir mit drei l geht haben sie das inzwischen geändert.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Prof. Dr. Peter Henning

Haben sie - es kommt "Rollladen".

Morgen bin ich ziemlich im Stress, werde also am Sonntag mit --debug testen.
Und das Mapping ist unabhängig favon, ob das Device  "rolladen" oder "rollladen" heißt, und auch unabhängig davon, welchen genericDevicetype es hat. Zumindest das scheint mir nicht erwünscht zu sein.

LG

pah

Prof. Dr. Peter Henning

"Kurioser und kurioser", wie es bei Alice im Wunderland heißt.

Der entscheidende Faktor ist, dass es bei einem Rollladen (genericDeviceType=blind) ein Reading geben muss, das entweder "position" oder "pct" heißt. Dann werden automatisch die beiden Characteristics CurrentPosition und TargetPosition definiert, und bereits mit dem normalen SmartHome Skill werden die Sätze erkannt:
Zitat
    "Stell(e) den Rollladen auf xx Prozent" => position wird auf xx gesetzt
    "Mach(e) den Rollladen hoch/runter" => position wird um 25% erhöht / erniedrigt.
Die 25% sind nirgendwo dokumentiert.

Nicht erkannt wird der Satz "Mach(e) den Rollladen auf".

Klar habe ich dann den Custom Skill erweitert - und stolpere im Moment darüber, dass ich darin zwar alles definieren kann und ein Build auch stattfindet - aber die Kiste das Custom Interaction Model komplett ignoriert, weil derzeit Alexa den Rollladen als "offline" deklariert...

LG

pah

Ich habe jetzt einmal die Dinge, die ich herausgefunden habe, in der Wiki-Seite https://wiki.fhem.de/wiki/Alexa_und_Mappings dokumentiert.

Pfriemler

#234
Alexa hat sich am Wochenende köstlich bei der versammelten Verwandtschaft blamiert. Die über einen Homematic-Blind-Aktor gesteuerte "Markise" ließ sich nicht steuern. Das bei allen Dimmern und den Rademacher-Rolladen funktionierende "Stelle (xy) auf 50 Prozent!" endete hier immer bei "Ich habe Markise nicht gefunden.". Dabei meinte ich, dass das alles mal funktioniert hatte...

Heute dann kam ich darauf, mal "Fahre Markise auf 50 Prozent" zu sagen. Und siehe da: Markise wird gesteuert. Auch die Rademacher-Rolladen (mit zwei L, weil ich sie "Rollo" genannt habe  ;)) fahren bei "fahren" (aber eben auch bei "stellen").

Unausgegoren, das.

edit: Ist das wieder mal nur bei mir so oder was haben andere für Erfahrungen gemacht? Nicht dass ich das Wiki unnötigerweise ergänze ...?
edit2: Ich habe nirgends im Mapping das Wort "fahre" definiert. Ich habe eigentlich überhaupt keine Mappings mit "Rolladen:" definiert.



"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Prof. Dr. Peter Henning

Das kommt offenbar aus dem SmartHome Skill - so wie bei mir auch.

Aus meiner Sicht haben wir hier noch ein gewaltiges Problem: Die Kombination aus FHEM, den homebridge mappings und den ganzen Alexa-Einstellungen ist so komplex, un-intuitiv und teilweise in sich widersprüchlich, dass man ohne saubere Dokumentation kaum etwas Neues machen kann. Und diese Dokumentation ist eben nur rudimentär.

Hilft nur Eines: Wiki konsequent ausbauen, und die tatsächlichen Abläufe auch in den Javascript-Dateien auseinanderfieseln und dokumentieren.

LG

pah

TomLee

ZitatDie 25% sind nirgendwo dokumentiert.

Das war hier schon Thema, kann auch jederzeit von Amazon geändert werden, hat man im Smart Home Skill keinen Einfluß drauf.

ZitatIst das wieder mal nur bei mir so oder was haben andere für Erfahrungen gemacht? Nicht dass ich das Wiki unnötigerweise ergänze ...?

Meine HM-Aktoren fahren nach wie vor mit 'Stelle <alexaname> auf Prozentwert'.
Das 'Fahre <alexaname> hoch/runter' (25 % Schritte) verstanden wird ist schon länger, 'Fahre <alexaname> auf Prozentwert' hab ich ehrlich gesagt nie ausprobiert aber schön das es funktioniert


ZitatIch habe nirgends im Mapping das Wort "fahre" definiert. Ich habe eigentlich überhaupt keine Mappings mit "Rolladen:" definiert.

Im Smart Home Skill kannst du Fahre und Stelle nicht mappen.


Gruß

Thomas







hondong

Hallo Zusammen,

ich habe mir das Alexa FHEM nun installiert.
Die Verbindung ist soweit vorhanden. Im Log der Lambda sehe ich keine Fehler.
Auch sehe ich, dass die Verbindung aufgebaut wird.
Leider findet Alexa bei mir aber keine Geräte.
Laut Log hat er Fernseher und ESSTISCH_LICHT als Geräte gefunden.
Im Skill werden Sie aber nicht gefunden.
Hier noch das Log zum Start:

[4/20/2018, 8:14:16 PM] using /home/pi/.alexa/config.json
[4/20/2018, 8:14:16 PM] ---
[4/20/2018, 8:14:16 PM] this is alexa-fhem 0.4.4
[4/20/2018, 8:14:16 PM] Fetching FHEM devices...
[4/20/2018, 8:14:16 PM] [FHEM] starting longpoll: http://192.168.150.94:8083/fhem?XHR=1&inform=type=status;addglobal=1;filter=.*;since=null;fmt=JSON&timestamp=1524248056522
[4/20/2018, 8:14:16 PM] Server listening on: https://:::3000
[4/20/2018, 8:14:16 PM] [FHEM] Checking devices and attributes...
[4/20/2018, 8:14:16 PM] [FHEM]   executing: http://192.168.150.94:8083/fhem?cmd=%7BAttrVal(%22global%22,%22userattr%22,%22%22)%7D&fwcsrf=fhem_51489420605694.2&XHR=1
[4/20/2018, 8:14:16 PM] [FHEM]   executing: http://192.168.150.94:8083/fhem?cmd=jsonlist2%20TYPE=alexa&fwcsrf=fhem_51489420605694.2&XHR=1
[4/20/2018, 8:14:16 PM] [FHEM] Fetching FHEM devices...
[4/20/2018, 8:14:16 PM] [FHEM] fetching: http://192.168.150.94:8083/fhem?cmd=jsonlist2%20room=Alexa&fwcsrf=fhem_51489420605694.2&XHR=1
[4/20/2018, 8:14:16 PM] [FHEM] got: 3 results
[4/20/2018, 8:14:16 PM] [FHEM] ESSTISCH_LICHT is switch
[4/20/2018, 8:14:16 PM] [FHEM] ESSTISCH_LICHT has
[4/20/2018, 8:14:16 PM] [FHEM] Fernseher is switch
[4/20/2018, 8:14:16 PM] [FHEM] Fernseher has
[4/20/2018, 8:14:16 PM] [FHEM] MyAlexa: no service type detected
[4/20/2018, 8:14:16 PM] [FHEM] no device created for MyAlexa (alexa)
[4/20/2018, 8:14:16 PM] [FHEM] alexa device is MyAlexa
[4/20/2018, 8:14:16 PM] [FHEM] MyAlexa is switch
[4/20/2018, 8:14:16 PM] [FHEM] MyAlexa has
[4/20/2018, 8:14:16 PM] [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,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
[4/20/2018, 8:14:16 PM] [FHEM]   executing: http://192.168.150.94:8083/fhem?cmd=%7B$defs%7BMyAlexa%7D-%3E%7B%22active%22%7D%20=%201;;undef%7D;%7B$defs%7BMyAlexa%7D-%3E%7B%22alexa-fhem%20version%22%7D%20=%20%220.4.4%22%7D;%7B$defs%7BMyAlexa%7D-%3E%7B%22active%22%7D%20=%200;;undef%7D&fwcsrf=fhem_51489420605694.2&XHR=1
[4/20/2018, 8:14:16 PM] perfectOfVerb:
[4/20/2018, 8:14:16 PM] { stelle: 'gestellt',
  schalte: 'geschaltet',
  'färbe': 'gefärbt',
  mach: 'gemacht' }
[4/20/2018, 8:14:16 PM] verbsOfIntent:
[4/20/2018, 8:14:16 PM] [ OnIntent: [ 'schalte' ],
  prozentIntent: [ 'stelle' ],
  HueIntent: [ 'stelle' ],
  HueIntentB: [ 'färbe' ],
  SaturationIntent: [ 'stelle' ],
  SaturationIntentB: [ 'sättige' ],
  TargetPositionIntent: [ 'mach' ],
  gradIntent: [ 'stelle' ] ]
[4/20/2018, 8:14:16 PM] characteristicsOfIntent:
[4/20/2018, 8:14:16 PM] { OnIntent: [ 'On' ],
  prozentIntent: [ 'Brightness', 'TargetPosition', 'Volume' ],
  HueIntent: [ 'Hue' ],
  HueIntentB: [ 'Hue' ],
  SaturationIntent: [ 'Saturation' ],
  SaturationIntentB: [ 'Saturation' ],
  TargetPositionIntent: [ 'TargetPosition' ],
  gradIntent: [ 'TargetTemperature' ] }
[4/20/2018, 8:14:16 PM] prefixOfIntent:
[4/20/2018, 8:14:16 PM] { OnIntent: undefined,
  prozentIntent: 'auf',
  HueIntent: 'auf',
  HueIntentB: undefined,
  SaturationIntent: 'auf',
  SaturationIntentB: undefined,
  TargetPositionIntent: undefined,
  gradIntent: 'auf' }
[4/20/2018, 8:14:16 PM] suffixOfIntent:
[4/20/2018, 8:14:16 PM] { OnIntent: undefined,
  prozentIntent: 'prozent',
  HueIntent: undefined,
  HueIntentB: undefined,
  SaturationIntent: undefined,
  SaturationIntentB: undefined,
  TargetPositionIntent: undefined,
  gradIntent: 'grad' }
[4/20/2018, 8:14:16 PM] alexaTypes:
[4/20/2018, 8:14:16 PM] { light: [ 'licht', 'lampen' ],
  blind:
   [ 'rolladen',
     'rolläden',
     'jalousie',
     'jalousien',
     'rollo',
     'rollos' ] }
[4/20/2018, 8:14:16 PM] fhemIntents:
[4/20/2018, 8:14:16 PM] { FHEMgutenMorgenIntent: 'gutenMorgen',
  FHEMguteNachtIntent: 'guteNacht' }


Definition des Switches für Fernseher:

defmod Fernseher MQTT_DEVICE
attr Fernseher IODev myBroker
attr Fernseher alexaName Fernseher
attr Fernseher alexaRoom Alexa
attr Fernseher devStateIcon ON:it_television@green OFF:it_television@red
attr Fernseher genericDeviceType switch
attr Fernseher icon it_television
attr Fernseher publishSet ON OFF cmnd/sw_fernseher/POWER
attr Fernseher room Wohnzimmer,Alexa
attr Fernseher stateFormat state
attr Fernseher subscribeReading_state stat/sw_fernseher/POWER
attr Fernseher webCmd ON:OFF


Jemand eine Idee, woran es noch liegen kann?

Viele Grüße, Nils

TomLee

#238
Hallo,

attr Fernseher eventMap ON:on OFF:off

ergänzen, neue Suche starten, Gerät wird gefunden.

Was mich an der Sache stutzig macht, ich kann das eventMap danach löschen und auch den alexaName ändern, das Device wird weiterhin, auch nach einem Neustart von alexa-fhem, gefunden.

Gruß

Thomas





hondong

Super! Vielen Dank.
Mit dem EventMap funktioniert es nun.