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

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

Vorheriges Thema - Nächstes Thema

dk3572

Hallo,

ich möchte an meinem Denon Receiver die Favoriten 1-4 per Alexa schalten.
Der Befehl in der Komandozeile funktioniert so:

set AVReceiver favoriteList 1

Das AlexaMapping sieht so aus:

Favorites=verb=stelle,valuePrefix=auf,values=programm+eins:favoriteList+1;programm+zwei:favoriteList+2;programm+drei:favoriteList+3;programm+vier:favoriteList+4

Das HomebridgeMapping so:

Favorites=favoriteList,cmd=favoriteList

Erkannt werden die Sprachkommandos richtig.
Leider schaltet der Receiver immer auf Programm 1. Vermutlich stimmt das "favoriteList+1,....." nicht.
Wie müsste ich was ändern?

Danke schon mal im Voraus.
Dieter

Shuzz

Sorry, hatte die letzten Wochen wenig Zeit zum Spielen und komme daher jetzt erst zum Antworten. ;)

Zitat von: justme1968 am 26 Dezember 2016, 11:17:32
@Shuzz: was hast du denn für die sättigung schon probiert? eigentlich sollte es reichen in alexaMapping einen passenden satz zu konfigurieren. etwas in der art sollte schon reichen:Saturation:verb=sättige,values=AMAZON.NUMBER,prefix=auf eventuell geht auch verb=stelle wenn dir ein passender suffix (nicht prozent) einfällt oder du den suffix weg lässt. es darf keine zwei mappings geben die einen satz mit gleichem verb und suffix und werte typ ergeben. die kann ich dann nicht auseinander halten und weiss nicht welche characteristic gemeint ist. mit den fragen die demnächst kommen wird es aber eine erweiterung um die properties geben. dann wird man stelle die sättigung von <device> auf <xy> prozent sagen können.
Sowas in der Richtung hatte ich getestet. Aber es hat nicht funktioniert und so habe ich's wieder rausgeworfen. Vermutlich habe ich's iwo falsch eingetragen.
Glaube es gab dann auch irgend ne Fehlermeldung in der AWS-Console weil dann ein Intent fehlte.
Werde mir das die Tage nochmal ansehen, aber nochmal zum Verständnis: Ich lasse mir dann auch die Intents usw. nochmal ausgeben oder?
Um sie dann im Custom Skill in AWS einzutragen?

Zitat von: justme1968 am 26 Dezember 2016, 11:17:32
das mit den applicationId array ist doch noch garnicht dokumentiert :). das kommt vollständig erst im nächsten update um dann die raum abhängig steuerung mit mehreren echos etwas zu verbessern.
Naja, das war nur ein verzweifelter educated guess - hat geklappt... :D

Zitat von: justme1968 am 26 Dezember 2016, 11:17:32
warum hast du schon zwei skills? die applicationId vom home automation skill musst du nicht eintragen. hier ist nur die oauthClientID wichtig. applicationId ist nur für den custom skill relevant.
OK, das habe ich dann verpeilt, sorry. Dann ist in meiner Config einfach eine appID "überflüssig" und kann wieder raus.

Vielen Dank für Deine Antwort und sorry für meine jetzt doch recht verspätete Reaktion. :)


Beste Grüße,

Shuzz

nettiger

#1277
Hallo zusammen,

ich versuche meinen VDR mit Alexa zu steuern, leider nur mit mässigem Erfolg.

Die Alexa Seite klappt schon recht gut indem ein Dummy im STATE mit dem entsprechenden Sender versorgt wird.

Nun wollte ich das ganze per Notify auswerten und das entsprechende Kommando abgeben.

Auf der Konsole funktioniert das folgendermassen:

ich gebe nc 192.168.178.64 6419 ein
danach das Kommando CHAN 1

Dann schaltet der VDR auf Programm 1.

