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

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

Vorheriges Thema - Nächstes Thema

Fowler

Wenn ich bei alexa-fhem 0.1.15 nach dem Status frage, kommt folgende Fehlermeldung im Log:

/opt/fhem/alexa-fhem/lib/fhem.js:663
                           var rgb = FHEM_xyY2rgb(xy[0], xy[1] , 1);
                                     ^

ReferenceError: FHEM_xyY2rgb is not defined


justme1968

#916
@Ma_Bo: alexa liefert über das api keine kompletten sätze.

@mrbreil: bitte lies dir noch mal durch wie homebridgeMapping funktioniert.
alle thermostate sollen automatisch erkannt werden und sich über 'stelle <name> auf <xy> prozent' steuern lassen.
willst du den thermostat wirklich mit on und off schalten? dann muss alles in eine charakteristic. nicht aufgeteilt auf zwei mal die gleiche:On=cmdOn=desiredTemperature+18,cmdOff=desiredTemperature+10

die meisten devices sollten ohne spezielle konfiguration funktionieren. ohne zu verstehen warum eine bestimmte konfiguration nötig ist und warum sie so aussiehst hilft dir auch eine liste von funktionierenden konfigurationen nicht weiter weil damit fast immer spezialfälle abgedeckt werden die bei jedem anders sind.

@dk3572: einfach ignorieren. das sind noch debug meldungen für mich.

@chunter1: hast du das kinderzimmer  bei den Custom Slot Types unter FHEM_Room in der skill konfiguration eingetragen? was genau erkennt alexa? siehe konsolen ausgebe mit --debug oder hier: http://alexa.amazon.de/spa/index.html#settings/dialogs

@Fowler: was hast du für device typen konfiguriert?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

#917
es gibt hier: https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117 eine version 0.1.6 zum testen.


- das alexaTypes attribut wird ausgewertet. damit kann man sich die namen für die device typen konfigurieren:attr <alexa> alexaTypes light:licht,lampe,lampen blind:rolladen,jalousie,rollo,rolläden, jalousien,rollos

- es gibt bessere bestätigungs texte mit denen alexa bestätigt was sie getan hat.

- im alexaMapping gibt es ein neues schlüsselwort perfect über das sich die vergangenheitsform des verbs konfigurieren lässt. diese werden in den bestätigungen von alexa verwendet. fest hinterlegt sind zur zeit: 'stelle' -> 'gestellt', 'schalte' -> 'geschaltet', 'färbe' -> 'gefärbt', 'mach' -> 'gemacht'

d.h. die antwort auf 'mach den rolladen zu' ist jetzt 'ich habe den rolladen zu gemacht' oder auf 'färbe die lampen im wohnzimmer rot' ist 'ich habe die lampen im wohnzimmer rot gefärbt'

- bei mehreren gleich benannten geräten fragt alexa zurück welcher raum gemeint war

'schalte das radio ein' -> ich habe mehrere geräte mit namen radio gefunden, in welchem raum meinst du? -> 'im wohnzimmer' -> ich habe das radio im raum wohnzimmer eingeschaltet

damit das geht muss man sich mit dem alexa update von morgen über 'get <alexa> interactionModel' ein aktualisiertes Intent Schema und Sample Utterances erzeugen und in der skill konfiguration eintragen

- man kann über einen scope eintrag im config file angeben ob die geräte dieser connection für alexa, alexa-ha oder alexa-custom sein sollen. d.h. man kann sich über mehrere connections einträge einen teil der geräte für den home automation skill und einen anderen teil für den custom skill konfigurieren. damit kann man dann verhindern das der home automation skill geräte schaltet deren typ er nicht kennt.

über den scope wird dann später auch unterschieden ob ein device in alexa und/oder siri auftauchen soll.

- diverse kleinere änderungen
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

BobbyD

@justme1968: kann man von einem Sensor auch mehrere Temperaturen übermitteln?
Ich habe das bei mir so eingestellt:
define KaeseBox MYSENSORS_DEVICE 101
attr KaeseBox IODev MYS_GW
attr KaeseBox alexaName Käsebox
attr KaeseBox genericDeviceType thermometer
attr KaeseBox homebridgeMapping CurrentTemperature=temperature3,minValue=-30,subtype=innen\
CurrentTemperature=temperature1,minValue=-30,subtype=aussen
attr KaeseBox mapReading_humidity 0 humidity
attr KaeseBox mapReading_humidity2 2 humidity
attr KaeseBox mapReading_temperature1 1 temperature
attr KaeseBox mapReading_temperature3 3 temperature
attr KaeseBox mode node
attr KaeseBox room Alexa
attr KaeseBox stateFormat temperature3
attr KaeseBox version 2.0.1-beta


Also einen subtype im Hombridgemapping angegeben.
Ich bekomm aber immer die Temp als "undefined" angesagt.
Desweiteren sagt sie mir beim Status nicht die Feuchtigkeit mit an. Kommt dieses Feature später noch oder habe ich was nicht richtig konfiguriert.

Danke

justme1968

konfigurieren der abfragen geht erst in einem nächsten update. bis dahin kann man nur die fest vorgegeben dinge abfragen und auch nur ein reading pro device.

d.h. vorerst musst du mehrere temperaturen per homebridgeMapping auf mehrere dummys verteilen. characteristics die nicht eingebaut sind kannst du als fallback genau so nach state umbiegen dann wird zumindest der wert vorgelesen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dk3572

Morsche,

jetzt wird diese Lampe

defmod Sideboardlampe IT 00000F0FFF FF F0
attr Sideboardlampe IODev CUL_0
attr Sideboardlampe alias Lampe
attr Sideboardlampe fp_Grundriss_EG 80,700,1,
attr Sideboardlampe fp_Grundriss_EG_neu 76,544,1,
attr Sideboardlampe genericDeviceType switch
attr Sideboardlampe group Schalten
attr Sideboardlampe room CUL_0,Erdgeschoss,Wohnzimmer,alexa
attr Sideboardlampe sortby 3
attr Sideboardlampe webCmd on:off


nicht mehr im Smart Home Skill erkannt.

Auszug aus der Konsole:

[12/17/2016, 10:40:17 AM] [FHEM] Sideboardlampe is switch
[12/17/2016, 10:40:17 AM] [FHEM] Sideboardlampe has
[12/17/2016, 10:40:17 AM] [FHEM]   On [state;on,off]
  2016-12-17 10:40:17 caching: Sideboardlampe-state: off


Die hatte bisher einwandfrei funktioniert.
Woran kann das liegen?

MadMax-FHEM

Hi,

bei Problemen geht es hier entlang:

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

Ansonsten:

was hast du denn bzw. was hat sich denn verändert??

Außerdem (mag mich täuschen) aber die Lampe wird doch von alexa-fhem (wenn der Auszug da her ist) erkannt...
...noch mal in der Alexa-App löschen neu anlegen?!

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)

justme1968

im smart home skill hat sich nichts geändert.

wenn etwas nicht geht schauen woran es genaue liegt:
- erkennt alexa was du sagst? -> siehe http://alexa.amazon.de/spa/index.html#settings/dialogs
- wird alexa-fhem aufgerufen? -> trouble shooting im wiki
- was für ein event kommen an?  -> siehe konsolen ausgabe
- was macht alexa-fhem daraus? -> siehe konsolen ausgabe
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dk3572

#923
Danke für die Hilfe,

hat sich erledigt, geht wieder.

Allerdings sagt sie jetzt wenn ich über den Custom Skill schalte "ich habe undefined Lampe eingeschaltet"

Was muss ich hier noch definieren?

Edit:
In der neuesten (0.1.6) Version bei der ich das:

Zitatdamit das geht muss man sich mit dem alexa update von morgen über 'get <alexa> interactionModel' ein aktualisiertes Intent Schema und Sample Utterances erzeugen und in der skill konfiguration eintragen

nicht hin bekomme.

Joker

Nochmal zum Thema "Schalte alle Lampen etc.":

Zitatfür lampen und rolläden geht das im prinzip schon: alle devices in den gleichen alexaRoom stecken und dann licht, lampe, lampen, rolladen, jalousie oder rollo als name verwenden. wenn es kein device mit diesem namen gibt wird das dann intern dann auf alle geräte mit genericDeviceType light bzw. blind umgesetzt.
Kann ich denn die Devices in mehrere Räume stecken? z.B. eine Lampe in der Küche bekommt den alexaRoom "Küche" aber auch "Erdgeschoss", damit ich sagen kann "Schalte das Licht in der Küche aus" und "Schalte das Licht im Erdgeschoß aus". Wenn ich das so mache, dann werden die customSlotTypes aber so erzeugt:
FHEM_Room
    esszimmer,erdgeschoss
    wohnzimmer
    küche
    küche,erdgeschoss

Also scheinbar als eigene Räume. Prinzipiell scheint es aber zu gehen, wenn ich die im Skill dann entsprechend als Küche und Erdgeschoß in separate Zeilen eintrage. Muss ich noch ein wenig testen.

Zitat- man kann über einen scope eintrag im config file angeben ob die geräte dieser connection für alexa, alexa-ha oder alexa-custom sein sollen. d.h. man kann sich über mehrere connections einträge einen teil der geräte für den home automation skill und einen anderen teil für den custom skill konfigurieren. damit kann man dann verhindern das der home automation skill geräte schaltet deren typ er nicht kennt.
Kannst du das noch genauer erläutern? gemeint ist das config.json oder? Was muss/kann man da jetzt eintragen, hast du mal ein Beispiel?

justme1968

ja. genau das kannst du. das komma ist noch ein fehler. es muss so aussehen:FHEM_Room
    esszimmer
    wohnzimmer
    küche
    erdgeschoss
hab es repariert. kommt im nächsten update.

einfach im config.json vor die filter zeile noch eine "scope": "<scope>", zeile setzen. erkannt wird siri, alexa, alexa-ha und alexa-custom. als komma separierte liste:    "connections": [
        {
            "name": "FHEM Alexa",
            "server": "10.0.1.21",
            "port": "8083",
            "scope": "alexa",
            "filter": "room=alexa:FILTER=genericDeviceType=light"
        },
        {
            "name": "FHEM Alexa Custom",
            "server": "10.0.1.21",
            "port": "8083",
            "scope": "alexa-custom",
            "filter": "room=alexa:FILTER=genericDeviceType!=light"
        }
      ]


damit wären lampen überall verfügbar und alles andere nur im custom skill.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

knueppler

Hallo,

super Sache das mit dem Custom Skill. Vielen Dank dafür.
Ich habe aber zwei Probleme:
Via Dummies, die alle nach demselben Strickmuster

NAME: Lautsprecher_[Raumname]
room: [Raumname]
alias: Lautsprecher
alexaAlias: Lautsprecher [Raumname]

gebaut sind, steuere ich meine Lautsprecher (an, aus, Lautstärke).
Via alexaAlias kann ich sie wunderbar mit dem Alexa-Skill ansprechen, via Custom Skill kommt nur Ich habe kein Gerät mit Namen lautsprecher im Raum küche gefunden..
Im FHEM_Device-Slot ist sowohl Lautsprecher als auch Lautsprecher Küche hinterlegt. Ich habe auch so ziemlich alle Permutationen mit Alias und Slot probiert, es geht einfach nicht. Was mache ich falsch. Richtig gut wäre, wenn es für die Lautsprecher einen eigenen Device-Typ gäbe, vielleicht habe ich ihn nur noch nicht gefunden?
Debug-Output
**** Received Directive: {"version":"1.0","session":{"new":true,"sessionId":"amzn1.echo-api.session.xxx","application":{"applicationId":"amzn1.ask.skill.xxx"},"user":{"userId":"amzn1.ask.account.xxx"}},"context":{"AudioPlayer":{"playerActivity":"IDLE"},"System":{"application":{"applicationId":"amzn1.ask.skill.c487c1f9-2275-4dda-a148-d703702aee37"},"user":{"userId":"amzn1.ask.account.xxx"},"device":{"supportedInterfaces":{"AudioPlayer":{}}}}},"request":{"type":"IntentRequest","requestId":"amzn1.echo-api.request.xxx","timestamp":"2016-12-17T13:39:33Z","locale":"de-DE","intent":{"name":"OnIntent","slots":{"preposition":{"name":"preposition","value":"in der"},"On_Value":{"name":"On_Value","value":"aus"},"Room":{"name":"Room","value":"küche"},"Device":{"name":"Device","value":"lautsprecher"},"article":{"name":"article","value":"den"}}}}}
[2016-12-17 13:39:33] IntentRequest
[2016-12-17 13:39:33] OnIntent
[2016-12-17 13:39:33] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=%7B$defs%7Balexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[2016-12-17 13:39:33] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=setreading%20alexa%20intent%20IntentRequest%20OnIntent&XHR=1
[2016-12-17 13:39:33] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=%7B$defs%7Balexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Ich habe kein Gerät mit Namen lautsprecher im Raum küche gefunden."},"shouldEndSession":true}}

