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

@vbs: welche kommandos das smarthome api versteht steht unter anderem im wiki: https://wiki.fhem.de/wiki/Alexa-Fhem#SmartHome_Skill.

wie genericDevice type und homebridheMapping funktionieren steht z.b. hier: https://forum.fhem.de/index.php/topic,48558.0.html und immer aktuell hier: https://github.com/justme-1968/homebridge-fhem.

für den smarthome skill sind im prinzip nur switch, light und thermostat relevant. und mit einschränkungen noch blind.


alles andere (die restlichen typen, konfigurierbare befehle, die übrigen attribute,...) sind nur für den custom skill relevant.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Prof. Dr. Peter Henning

Morgen, mein Lieber.

Kurze Info: Ich habe bisher die Doppelung für/auf in der Alexa Speech Response für den uhrIntent
ZitatIch habe weckzeit für;auf 19:27 uhr gestellt
nicht wegbekommen. Suche ich an der falschen Stelle ?

LG

pah

nesges

Zitat von: justme1968 am 05 Februar 2017, 02:11:50
wie genericDevice type und homebridheMapping funktionieren steht z.b. hier: https://forum.fhem.de/index.php/topic,48558.0.html und immer aktuell hier: https://github.com/justme-1968/homebridge-fhem.

Ich würde im Wiki folgenden Abschnitt ergänzen:

ZitatBei Verwendung des Custom Skills übersetzt die Kombination der Attribute alexaMapping und homebridgeMapping Sprachbefehle ("Intents") in gerätespezifische Kommandos. Für den Smart Home Skill haben die beiden Attribute keine Bedeutung. Das Attribut alexaMapping wird am ALEXA-Device gesetzt und dient dazu erkannte Sprachkommandos in abstrakte Characteristiken zu überführen. Das Attribute homebridgeMapping wird am zu steuernden Gerät gesetzt und übersetzt diese Charakteristiken in die konkreten Befehle, die das Gerät versteht. Weiter führende Dokumentation zum homebridgeMapping findet sich unter https://forum.fhem.de/index.php/topic,48558.0.html

Passt das soweit?

@pah: Den Abschnitt werde ich einleitend in "Einrichtung unter FHEM" packen und die Beispiele darin eine Ebene tiefer rücken

justme1968

#1773
@pah: die doppelung in der antwort ist noch ein fehler in der 0.1.9 und für die nächste version schon behoben.

zur weckzeit: ich habe gesehen das du im wiki  'neunzehn siebnundzwanzig uhr' verwendet hast. bei mir hat bei gesprochenen kommandos bis her auch ein normales 'neunzehn uhr siebenundzwanzig' oder auch dinge wie 'halb acht' funktioniert. funktioniert das bei dir nicht? dann sollte man das über die app als falsch erkannt melden damit es wieder repariert wird. 

@nesges: kleine korrektur: homebridgeMapping ist auch für den smart home skill relevant. das mapping der generischen kommandos auf die device spezifischen passiert auch hier.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Prof. Dr. Peter Henning

@justme1968: Ah, Copy-Paste-Fehler.
neunzehn siebenundzwanzig uhr muss man bei dem Test des Custom Skills ins den Service Simulator eingeben, sonst kommen nur die 19 an.

neunzehn uhr siebenundzwanzig darf man Alexa sagen. Offenbar stellt der AVS das dann um, bevor es an den Skill weitergereicht wird.

@nesges: Fast - ich würde ungerne die Struktur ändern, sondern das als einleitende Bemerkung zum Abschnitt hinsetzen. Habe ich gerade gemacht, zusammen mit der Korrektur von André

LG

pah

dl6kbg

#1775
Zitat von: nesges link=topic=60244.msg577330#msg577330 date=1486286653
Passt das soweit?
/quote]

Ich würde evtl. noch ergänzen, dass das Homebridge-mapping sich nicht nur auf das Gerät, sondern auf ein spezifisches Geräte-Reading bezieht, sofern mehrere vorhanden sind. War mir vorher nicht bewusst, dass das geht, so funktioniert es aber bei meiner Wetterstation:


"homebridgeMapping": "E863F10F-079E-48FF-8F27-9C2605A29F52=pressure,name=AirPressure,format=UINT8\u000aA863F19D-379E-45FF-8F27-9C2605A29F52=wind,name=Windgeschwindigkeit,format=UINT8",


Grüße, Oliver

kgerlich

Zitat von: Schiri1986 am 04 Februar 2017, 13:20:47
Folge am besten der Anleitung im Wiki: https://wiki.fhem.de/wiki/Alexa-Fhem

... oder in diesem Video: https://youtu.be/mUFlA2ZD_yw

Gesendet von meinem Aquaris X5 Plus mit Tapatalk

Heureka! Wollte mich noch mal bedanken für die turbogeile Arbeit. Das ist alles fantastisch.  ;D