Alexa antwortet mir das anlage auf XXX geschaltet wurde aber durch das Notify tut sich nix :-(

Testweisse mal über das Notify einen Schaltaktor geschaltet....das funktioniert....

Evtl. kann mir ja hier jemand helfen.

Benutzt habe ich die Vorlage eines Users hier im Thread zur Steuerung über den Harmony Hub.

Anbei die DEF des Notify:

anlage {
my $aktion = Value("anlage");
if ( $aktion eq "a. r. d.") {system(print 'echo CHAN 1 | nc 192.168.178.64 6419 ')}
if ( $aktion eq "hessen") {system(print '/bin/echo CHAN 1 | /bin/nc 192.168.178.64 6419 ')}
if ( $aktion eq "h. r. drei") {fhem("set hub activity HR3.HOEREN")}
if ( $aktion eq "klassik") {fhem("set AUSSEN_BRUNNEN on")}
if ( $aktion eq "off") {fhem("set hub activity PowerOff")}
}


Das Log sagt folgendes:
2017.01.10 22:58:51 4: dummy set anlage hessen
2017.01.10 22:58:51 5: Triggering set_anlage
2017.01.10 22:58:51 4: set_anlage exec {
my $aktion = Value("anlage");;
if ( $aktion eq "a. r. d.") {system(print 'echo CHAN 1 | nc 192.168.178.64 6419 ')}
if ( $aktion eq "hessen") {system(print 'echo CHAN 1 | nc 192.168.178.64 6419 ')}
if ( $aktion eq "h. r. drei") {fhem("set hub activity HR3.HOEREN")}
if ( $aktion eq "klassik") {fhem("set hub activity KLASSIK.HOEREN")}
if ( $aktion eq "off") {fhem("set hub activity PowerOff")}
}
echo CHAN 1 | nc 192.168.178.64 6419 2017.01.10 22:58:51 1: PERL WARNING: Can't exec "1": Datei oder Verzeichnis nicht gefunden at (eval 101040) line 4.
2017.01.10 22:58:51 3: eval: my $EVTPART0='hessen';my $EVENT='hessen';my $SELF='set_anlage';my $TYPE='dummy';my $NAME='anlage';{
my $aktion = Value("anlage");
if ( $aktion eq "a. r. d.") {system(print 'echo CHAN 1 | nc 192.168.178.64 6419 ')}
if ( $aktion eq "hessen") {system(print 'echo CHAN 1 | nc 192.168.178.64 6419 ')}
if ( $aktion eq "h. r. drei") {fhem("set hub activity HR3.HOEREN")}
if ( $aktion eq "klassik") {fhem("set hub activity KLASSIK.HOEREN")}
if ( $aktion eq "off") {fhem("set hub activity PowerOff")}


Danke und Gruß
Jens

nesges

Zitat von: justme1968 am 08 Januar 2017, 13:07:32
- über mehrere skills und/oder accounts die möglichkeit echos einem default raum zuzuordnen
  den raum namen an die applicationId und/oder oauthClientID mit : anhängen, es können jeweils
  mehrere ins mit , getrennt eingetragen werden. achtung: in den gleichen string!

Hatte ich so verstanden:

"applicationId": "amzn1.ask.skill.1,amzn1.ask.skill.2",
"oauthClientID": "amzn1.application-oa2-client.1,amzn1.application-oa2-client.1"


Mit ein bisschen rumspielen heraus gefunden, dass es so funktioniert:

"applicationId": [ "amzn1.ask.skill.1" , "amzn1.ask.skill.2" ],
"oauthClientID": [ "amzn1.application-oa2-client.1" , "amzn1.application-oa2-client.1" ]


Ma_Bo

Zitatich habe hier: https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117 die version 0.1.9 hochgeladen. die änderungen sind wie angekündigt:

- bessere interaktion zwischen dem alexa modul und alexa-fhem
- einstellbare gesprächigkeit bei antworten: alexaConfirmationLevel attribut
- über mehrere skills und/oder accounts die möglichkeit echos einem default raum zuzuordnen
  den raum namen an die applicationId und/oder oauthClientID mit : anhängen, es können jeweils
  mehrere ins mit , getrennt eingetragen werden. achtung: in den gleichen string!
- bessere antworten wenn ein gerät in mehreren räumen ist (z.b.: küche,ergeschoss)
- antworten mit temperaturen als dezimal zahl gehen jetzt
- leerzeichen können in alexaMapping und homebridgeMapping jetzt überall durch + maskiert werden
- bei mehreren intents mit identischem verb ist der name der eigenschaft um die es geht mit konfigurierbar.
   d.h. stelle die Helligkeit ..., stelle die Farbe ... und stelle die Sättigung ... ist konfigurierbar und unterscheidbar
   property= schlüsselwort im alexaMapping
- interne änderungen für das nächste update mit konfigurierbaren fragen
- noch ein paar kleinigkeiten mehr

gruss
  andre

Hey Andre, kannst du evtl. ein klein wenig zu den attributen schreiben, z.B. was kann ich hier mit machen:

Zitat- einstellbare gesprächigkeit bei antworten: alexaConfirmationLevel attribut

@all: Vielleicht kann man ja auch ein neues Thema aufmachen, indem ein paar Beispiel Konfigurationen beschrieben werden, damit man zumindest eine kleine Übericht bekommt, was man wie womit machen kann...

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

tobse30

Ich möchte über "Alexa: zeige Eingang" ein Script starten. Zeige sollte beim Dummy ein On auslösen.
Der Dummy funktioniert auch ohne Probleme wenn ich sage   "Alexa: schalte Eingang". Hört sich ur etwas doof an  :-\.

Geht das rein über den Smart Home Skill und homebridgemapping oder benötige ich hier den Custom Skill?


Hier meine Dummy:

#####  Kamera über Alexa aktivieren #####

define TVcam_einschalten dummy
attr TVcam_einschalten alexaName Eingang
attr TVcam_einschalten alias Kamera
attr TVcam_einschalten fm_type onbutton,offbutton
attr TVcam_einschalten genericDeviceType switch
attr TVcam_einschalten room Alexa
attr TVcam_einschalten setList on off
attr TVcam_einschalten webCmd on:off

define showCam notify TVcam_einschalten {system("/home/pi/streamcam.sh &")};; {system("/home/pi/ipad.sh &")};; set Yamaha input hdmi2;; sleep 20;; set Yamaha input hdmi1


Gruß Tobi

MathiasA

Hallo zusammen,

ich finde die Bemühungen hier wirklich toll!
Ich bin gerade dabei alles einzurichten. Ich hätte da aber noch zwei Sachen:

- Es wäre wirklich sehr hilfreich den Code in einer Quellcode Verwaltung einzuchecken. Über den Thread das zu regeln hat mich hier sehr verwirrt, gerade bei 8x Seiten. Hier könnte man Git oder SVN nehmen. GitHub wäre am einfachsten, da das Projekt ja public ist.

- Warum muss ich eine Lambda Funktion nehmen? So wie ich das gesehen habe, kann ich auch einen https-Endpunkt nehmen? Klar brauch ich dann einen Server, aber das ist ja bei den meisten Leuten hier wohl kein Problem. Das SSL-Zertifikat gibts ja mit letsencrypt mitlerweile sowieso gratis...

Grüße
Mathias

justme1968

@steimer-vl: damit  brauchst du ein CurrentPosition=pct im homebridgeMapping deines dummys. und eventuell auch noch ein TargetPosition=state.

@wuast94: alexaName ist der name mit dem du ein gerät ansprechen willst. alexaRoom ist der raum in derm das gerät ist und gilt nur für den custom skill. im home automation skill musst du die gruppen über die app zuordnen.

@dk3572: was erkennt alexa? was stehet auf der alexa-fhem konsole? was wird an fhem gesendet? weiter oben gibt es schon ein beispiel zum umschalten.

@Shuzz: wenn du am wortlaut oder an den characteristics etwas änderst musst du das interaction modell aktualisieren.

@nettiger: schau was auf der alexa-fhem console steht. schau im event monitor ob das event zu deinem bnotify passt.

@nesges: es sollten beide varianten gehen.

@Ma_Bo: setz das attribut und schau was alexa antwortet wenn du ein kommando gibst.

@tobse30: im smart home api versteht alexa nur die bekannten 6 kommandos. wenn du den wortlaut selber vorgeben willst musst du den custom skill verwenden.

@MathiasA: der code wird noch in den github homebridge code übernommen.

aber ich verstehe nicht was verwirrend ist. es gibt eine einzige stelle zum runter laden und dort wird auch die version hochgezählt.

das smart home api setzt zwingend aws lambda voraus. wenn du nur den custom skill verwendest kannst du in der skill konfiguration auch eine andere url angeben. es war aber noch keinem wichtig genug das auszuprobieren und eine anleitung zu schreiben.

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

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

dk3572

@justme1968
alexa erkennt das, was ich auch sage "alexa, stelle receiver auf programm eins".
Auf der Konsole steht dann:
[1/11/2017, 4:00:59 PM] IntentRequest
[1/11/2017, 4:00:59 PM] FavoritesIntent
[1/11/2017, 4:00:59 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd      =%7B$defs%7BAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[1/11/2017, 4:00:59 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd      =setreading%20Alexa%20intent%20IntentRequest%20FavoritesIntent&XHR=1
[1/11/2017, 4:00:59 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd      =%7B$defs%7BAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[1/11/2017, 4:00:59 PM] 0
[1/11/2017, 4:00:59 PM] Favorites
[1/11/2017, 4:00:59 PM] FavoritesIntent
[1/11/2017, 4:00:59 PM] [FHEM] AVReceiver: executing set cmd for Favorites with       value programm eins
[1/11/2017, 4:00:59 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd      =set%20AVReceiver%20%20%20programm%20eins&XHR=1


Das Beispiel weiter oben finde ich leider nicht, sonst hätte ich mir damit selbst geholfen.

Vorab schon mal Danke für die Hilfe.

justme1968

und was siehst du im device und im event monitor?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dk3572

im event monitor steht nichts davon.
In welchem device soll ich was sehen und wie?

justme1968

laut der letzten zeile deines logs wird einset AVReceiver programm einsausgeführt. d.h es sollte ein device AVReceiver der entweder ein programm kommando hat oder einen dummy bei dem das als reading auftaucht. beides sollte zu einem event im event monitor führen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

dk3572

hier habe ich beschrieben was vorliegt, mit welchem Befehl ich den Receiver steuere und was ich per alexa möchte.
https://forum.fhem.de/index.php/topic,60244.msg557824.html#msg557824

Das oben genannte Beispiel kann ich leider auch nicht finden.
Leider komme ich nicht weiter und bitte um Hilfe.

dk3572

#1288
seltsam ist auch das ein
set AVReceiver programm eins
ausgeführt wird, der Receiver kein Programm Kommando hat und trotzdem auf Favorit 1 geschaltet wird.

Oder wird das hier
Favorites=verb=stelle,valuePrefix=auf,values=programm+eins:favoriteList+1;programm+zwei:favoriteList+2;programm+drei:favoriteList+3;programm+vier:favoriteList+4
in "set AVReceiver favoriteList" umgewandelt und dieser Teil stimmt nicht?

Ma_Bo

Mal eine Frage an alle, wie macht ihr das wenn ihr z.B. einen dummy schalten wollt und ihr meherere Namen zum ein bzw. aus schalten nutzen wollt ?

Beispiel:
Ich möchte einen Dummy einschalten, aber verschiedene Namen dafür verwenden.

"schalte Weihnachtsbeleuchtung ein"
"schalte Weihnachtslicht ein"
"schalte Weihnachtsdekoration ein"
"schalte Weihnachtsdeko ein"

Hierfür habe ich bisher jeweils einen dummy angelegt, mit jeweils dem AlexaName und diesen dann per homebridgeMapping auf meinen dummy, den ich schalten möchte, gemappt.

Zuvor hatte ich als AlexaName einfach eine kommaseparierte Liste "Weihnachtsbeleuchtung,Weihnachtslicht,Weihnachtsdekoration,Weihnachtsdeko" verwendet, was auch mit dem Home Skill funktioniert hat, aber nicht mit dem Custom Skill, daher der neue Weg über mehrere dummys mit dem homebridgeMapping.

Gibt es eine elegantere Lösung?

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.