für alle Devices bekomme ich ich habe undefined [alias] eingeschaltet, wenn ich den alias über den Custom Skill direkt anspreche. Was könnte das sein?
Debug-Output
**** Received Directive: {"version":"1.0","session":{"new":true,"sessionId":"amzn1.echo-api.session.xxx","application":{"applicationId":"amzn1.ask.skill.xxx"},"user":{"userId":"amzn1.ask.account.xxx"}},"context":{"AudioPlayer":{"playerActivity":"IDLE"},"System":{"application":{"applicationId":"amzn1.ask.skill.xxx"},"user":{"userId":"amzn1.ask.account.xxx"},"device":{"supportedInterfaces":{"AudioPlayer":{}}}}},"request":{"type":"IntentRequest","requestId":"amzn1.echo-api.request.xxx","timestamp":"2016-12-17T13:37:33Z","locale":"de-DE","intent":{"name":"OnIntent","slots":{"preposition":{"name":"preposition"},"On_Value":{"name":"On_Value","value":"ein"},"Room":{"name":"Room"},"Device":{"name":"Device","value":"flur"},"article":{"name":"article"}}}}}
[2016-12-17 13:37:34] IntentRequest
[2016-12-17 13:37:34] OnIntent
[2016-12-17 13:37:34] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=%7B$defs%7Balexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[2016-12-17 13:37:34] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=setreading%20alexa%20intent%20IntentRequest%20OnIntent&XHR=1
[2016-12-17 13:37:34] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=%7B$defs%7Balexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[2016-12-17 13:37:34] [FHEM] Licht_Flur: executing set cmd for On with value 1
[2016-12-17 13:37:34] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=set%20Licht_Flur%20on&XHR=1
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Ich habe undefined flur eingeschaltet."},"shouldEndSession":true}}

Wenn ich Alexa, sage James setze Esstisch auf 50% sage, kommt die Antwort Ich habe Ich kann esstisch nicht auf 50 schalten. 50 gestellt.  Es passiert nichts. Auch hier spreche ich direkt den Alias an.
Debug-Output
**** Received Directive: {"version":"1.0","session":{"new":true,"sessionId":"amzn1.echo-api.session.xxx","application":{"applicationId":"amzn1.ask.skill.xxx"},"user":{"userId":"amzn1.ask.account.xxx"}},"context":{"AudioPlayer":{"playerActivity":"IDLE"},"System":{"application":{"applicationId":"amzn1.ask.skill.c487c1f9-2275-4dda-a148-d703702aee37"},"user":{"userId":"amzn1.ask.account.xxx"},"device":{"supportedInterfaces":{"AudioPlayer":{}}}}},"request":{"type":"IntentRequest","requestId":"amzn1.echo-api.request.xxx","timestamp":"2016-12-17T13:32:28Z","locale":"de-DE","intent":{"name":"prozentIntent","slots":{"preposition":{"name":"preposition"},"prozent_Value":{"name":"prozent_Value","value":"50"},"Room":{"name":"Room"},"Device":{"name":"Device","value":"esstisch"},"article":{"name":"article"}}}}}
[2016-12-17 13:32:28] IntentRequest
[2016-12-17 13:32:28] prozentIntent
[2016-12-17 13:32:28] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=%7B$defs%7Balexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[2016-12-17 13:32:28] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=setreading%20alexa%20intent%20IntentRequest%20prozentIntent&XHR=1
[2016-12-17 13:32:28] [FHEM]   executing: https://192.168.178.51:8083/fhem?cmd=%7B$defs%7Balexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[2016-12-17 13:32:28] prozentIntent -> prozent
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Ich habe Ich kann esstisch nicht auf 50 schalten. 50 gestellt"},"shouldEndSession":true,"card":{"type":"Simple","title":"status","content":"Ich kann esstisch nicht auf 50 schalten. 50 gestellt"}}}

justme1968

den eigenen device type kannst du dir mit alexaTypes konfigurieren.

mit einem alias der auch noch den raum namen enthält kommt der custom skill nicht klar. zumindest dann nicht wenn der raum name auch bei den Custom Slot Types als raum hinterlegt ist. alexa kann dann nicht unterscheiden ob der raum teil des namens ist oder als raum gemeint ist und du müsstest sagen 'lautsprecher küche in der küche'.

damit der custom skill räume und device typen sinnvoll verwenden kann müssen sie als solche erkannt werden. d.h. du musst für beide geräte nur lautsprecher als alias verwenden und den raum nur über den room oder alexaRoom einstellen.

wichtig ist die namen so zu wählen das die Sample Utterances wie eine schablone auf den gesprochene satz passen. und zwar immer nur eine. wenn du den raum namen mit im device namen hast passt zwar die schablone, aber der teil vor dem leerzeichen wird von alexa als device und der nach dem leerzeichen als raum erkannt. der 'halbe' device namen passt dann aber nicht mehr auf den tatsächlichen device namen.


woher die undefined kommen muss ich mir anschauen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

knueppler

Hi,

ok, verstehe. Habe die Aliase mit Raumnamen in FHEM gelöscht, alexa-fhem neu gestartet. On/Off geht jetzt, aber ...setze Lautsprecher im Wohnzimmer auf 50% gibt immer noch das gleiche.
Ich habe allerdings keine neue Suche für den homekit-Skill gemacht, nach meinem Verständnis ist das aber auch nicht nötig, richtig?

Danke Christian

justme1968

wie sind die beiden genau konfiguriert? wie ist alexaMapping konfiguriert?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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