Schiri1986

Hat niemand eine Idee, was ich hier falsch mache?

Zitat von: Schiri1986 am 27 Januar 2017, 20:17:34
Hallo, ich habe eine Frage zum Status eines Devices. Mein Sonos-Lautsprecher hat folgendes HomebridgeMapping:

On=state,valueOn=present,valueOff=/absent|initialized/,cmdOn=Play,cmdOff=Stop
LauterLeiser=volume,cmds=leiser:VolumeD;lauter:VolumeU
Volume=volume,cmd=Volume


Wenn ich Alexa nach dem Status frage, sagt sie aber:
"outputSpeech": {
      "type": "PlainText",
      "text": "lautsprecher ist an und steht auf 29 Prozent"


Und zwar auch, wenn der Status in Wirklichkeit "initialized" ist.
Mache ich einen Denk- oder einen Mappingfehler - oder beides?

EDIT: Die Konsole sagt
[2017-01-27 20:47:25] [FHEM]     caching: On: 1 (as number; from 'initialized')

dl6kbg

Zitat von: Schiri1986 am 05 Februar 2017, 16:09:03
Hat niemand eine Idee, was ich hier falsch mache?

Hi !

Ich nutze Sonos mit dem Echo-Sonos-Skill und nicht mit FHEM, weil sich da vielmehr machen lässt. Ich habe jetzt mal nachgesehen, was ein nicht spielender Sonos-Zoneplayer ausgibt:


[{"uuid":"RINCON_5CAAFD45C68C01400","coordinator":{"uuid":"RINCON_5CAAFD45C68C01400","state":{"currentTrack":{"artist":"Deutschlandfunk","title":"x-sonosapi-stream:s42828?sid=254&flags=32&sn=0","albumArtUri":"/getaa?s=1&u=x-sonosapi-stream%3as42828%3fsid%3d254%26flags%3d32%26sn%3d0","duration":0,"uri":"x-sonosapi-stream:s42828?sid=254&flags=32&sn=0","type":"radio","stationName":"Deutschlandfunk","absoluteAlbumArtUri":"http://192.168.2.105:1400/getaa?s=1&u=x-sonosapi-stream%3as42828%3fsid%3d254%26flags%3d32%26sn%3d0"},"nextTrack":{"artist":"","title":"","album":"","albumArtUri":"","duration":0,"uri":""},"volume":10,"mute":false,"trackNo":1,"elapsedTime":0,"elapsedTimeFormatted":"00:00:00","playbackState":"STOPPED","playMode":


Der Player hat gestoppt und die Lautstärke steht auf 10 und als Sender ist Deutschlandfunk eingestellt. Würde ich dem Player RESUME befehlen, würde er genau mit Lautstärke 10 bei Titel Deutschland funk fortsetzen.

Letzte Zeile: das Mapping müsste demnach irgendwie auf das playbackState: Stopped oder alternativ playbackState: Playing erfolgen.

Demzufolge finde ich die Aussage bei Dir logisch. Aber eben auf ein State gemappt, mit dem Du nix anfangen kannst, weil das bei Sonos so stehen bleibt, wenn er nicht spielt.

Für Sonos empfehle ich Echo-Sonos: Da kann man auch mal fragen, was gerade läuft und seine Lieblingsalben abspielen lassen. Hingegen mit Rundfunksendern hat Echo-Sonos Probleme. Die habe ich über Dummy-Schalter in FHEM realisiert.

https://github.com/rgraciano/echo-sonos

Grüße, Oliver

justme1968

wenn du abfragen willst ob ein sonos player gerade spielt solltest du über das reading transportState gehen. das ist dafür da. state zeigt viel zu viele dinge an.

es reicht nur valueOn zu verwenden. alles andere ist automatisch off. 

d.h. das mapping sollte etwa so aussehen:On=transportState,valueOn=PLAYING,cmdOn=play,cmdOff=pause

das ist übrigens auch das mapping das für sonos automatisch erzeugt wird. d.h. eigentlich sollte es reichen den player im filter zu haben ohne irgend etwas zusätzlich von hand zu mappen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Romoker

#1780
Es ist toll zu sehen, wie dynamisch sich das Alexa-Thema hier entwickelt.
Seit diesem Wochenende habe ich den Custom Skill konfiguriert, scheitere aber an einem neuem Verb, mit dem Alexa die Haustür öffnen soll:
"Alexa, sage James mach die Haustür auf."
Antwort: "Ich kann das Gerät mit Namen haustür nicht aufschalten."

Das Gerät ist ein einfacher Dummy:
Internals:
   NAME       Test
   NR         205
   STATE      off
   TYPE       dummy
   Readings:
     2017-02-05 19:04:48   state           off
Attributes:
   alias      Haustür
   genericDeviceType switch
   group      Test
   room       alexa,Test
   setList    on off
   sortby     1
   webCmd     on:off

Das Verb "mach" ist im Interaction Modell wie folgt definiert:
OnIntentB mach {Device} {On_ValueB}
OnIntentB mach {Device} {preposition} {Room} {On_ValueB}
OnIntentB mach {article} {Device} {On_ValueB}
OnIntentB mach {article} {Device} {preposition} {Room} {On_ValueB}

neuer Custom Slot:
On_ValueB auf | zu

Ausgabe alexa-Dump:
[2/5/2017, 7:00:36 PM] IntentRequest
[2/5/2017, 7:00:36 PM] OnIntentB
...
[2/5/2017, 7:00:36 PM] 1
[2/5/2017, 7:00:36 PM] characteristic: On
[2/5/2017, 7:00:36 PM] value: auf
[2/5/2017, 7:00:36 PM] type: undefined
[2/5/2017, 7:00:36 PM] room: undefined
[2/5/2017, 7:00:36 PM] name: haustür
[2/5/2017, 7:00:36 PM] device: [object Object]
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Ich kann das Gerät mit Namen haustür nicht aufschalten."},"shouldEndSession":true}}


Es wird die richtige On-Charakteristik OnIntentB angezogen, aber alexa-fhem kann nicht "aufmachen".

Hat jemand eine Idee, was noch für eine erfolgreiche Befehlsausführung fehlt?

edit: Ich habe zu früh auf Speichern gedrückt.
Hier noch nachgeliefert das alexaMapping vom alexa-Device:
On=verb=mach,valueOn=auf,valueOff=zu
und die generierte Intent Schema Ergänzung:
{
         "intent" : "OnIntentB",
         "slots" : [
            {
               "type" : "FHEM_article",
               "name" : "article"
            },
            {
               "type" : "FHEM_Device",
               "name" : "Device"
            },
            {
               "name" : "preposition",
               "type" : "FHEM_preposition"
            },
            {
               "type" : "FHEM_Room",
               "name" : "Room"
            },
            {
               "name" : "On_ValueB",
               "type" : "On_ValueB"
            }
         ]
      },
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

justme1968

ich würde mal sagen da stimmt mit deiner konfiguration etwas nicht. um zu helfen musst du sie schon komplett zeigen...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

kawa0815

Zitat von: Romoker am 05 Februar 2017, 19:54:51


Das Gerät ist ein einfacher Dummy:
Internals:
   NAME       Test
   NR         205
   STATE      off
   TYPE       dummy
   Readings:
     2017-02-05 19:04:48   state           off
Attributes:
   alias      Haustür
   genericDeviceType switch
   group      Test
   room       alexa,Test
   setList    on off
   sortby     1
   webCmd     on:off


Du hast weder alexaName noch alexaRoom definiert?

vbs

#1783
Mal ne kurze blöde Frage:
Kann man den SmartHome-Skill und den Custom-Skill nicht parallel betreiben bzw. ist das nicht vorgesehen?

In der Config kann man ja nur eine applicationId eintragen, oder?
"alexa": {
        "name": "Alexa FHEM",
        "keyFile": "./key.pem",
        "certFile": "./cert.pem",
        "applicationId": "amzn1.ask.skill.<>",
        "oauthClientID": "amzn1.application-oa2-client.<>"
    },


Man könnte sonst sicherlich zwei Instanzen von alexa-fhem laufen lassen, aber eigentlich ist vorgesehen, dass man sich für eins entscheidet? Ich will das gar nicht bewerten, nur verstehen wie es momentan gedacht ist.

Übrigesn: Großen Dank an alle! Ist wirklich eine faszinierende Sache dieses alexa :)

EDIT:
Sorry, wurde scheinbar schon geklärt:
https://forum.fhem.de/index.php/topic,60244.msg561871.html#msg561871

Romoker

@kawa0815: nein, hatte ich nicht definiert. Ich war der Meinung, der Device alias sei ausreichend. Mit der Definition
Internals:
   NAME       Test
   NR         205
   STATE      off
   TYPE       dummy
   Readings:
     2017-02-05 19:04:48   state           off
Attributes:
   alexaName  Haustür
   alexaRoom  alexa
   alias      Haustür
   genericDeviceType switch
   group      Test
   room       alexa,Test
   setList    on off
   sortby     1
   webCmd     on:off 

ist Alexas Antwort trotzdem noch: "Ich kann das Gerät mit Namen haustür nicht aufschalten."

Der Befehl: "Alexa, sage James schalte die haustür ein" funktioniert einwandfrei, auch ohne "alexaRoom" und "alexaName". Die Wortwahl ist nur unschön.
Der optimale Befehl wäre: "Alexa, sage James, öffne die Haustür". Vielleicht hat jemand ein Tipp, ob und wie man das konfigurieren kann.
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT