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

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

Vorheriges Thema - Nächstes Thema

Det20

Zitat von: cyvr1 am 15 Februar 2017, 11:50:04
Ob "Alexa, mach die Rolläden hoch/runter/auf/zu" oder "Alexa, mach die Rollade im Esszimmer/die Rolläden in Wohnzimmer runter/hoch", alles geht.

Ohne "Sag FHEM"?

cyvr1

Sorry, natürlich mit "sage/Frage FHEM..."

Gesendet von meinem LG-H960 mit Tapatalk


----------
Stephan Krätzschmar

octek0815

Hi,

gibt es eigentlich einen Grund warum "Rolladen" oder "Rolläden" hier und in den alexaTypes nicht wie im Duden korrekterweise "Rollladen" und "Rollläden" geschrieben wird?

Grüße
Olli

thunder1902

#2043
@octek0815: Es geht ja eigentlich nur um die Aussprache. Rolladen oder Rollladen spricht sich gleich aus :-)

Ist es eigentlich "erlaubt", zwei identische AlexaMappings mit unterschiedlichem Namen zu setzen? z.B.


TargetPosition=verb=mach,articles=den;die,values=auf:100;zu:0
window=verb=mach,articles=die,values=auf:on;zu:on


Ist die Schreibweise von TargetPosition (articles=den;die) richtig??

Nachdem das gesetzt wird, muss der Alexa Skill auf der developer-Amazon-Seite noch aktualisiert werden.. (Was allerdings nicht funktioniert - es kommt immer der Fehler:
Error: There was a problem with your request: Unknown slot name '{TargetPosition_article}'. Occurred in sample 'TargetPositionIntent mach {TargetPosition_article} {Device} {TargetPosition_Value} ' on line 42.



Obwohl der Slot TargetPosition_article existiert... :-\

EDIT:

Habe jetzt das "article=den;die" weggelassen - und jetzt läßt sich die Developer-Seite zumindest fehlerlos füllen...?!

EDIT2:
Jetzt scheinen alle Rolläden endlich zu funktionieren... Warum man den Article weglassen kann/soll, weiß ich allerdings noch nicht..
Danke erstmal an @cyvr1 und @justme1968 für die Hilfe!

Ma_Bo

#2044
Kann mir jemand bei meiner SUB in meiner 99_myUtils weiterhelfen.
Ich habe folgendes Problem, die Sub wird direkt aufgerufen, um eine Sprachausgabe über den DOT zu machen, wenn ich z.B. "Alexa sage Badezimmer guten morgen" sage.
Das reading fhemIntent in meinem Alexadevice ist aber wahrscheinlich nicht immer vor dem Aufruf der Sub aktualisiert und somit passiert es das die Sub in den falschen elsif Zweig springt.

Kann man dort ein sleep oder ähnliches einbauen, was nicht blockierend ist, das aus meinem Beispiel ist blockierend:

attr Alexa fhemIntents {alexa_guten_morgen()}=guten morgen

##### Start Alexa guten morgen
sub alexa_guten_morgen()
{sleep 2;
#Alexa
if (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.1...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Alexa";}

#Fernseher
elsif (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.2...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Fernseher";}

#Badezimmer
elsif (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.3...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.4...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Wohnzimmer";}

#Küche
elsif (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.5...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Küche";}

#Schlafzimmer
elsif (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.6...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif (ReadingsVal("Alexa","fhemIntent",0) =~ "amzn1.ask.skill.7...")
    {fhem "set Alexa_Guten_Morgen_dummy on";return "Guten Morgen von Balkon";}
}
#####Ende Alexa guten morgen


Ich möchte damit verschiedene Ausgaben über den Dot realisieren, je nachdem welcher Custom Skill angesprochen wird.

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.

thunder1902

#2045
So, gleich wieder eine neue Frage: (das hört irgendwie nicht auf...)

Ich habe 2 AlexaMappings:

window=verb=mach,values=auf:on;zu:on

geschossRolladen=verb=mach,values=auf:on;zu:off


Wie kann man steuern, dass bei einem Dummy der Window-Intent, und beim anderen Dummy der geschossRolladen-Intent verwendet wird? Bisher dachte ich, dass man das im HomebridgeMapping macht.
Ich hab also in einem Dummy geschossRolladen=cmdOff=runter,cmdOn=hoch dort stehen, und im anderen Dummy window=state,cmd=+ stehen.

Trotzdem kann ich nicht steuern, wann was verwendet wird...???

2. Frage:
Ich müsste in dem GeschossDummy die Kommandos von "auf" nach "hoch" ändern, weil man den Dummy mit " set blablaDummy hoch" steuern kann.
Dafür sollte doch das HomebridgeMapping sein. geschossRolladen=cmdOff=runter;cmdOn=hoch Aber das funktioniert nicht... Es kommt 'ne Meldung, dass ein undefiniertes "On" eingestellt wurde..

Welches genericDevice muss eigentlich der Dummy haben, um ihn auf und zu machen zu können?

Thyraz

Andre, VIELEN VIELEN DANK mal wieder für ein weiteres geniales Modul in dem schon jetzt sicher mehr Arbeit steckt als man sich vorstellt.
Auch für die Bemühungen das mit Homebridge zu bündeln, was den devicespezifischen Aufwand minimiert. :)

Dot vorgestern bestellt, Abends noch blind (ohne Dot Zuhause) alles eingerichtet.
Gestern dann angeschlossen und in der Alexa App eingerichtet.
Danach haben sowohl SmartHome als auch Custom Skill sofort funktioniert. :)

Vielen Dank daher auch an die Wiki Schreiber.

Da es bisher noch wenige Beispiele zu geben scheint für das neue "Alexa antwortet" Feature mal ein weiteres von mir dazu:

In fhemIntents hinzugefügt:

{currentRadioTitle()}=was läuft gerade im radio
{currentRadioTitle()}=was gerade im radio läuft


In der 99_myUtils.pm:

sub currentRadioTitle() {
my $title = ReadingsVal("AV_Receiver", "currentTitle", "");
return $title;
}


Damit kann ich jetzt auf 2 Wege den aktuellen Titel ausgeben lassen, der im Radio läuft:
Computer, starte SmartHome -> Was läuft gerade im Radio
oder
Computer, frage SmartHome was gerade im Radio läuft.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Esjay

Zitat von: Thyraz am 15 Februar 2017, 16:40:20
Andre, VIELEN VIELEN DANK mal wieder für ein weiteres geniales Modul in dem schon jetzt sicher mehr Arbeit steckt als man sich vorstellt.
Auch für die Bemühungen das mit Homebridge zu bündeln, was den devicespezifischen Aufwand minimiert. :)

Dot vorgestern bestellt, Abends noch blind (ohne Dot Zuhause) alles eingerichtet.
Gestern dann angeschlossen und in der Alexa App eingerichtet.
Danach haben sowohl SmartHome als auch Custom Skill sofort funktioniert. :)

Vielen Dank daher auch an die Wiki Schreiber.

Da es bisher noch wenige Beispiele zu geben scheint für das neue "Alexa antwortet" Feature mal ein weiteres von mir dazu:

In fhemIntents hinzugefügt:

{currentRadioTitle()}=was läuft gerade im radio
{currentRadioTitle()}=was gerade im radio läuft


In der 99_myUtils.pm:

sub currentRadioTitle() {
my $title = ReadingsVal("AV_Receiver", "currentTitle", "");
return $title;
}


Damit kann ich jetzt auf 2 Wege den aktuellen Titel ausgeben lassen, der im Radio läuft:
Computer, starte SmartHome -> Was läuft gerade im Radio
oder
Computer, frage SmartHome was gerade im Radio läuft.

Hi Thyraz

Wärst du so freundlich, deine Lösung hier hin zu kopieren? https://forum.fhem.de/index.php/topic,65890.0.html Dann geht sie hier nicht irgendwann unter.

Grüße

Thyraz

Ah, den Thread kannte ich noch nicht. :)

Schon passiert.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Roman

#2049
Hallo,

der Custom Skill läuft bei mir soweit ganz gut (Lichter, Rollos und Fernseher sind eingebunden), schaffe es allerdings nicht meine iButtons einzubinden (Fensterstatus auf/zu)
Bei einer Anfrage 'alexa, frage hugo nach haustür status'  bekomme von Alexa immer 'kann das Device mit Namen haustür nicht abfragen'

die iButtons sind mit 'genericDeviceType = contact angelegt.

Ich wahrscheinlich brauche ich hier auch ein homebridgemapping, aber da geht es mir wohl ähnlich wie anderen, ich kapiers einfach nicht, wie hier was zu mappen ist. (das gibt sich wahrscheinlich wenn ich das erste funktionierende mapping habe)

hier das 'list haustuer' für einen meiner iButtons:
Internals:
   CHANGED
   DEF        01.XXXXXXXXXXXXXX
   IODev      one_wire
   LAST_READ_FAILED 0
   NAME       Haustuer
   NOTIFYDEV  global
   NR         357
   NTFY_ORDER 50b-Haustuer
   STATE      present: 1
   TYPE       OWDevice
   Readings:
     2017-02-14 21:34:14   id              XXXXXXXXXXXX
     2017-02-14 21:34:14   location        bus.0
     2017-02-15 20:35:36   present         1
     2017-02-15 20:35:24   recheck         0
     2017-02-15 20:35:36   state           present: 1
   Fhem:
     address    01.XXXXXXXXXXX
     alerting   0
     bus        bus.0
     interfaces id
     interval   86400
     getters:
       address
       crc8
       family
       id
       locator
       r_address
       r_id
       r_locator
       type
     polls:
       id
     setters:
     state:
Attributes:
   IODev      one_wire
   alexaName  haustür
   event-on-change-reading present
   genericDeviceType contact
   homebridgeMapping state=present;values=1:zu;0:auf
   model      DS2401
   room       Alexa,OWDevice


Edit: nachdem ich 2 Abende erfolglos mit dem Homebridgemapping war, jetzt doch der erste Erfolg.
homebridgeMapping ContactSensorState=present,values=zu:1;auf:0;
damit kann hab ich nun den Status 0 oder 1 (Antwort von Alexa 'haustür hat den status 1')
Nun fehlt noch das mapping 0=auf und 1=zu für die Antwort.

Gruß
Roman

justme1968

@octek0815: weil das bei meinen tests am anfang die schreibweise war die alexa geliefert hat. ist das inzwischen anders?

@Ma_Bo: das fhemIntent reading wird gesetzt bevor die sub aufgerufen wird.

@thunder1902: wie kommst du auf window und geschossRolladen? ausserdem scheinst du alexaMapping und homebridgeMapping durcheinander zu schmeissen. im alexaMapping gibst du an was du sagen willst um etwas zu tun, im homebridgeMapping gibst du an mit welchem fhem kommando dieses etwas dann getan wird.

für rolläden ist TargetPosition zuständig und window ist für elektrische fenster. hier gibt es ebenfalls eine TargetPosition characteristic.

cmdOn und cmdOff sind NUR zum ein und aus schalten und gibt es nur beim On intent.

@Roman: etwas so: ContactSensorState=present,values=1:CONTACT_DETECTED;0:CONTACT_NOT_DETECTED CurrentDoorState= present,values1:CLOSED;0:OPEN
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Thyraz

#2051
@Andre gleich noch ne Frage:

Kann man auch eigene Perl Intents erstellen welche Custom Slot Types als Parameter haben, die man dann auch in der Perl Funktion auswerten kann?

Ich würde gern frei parametrierbare Intents erstellen.
Die Parameter dann im Perl Code für FHEM Kommandos verwenden und eine maßgeschneiderte Antwort an Alexa zurückgeben.

Also irgendwie sowas in der Art:

{activateScene()}=Lichtszene {Scene_Value} aktivieren


Zusätzlich müsste man neue Custom Slot Types im Alexa Device definieren können nach dem Motto:
Scene Value: gemütlich | hell | fernsehen
Oder geht das schon mit alexaTypes und ich hab nur die Syntax noch nicht kapiert?

Die Perl Funktion activateScene() müsste dann eben mit den Parametern gefüttert werden aus dem Intent.
In dem Fall dann der Wert aus Scene_Value, z.B. gemütlich.
In der Perl Funktion könnte man dann Lampen steuern, oder LightScenes aktivieren.
Am Ende wären dann Rückgabewerte wie "Achtung jetzt wirds hell" oder was auch immer zurück geben.

Man könnte sogar selbst den Confirmation Level auswerten und entsprechend verschiedene Antworten zurückliefern.
Oder mehrere Antworten hinterlegen und per Zufall Alternativen zurückliefern.

Ist jetzt nicht das beste Beispiel, da LightScenes ja schon gehen.
Aber gäbe damit ja fast keine Limitierungen mehr.
Und man spart sich ein Haufen Dummies. ;)

Oder hast du Ähnliches (evtl. auch etwas anders umgesetzt) in Planung?

Grüße,
Tobias
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

justme1968

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

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

Master_Nick

#2053
 8) Also der Wahnsinn!!  ;D

Gestern kam mein Dot an und heute läuft er schon und kann mir meine Temperaturen in den Zimmern sagen, sowie meine Geräte steuern (alles was FHEM so steuert [war noch zu faul den Harmony Hub richtig zu nutzen - bis jetzt]). Und das alles mit diesem ober starken Wiki und dem Forum!

Vielen Dank für die Mühen und die Zeit! Klasse Arbeit!

Ich werde erst noch ein wenig lesen bevor ich frage :-) Hänge gerade noch ein wenig bei dem fest, wie ich bestimmte Readings eines Gerätes abfragen kann... meine Thermometer sind Thermo-/Hygrometer und die Luftfeuchtigkeit fällt noch unter den Tisch...

Aber erst mal gute Nacht!
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Ma_Bo

#2054
Zitat von: justme1968 am 15 Februar 2017, 22:22:37
@Ma_Bo: das fhemIntent reading wird gesetzt bevor die sub aufgerufen wird.

Ich habe jetzt verschiedene Sachen probiert, leider bekomm ich es nicht hin, es wird zwischendurch immer wieder mal der falsche Name angesagt:

##### Start Alexa guten morgen
sub alexa_guten_morgen()
{

my $Skillname = ReadingsVal("Alexa","fhemIntent",0);

  #Alexa
if ($Skillname =~ "amzn1.ask.skill.111")
    {return "Guten Morgen von Alexa";}

#Fernseher
elsif ($Skillname =~ "amzn1.ask.skill.222")
    {return "Guten Morgen von Fernseher";}

#Badezimmer
elsif ($Skillname =~ "amzn1.ask.skill.333")
    {return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif ($Skillname =~ "amzn1.ask.skill.444")
    {return "Guten Morgen von Wohnzimmer";}

#Küche
elsif ($Skillname =~ "amzn1.ask.skill.555")
    {return "Guten Morgen von Küche";}

#Schlafzimmer
elsif ($Skillname =~ "amzn1.ask.skill.666")
    {return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif ($Skillname =~ "amzn1.ask.skill.777")
    {return "Guten Morgen von Balkon";}

}
#####Ende Alexa guten morgen


Ich habe mir das auch mal so angelegt, damit das reading gelöscht wird und ich nen Fehlerfall als Ausgabe bekomm:

##### Start Alexa guten morgen
sub alexa_guten_morgen()
{

my $Skillname = ReadingsVal("Alexa","fhemIntent",0);

  #Alexa
if ($Skillname =~ "amzn1.ask.skill.111")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Alexa";}

#Fernseher
elsif ($Skillname =~ "amzn1.ask.skill.222")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Fernseher";}

#Badezimmer
elsif ($Skillname =~ "amzn1.ask.skill.333")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif ($Skillname =~ "amzn1.ask.skill.444")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Wohnzimmer";}

#Küche
elsif ($Skillname =~ "amzn1.ask.skill.555")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Küche";}

#Schlafzimmer
elsif ($Skillname =~ "amzn1.ask.skill.666")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif ($Skillname =~ "amzn1.ask.skill.777")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Balkon";}

#Fehlerfall
elsif ($Skillname =~ "loeschen")
    {fhem "setreading Alexa fhemIntent loeschen";return "Fehlerfall";}
}
#####Ende Alexa guten morgen


Dann meldet mir Alexa zwischendurch halt "Fehlerfall"

Hast du eine Idee, wie ich das hinbekommen kann, ich weiß nicht mehr weiter.
Ich würde halt gerne (je nach angesprochenem Skill) die passende Antwort für den Skill ausgeben.


EDIT1:
Wenn ich ein sleep einbaue, funktioniert es ohne Probleme, aber das sleep blockiert fhem ja.

##### Start Alexa guten morgen
sub alexa_guten_morgen()
{
sleep 0.8;

my $Skillname = ReadingsVal("Alexa","fhemIntent",0);

  #Alexa
if ($Skillname =~ "amzn1.ask.skill.111")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Alexa";}

#Fernseher
elsif ($Skillname =~ "amzn1.ask.skill.222")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Fernseher";}

#Badezimmer
elsif ($Skillname =~ "amzn1.ask.skill.333")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Badezimmer";}

#Wohnzimmer
elsif ($Skillname =~ "amzn1.ask.skill.444")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Wohnzimmer";}

#Küche
elsif ($Skillname =~ "amzn1.ask.skill.555")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Küche";}

#Schlafzimmer
elsif ($Skillname =~ "amzn1.ask.skill.666")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Schlafzimmer";}

#Balkon
elsif ($Skillname =~ "amzn1.ask.skill.777")
    {fhem "setreading Alexa fhemIntent loeschen";return "Guten Morgen von Balkon";}

#Fehlerfall
elsif ($Skillname =~ "loeschen")
    {fhem "setreading Alexa fhemIntent loeschen";return "Fehlerfall";}
}
#####Ende Alexa guten morgen



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.