FHEM Forum

FHEM => Frontends => Sprachsteuerung => Thema gestartet von: prodigy7 am 28 Januar 2017, 13:59:09

Titel: [alexa-fhem | Custom Skills] Eure Setups
Beitrag von: prodigy7 am 28 Januar 2017, 13:59:09
Hallo zusammen,

da eigene Skills (Custom Skills) bei alexa-fhem immer wieder ein Thema vieler Fragen ist, möchte ich dazu anregen, dass User die funktionierende Setups hinbekommen haben, Ihr Setup hier zu beschreiben und zu erklären. Oft ist es einfacher, anhand von Beispielen das abzuleiten was man möchte und zu verstehen als sich mühsam alles zusammen zu suchen muss. Würde mich hier über jedes "Mini-Tutorial" freuen!

Bitte nutzt für Fragen und Probleme die Threads und bleibt bitte hier beim wesentlichen Thema!
p7
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: baerbel am 28 Januar 2017, 21:31:59
na dann mache ich mal den Anfang - ist kein Hexenwerk, der eine oder andere Stolperstein (über den ich gestolpert bin) habe ich auch kurz erwähnt, ohne hier eine direkt Schritt für Schritt Anleitung liefern zu wollen.

Also erstmal was zur Umgebung:

Provider - t-online
Externe ip: dyndns über strato IPV4
Erreichbarkeit von FHEM über das Internet: Portweiterleitung von TCP 3000-3000 auf 3000 auf einer Fritzbox eingerichtet
FHEM: SSL mit User/Passwort

daraus ergibt sich dann für mich folgende config.json:

{
    "alexa": {
        "name": "Alexa Produktiv",
        "keyFile": "./key.pem",
        "certFile": "./cert.pem",
        "applicationId": "amzn1.ask.skill.xxxxxxxxxxxxxxxxxxxxxxxxx",
        "oauthClientID": "amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxx"
    },

    "connections": [
        {
            "name": "FHEM",
            "server": "127.0.0.1",
            "auth": {
            "user": "<username>",
            "pass": "<passwort>"
             },
            "ssl":true,
            "port": "8083",
            "filter": "room=alexa"
        }
    ]
}



Meine "Stolpersteiner" - beides in AWS:

1. der Code wird nicht von "selbst" übertragen, dieser muss händisch übertragen werden - also copy & paste !!

const PORT=3000;
const HOST='<dyndns_name_externe_IP';


// entry
exports.handler = function(event, context, callback) {

  console.log(`EVENT: ${event}`);
  console.log(`CONTEXT: ${context}`);

  var post_data = JSON.stringify(event);

  var options = {
    hostname: HOST,
    port: PORT,
    //family: 6,
    //path: '/',
    method: 'POST',
    rejectUnauthorized: false, // accept self-signed
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(post_data)
      }
    };

  var request = require('https').request(options, (result) => {
    console.log(`STATUS: ${result.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(result.headers)}`);
    result.setEncoding('utf8');
    var body = '';
    result.on('data', (chunk) => body += chunk);
    result.on('end', () => {
      console.log(`BODY: ${JSON.stringify(body)}`);
      callback(null, JSON.parse(body) );
      return;
    });
  });

  request.on('error', (e) => {
    console.log(`problem with request: ${e.message}`);
    callback(null, createError(ERROR_TARGET_OFFLINE) );
    return;
  });

  request.write(post_data);
  request.end();

  return;

}// exports.handler


2. Trigger -

Es muss ein "Alexa Smart Home skill" in aws zu sehen sein und dann ein "Alexa Skills Kit"

Gerne ergänze ich weitere Angaben - ist aber so dass, was für mich hängengeblieben ist wo es gezwickt hat.

Grüße - Bernd
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Ma_Bo am 29 Januar 2017, 16:54:20
Vielleicht hat ja jemand ne config.json als Beispiel, in der mehrere Custom Skills mit default Room beschrieben sind, sowas suche ich gerade.

P.S. @prodigy7: die Links sind falsch herum, wenn ich auf den Link mit Probleme klicke, komm ich bei dem für Smrt Home Skill aus. ;)
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: bene_dicere am 10 Februar 2017, 11:11:51
Schade, dass es hier noch nicht mehr content gibt.

Ich habe das Custom Skill eingerichtet, jedoch habe ich noch nicht wirklich das homebridgeMapping durchblickt.  :-[

Wenn ich ein Gerät mit dem folgenden Befehl anspreche:
"Alexa, sage <Custom Skill Invocation Name>:...."
Bekomme ich nur eine Antwort, dass keine Geräte vorhanden sind.

Beispielsweise würde ich gerne wie im Wiki (https://wiki.fhem.de/wiki/Alexa-Fhem) einen Wecker einbinden, die Rolladen öffnen ohne eine prozentuale Angabe oder meine Hue Lampen in einer bestimmten Farbe leuchten lassen.

Das sind meine Einträge aus dem Alexa Device in FHEM und analog dazu habe ich auch die Einstellungen für das Custom Skill vorgenommen.

alexaMapping
#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


alexaTypes
#Type=<alias>[,<alias2>[,...]]
light=licht,lampen
blind=rolladen,rolläden,jalousie,jalousien,rollo,rollos


fhemIntents
#IntentName=<sample utterance>
gutenMorgen=guten morgen
guteNacht=gute nacht


Vielleicht hat ja jemand von euch schon was umgesetzt und kann mich ein wenig unterstützen. Leider habe ich mit homebridgeMapping noch gar nichts gemacht und bisher auch keine einfache Erklärung für Anfänger mit Beispielen gefunden.

Bin für jede Unterstützung dankbar.  :D
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Romoker am 10 Februar 2017, 15:18:48
@bene_dicere

Ein FHEM-Objekt wird erst dann als Alexa-Gerät erkannt, wenn es einem FHEM-Room zugeordnet ist, der im Filter-Parameter der alexa-fhem-Konfigurationsdatei config.json spezifiziert ist. Der Filter ist ein Regulärer Ausdruck, z.B.
"filter": "room=alexa|Sonos|Heizungssteuerung"

Viele Grüße
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: bene_dicere am 10 Februar 2017, 18:40:48
Zitat von: Romoker am 10 Februar 2017, 15:18:48
@bene_dicere

Ein FHEM-Objekt wird erst dann als Alexa-Gerät erkannt, wenn es einem FHEM-Room zugeordnet ist, der im Filter-Parameter der alexa-fhem-Konfigurationsdatei config.json spezifiziert ist. Der Filter ist ein Regulärer Ausdruck, z.B.
"filter": "room=alexa|Sonos|Heizungssteuerung"

Viele Grüße

das habe ich auch und funktioniert vom Prinzip auch.
Ich kann auch Alexa mit dem folgenden Befehl ansprechen und sie sagt mir den Status von allen Geräten im "config.json Raum".

Alexa, frage <Custom Skill Invocation Name> Status alternativ kann ich noch ein Gerätenamen nachfolgend nennen, wie z.B. Rolllade.

Das ganze funktioniert auch nur in genau dieser Reihenfolge, füge ich zb noch ein Pronomen hinzu, gehört es direkt zu den dingen die Alexa nicht weiß.


Jedoch kann ich nichts einstellen/ändern.

Alexa, sage <Custom Skill Invocation Name> Stelle Weckzeit auf Neunzehn Uhr.
Als Beispiel zu dem oben stehenden Befehl, bekomme ich die nachstehende Antwort ca.5x in Schleife
Zitatich kann undefined nicht auf schalten
und dann noch 1x
Zitatauf um gestellt
aber es passiert nichts.

Stelle ich jetzt aber beispielsweise eine Weckzeit in FHEM ein sagt sie mir wenn ich nach dem allgemeinen Statusfrage
ZitatWeckzeit steht auf xx Uhr
jedoch kann ich auch nach der Weckzeit nicht explizit fragen.
Titel: alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Ma_Bo am 12 Februar 2017, 10:40:02
Wenn man 2 (oder mehr) Custom Skills verwenden möchte
Damit kann man z.B. sagen:

ZitatAlexa sage Fernseher schalte ARD ein
oder
ZitatAlexa sage Badzimmer schalte Licht aus
usw...

Dazu muss der Invocation Name der Custom Skills bei Skill1 dann Fernseher heißen und bei Skill2 dann Badezimmer heißen usw...
Das ist natürlich jedem selber überlassen wie er die Skills nennt.

Folgendes in die config.json eintragen:

Zitat{
    "alexa": {
        "name": "Alexa TEST",
        "keyFile": "./key.pem",
        "certFile": "./cert.pem",
        "nat-upnp": false,
        "applicationId": [ "amzn1.ask.skill.111..." , "amzn1.ask.skill.222..." ],
        "oauthClientID": "amzn1.application-oa2-client.xxx"
  },
   
    "connections": [
        {
            "name": "FHEM",
            "server": "192.xxx.xxx.xx",
            "port": "8083",
            "filter": "room=Alexa"
        }
    ]
}


Rot markierte Stellen müssen auf die eigene Umgebung angepasst werden.

oauthClientID ist vom Smart Home Skill

und

applicationId ist von den Custom Skills




In Bezug auf das hier (alexa-fhem Version 0.2.0) https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117 :

Zitatedit 2017-02-10:
- fhem intents der art
  {meineSub()}=guten morgen und set|get|attr <device> xyz=gute nacht
  sind jetzt möglich. die rückgabe des jeweiligen kommandos wird als antwort für alexa verwendet
  d.h man kann damit beliebige texte aus fhem an alexa zurück geben.

habe ich es so gelöst (gibt bestimmt elegantere Wege, aber dieser funktioniert):

Im Alexa device steht unter fhemIntents

{alexa_guten_morgen()}=guten morgen
{alexa_gute_nacht()}=gute nacht


Dann natürlich ein

get <Alexadevice> intercationModel

und die Ergebnisse in Intent Schema und Sample Utterances im Custom Skill (oder in mehreren Custom Skills) eintragen und speichern.

Nun habe ich mir eine eigene 99_Alexa_Sprache_Utils.pm angelegt, dazu einfach auf EDIT FILES dann auf die myUtilsTemplate.pm klicken und folgenden Text einfügen


Zitatpackage main;
use strict;
use warnings;
use POSIX;
sub
Alexa_Sprache_Utils_Initialize($$)
{
   my ($hash) = @_;
}
##### Start guten morgen
sub
alexa_guten_morgen()
{
fhem "set Alexa_Guten_Morgen_dummy on";
return "Guten Morgen, was kann ich für dich tun";
}
#####Ende guten morgen
#
##### Start gute nacht
sub
alexa_gute_nacht()
{
fhem "set Alexa_Guten_Morgen_dummy off";
return "Gute Nacht, wir hören uns morgen wieder";
}
#####Ende gute nacht
1;

Ich habe vor dem "return ....." noch einen Dummy von mir geschaltet, das kann man anpassen oder die ganze Zeile einfach löschen, dann kommt nur ein Sprachrückmeldung.

(Achtung die Datei muss so aussehen "...Utils.pm" damit diese dann auch unter EDIT FILES zu finden ist <---- Das orange markierte muss am Ende des Namens der zu speichernden Datei stehen)
Jetzt neben SAVE AS den Namen 99_Alexa_Sprache_Utils.pm eingeben (Achtung, wollt ihr einen anderen Namen verwenden, muss dieser auch im Inhalt der Datei angepasst werden (siehe roter Text)) und auf SAVE AS klicken.

Zur Sicherheit ein "reload 99_Alexa_Sprache_Utils.pm" in der FHEM Eingabezeile und
die Alexa Bridge (alexa-fhem Version 0.2.0) einmal neustarten.
Nun sollte mit

"Alexa sage FHEM guten morgen" eine Antwort mit "Guten Morgen, was kann ich für dich tun" folgen und der Dummy eingeschaltet werden.
und mit
"Alexa sage FHEM gute nacht" eine Antwort mit "Gute Nacht, wir hören uns morgen" folgen und der Dummy ausgeschaltet werden.

Das ganze kann man jetzt nach belieben erweitern.




Ein Update der alexa-fhem von 0.1.9 auf 0.2.0 habe ich wie folgt gemacht:

Datei von hier heruntergeladen : https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117

auf meinem Mac entpackt (sollte bei Windoo... genau so gehen), alexa-fhem gestoppt, dann folgende Dateien im alexa-fhem Ordner auf meinem Pi umbenannt:

Die Datei: package.json in package.json_original
und den Ordner: lib in lib_original

somit hat man, falls was schief geht immer noch eine funktionierende Backuplösung.

Dann die neu heruntergeladenen Dateien auf den Pi kopieren:

Die Datei: package.json
und den Ordner: lib

und alexa-fhem zur Kontrolle auf der Console gestartet und geschaut ob die richtige Version läuft.

Edit1: Folgendes steht im Wiki für das Update der alexa-fhem:

ZitatUpdate
Hier wir das Update auf eine neue Version von Alexa-Fhem beschrieben

Das Verzeichnis alexa-fhem im Hauptverzeichnis von FHEM (typischerweise /opt/fhem) umbenennen in alexa-fhem.old.
Die tgz-Datei der neuen Alexa-Fhem-Version unter Linux im Hauptverzeichnis von FHEM (typischerweise /opt/fhem) entpacken (nicht unter Windows, das zerstört die Rechteeinstellungen).
Das dabei entstandene Verzeichnis package in alexa-fhem umbenennen, in das Verzeichnis wechseln
Mit
npm install
alle Abhängigkeiten installieren (kein sudo!).
Die Zertifikatsdateien key.pem und cert.pem aus dem alten Verzeichnis alexa-fhem.old ins neue Verzeichnis alexa-fhem kopieren.
Natürlich dann den Dienst neu starten, auch müssen selbstredend irgendwelche Modifikationen an der Datei server.js in der neuen Version nachgezogen werden. Wenn alles läuft, kann das alte Verzeichnis alexa-fhem.old gelöscht werden.
 

Grüße Marcel
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Esjay am 12 Februar 2017, 11:30:13
Hey Marcel,
danke das du deine Lösung geteilt hat.Habe es probiert, und es funktioniert soweit. Du hast allerdings einen kleinen Schnitzer in deiner 99_Alexa_Sprache_Utils.pm.

sub
alexa_guten_morgen()
{
fhem "set Alexa_Guten_Morgen_dummy on";
return "Guten Morgen, was kann ich für dich tun";
}
#####Ende guten morgen
#
##### Start gute nacht
sub
alexa_guten_morgen()
{
fhem "set Alexa_Guten_Morgen_dummy off";
return "Gute Nacht, wir hören uns morgen wieder";
}
#####Ende gute nacht
1;


Du nutzt jeweils die gutenMorgen sub.

Hab mich gerade gewundert, warum mir Alexa eine Gute Nacht wünscht, wenn ich Guten morgen sage.

Nochmal danke fürs Bereitstellen.
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Romoker am 12 Februar 2017, 11:52:02
@bene_dicere:

Wie ist Dein FHEM-Device "Weckzeit" definiert? Im FHEMWiki ist ein Wecker (https://wiki.fhem.de/wiki/Alexa-Fhem#Wecker (https://wiki.fhem.de/wiki/Alexa-Fhem#Wecker)) sehr gut erklärt. Liefere mal ein FHEM-Listing von Deinem Device, z.B. mit:
list Weckzeit

Hast Du nach der FHEM-Konfiguration die Konfiguration vom Interaction Model des Custom Skills in amazon.developer nachgezogen?

Hinweis: dieser Thread sollte nur funktionierende Custom Skills Setups enthalten. Konfigurationsprobleme werden hier besprochen: https://forum.fhem.de/index.php/topic,60244.0.html (https://forum.fhem.de/index.php/topic,60244.0.html)

Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Ma_Bo am 12 Februar 2017, 12:36:54
@Esjay, Danke, da hatte sich der Fehlerteufel eingeschlichen, hab es korrigiert...


Gesendet von iPhone mit Tapatalk
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: bene_dicere am 12 Februar 2017, 16:02:19
Zitat von: Romoker am 12 Februar 2017, 11:52:02
@bene_dicere:

Wie ist Dein FHEM-Device "Weckzeit" definiert? Im FHEMWiki ist ein Wecker (https://wiki.fhem.de/wiki/Alexa-Fhem#Wecker (https://wiki.fhem.de/wiki/Alexa-Fhem#Wecker)) sehr gut erklärt. Liefere mal ein FHEM-Listing von Deinem Device, z.B. mit:
list Weckzeit

Hast Du nach der FHEM-Konfiguration die Konfiguration vom Interaction Model des Custom Skills in amazon.developer nachgezogen?

Hinweis: dieser Thread sollte nur funktionierende Custom Skills Setups enthalten. Konfigurationsprobleme werden hier besprochen: https://forum.fhem.de/index.php/topic,60244.0.html (https://forum.fhem.de/index.php/topic,60244.0.html)


Danke für deine Unterstützung, hatte den Fehler in der Zwischenzeit schon gefunden. Habe das Weckzeit_prefix nicht mit eingetragen.
Falls es trotzdem jemanden interessiert (habe es aus dem Wiki):


Internals:
   CFGFN
   NAME       Alexa.Weckzeit
   NR         77310
   STATE      11:45
   TYPE       dummy
   Readings:
     2017-02-12 15:37:19   state           11:45
Attributes:
   alexaName  weckzeit
   alexaRoom  alexa
   genericDeviceType clock
   group      AlexaGeräte
   homebridgeMapping Weckzeit=state,cmd=+
   room       alexa
   setList    Weckzeit:time


Leider verstehe ich noch immer nicht so wirklich das HomebridgeMapping und was dadurch passiert. gibt es vll irgendwo ne Anleitung mit ein paar Beispielen an denen man es nachvollziehen kann?
Titel: Alexa fragen was gerade im Radio läuft
Beitrag von: Thyraz am 15 Februar 2017, 16:59:23
Alexa fragen was gerade im Radio läuft

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.
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Roman am 15 Februar 2017, 21:48:58
Hallo zusammen,

ich wollte hier auch noch mal meine Lösung für fhemIntents vorstellen.

Ich finde es lästig, für jeden fhemIntent eine eigene sub in dem 99_myUtils.pm zu erstellen und habe das mit einer Parameterübergabe gelöst.

Beispiel von fhemIntents
#IntentName=<sample utterance>
{Alexacmd ("gutenmorgen")}=guten morgen
{Alexacmd ("guteNacht")}=gute nacht
{Alexacmd ("tvlauter")}=Fernseher lauter
{Alexacmd ("tvleiser")}=Fernseher leiser
{Alexacmd ("tvprgup")}=Fernseher nächstes Programm
{Alexacmd ("tvprgdown")}=Fernseher vorheriges Programm
{Alexacmd ("tverstes")}=Fernseher das erste
{Alexacmd ("tvzweites")}=Fernseher das zweite
{Alexacmd ("tvsateins")}=fernseher sat eins
{Alexacmd ("tvaus")}=fernseher aus


und das passende sub in der 99_my_Utils
sub Alexacmd {

my $Command = $_[0];
my $ALEXAReturn = "OK";
my $FHEMCommand = "set Dummy_test no_alexa_action";  # falls kein passendes Kommando gefunden wird

fhem("set Dummy_test $Command");    # nur zur Kontrolle um zu sehen was ankommt
$Command =~ s/fhemIntent: //;           # das reine Intent extrahieren

my %Alexakommando = (
"gutenmorgen" => "set Dummy_Test guten morgen; Guten Morgen, was kann ich für dich tun",
"tvlauter" => "set LGTV remoteControl volumeUp ;ich habe den fernseher lauter gestellt",
"tvleiser" => "set LGTV remoteControl volumeDown; ich habe den fernseher leiser gestellt",
"tvprgup" => "set LGTV channelUp;OK",
"tvprgdown" => "set LGTV channelDown; OK",
"tverstes" => "set LGTV channel 1; OK",
"tvzweites" => "set LGTV channel 2; OK",
"tvsateins" => "set LGTV channel 3; OK",
"tvaus" => "set LGTV remoteControl power; ich habe den fernseher ausgeschaltet"
);
($FHEMCommand,$ALEXAReturn) = split (/;/, $Alexakommando{$Command});
fhem("$FHEMCommand");
return "$ALEXAReturn";
};


die Variable %Alexakommando kann dann mit beliebig vielen fhemIntents gefüllt werden, Format sollte selbsterklärend sein
fhemInten => <fhemKommando> ; Alexa Antwort
evtl. könnte man das Semikolen als Trenner zwischen fhemKommando und Alexa Antwort ändern falls man mehrere Kommandos ausführen will , dann einfach das Semikolon durch einen anderen Trenner ersetzen und im split ändern.

Gruß
Roman
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: RaspiCOC am 17 Februar 2017, 10:01:16
Trivial, aber morgens sehr hilfreich... Kurz mal fragen, ob die S-Bahn pünktlich ist...

sub sbahnstatus() {
my $bahnoutput1_1 = "Die nächste S Bahn nach XYZ mit der planmäßigen Abfahrt um ";
my $bahnoutput1_2 = " Verspätung";
my $bahnoutputminuten = " Minuten ";
my $bahnoutputminute = " Minute ";
my $bahnuhrhat = " Uhr hat ";
my $bahnabfahrtszeit1 = ReadingsVal("BAHN", "plan_departure_1", "");
my $bahnabfahrtszeit2 = ReadingsVal("BAHN", "plan_departure_2", "");
my $bahnoutputeine = "eine ";
my $delay1 = ReadingsVal("BAHN", "plan_arrival_delay_1", "");
my $delay2 = ReadingsVal("BAHN", "plan_arrival_delay_2", "");
my $bahnoutput2_1 = " Die nachfolgende S Bahn nach XYZ mit der planmäßigen Abfahrt um ";
my $speech = "";
my $bahnzeit2 = " unbekannte ";
my $delayspeech1 = "Fehler";
my $delayspeech2 = "Fehler";
my $delayspeechsubstr1 = "";
my $delayspeechsubstr2 = "";

    use Switch;
    switch ($delay1) {
    case "none" { $delayspeech1 = "keine Verspätung."; }
    case "+0"         { $delayspeech1 = "keine Verspätung."; }
case "+1"         { $delayspeech1 = "eine Minute Verspätung."; }
    else         { $delayspeechsubstr1 = substr($delay1, 1, 1);
  $delayspeech1 = $delayspeechsubstr1 . $bahnoutputminuten . $bahnoutput1_2; }
    }

    switch ($delay2) {
    case "none" { $delayspeech2 = "keine Verspätung."; }
    case "+0"         { $delayspeech2 = "keine Verspätung."; }
case "+1"         { $delayspeech2 = "eine Minute Verspätung."; }
    else         { $delayspeechsubstr2 = substr($delay1, 1, 1);
  $delayspeech2 = $delayspeechsubstr2 . $bahnoutputminuten . $bahnoutput1_2; }
}

$speech = $bahnoutput1_1 . $bahnabfahrtszeit1 . $bahnuhrhat . $delayspeech1 . $bahnoutput2_1 . $bahnabfahrtszeit2 . $bahnuhrhat . $delayspeech2;
return $speech;
}


Angesagt wird im Augenblick nur die nächste S-Bahn. Aber, wie man sieht sind die Vorbereitungen für die Nachfolgende schon im Gange.

Jetzt mit nächster und übernächster S-Bahn.

Und entsprechendes für den Müll...

sub nextrestmuelldate() {
my $tage_bis_restmuell = ReadingsVal("Abfall", "Abfall_Restmuell2woe_tage", "");
my $tage_bis_gelbersack = ReadingsVal("Abfall", "Abfall_GelberSack_tage", "");
    my $tag_restmuell = ReadingsVal("Abfall", "Abfall_Restmuell2woe_wochentag", "");
my $tag_gelbersack = ReadingsVal("Abfall", "Abfall_GelberSack_wochentag", "");
my $output_restmuell = "";
my $output_gelbersack = "";
my $muell_output = "";

    use Switch;

switch ($tage_bis_restmuell) {
    case [0] { $output_restmuell = "Der Restmüll wird heute abgeholt.";}
case [1..6] { $output_restmuell = "Der Restmüll wird am kommenden " . $tag_restmuell . "abgeholt.";}
case [7] { $output_restmuell = "Der Restmüll wird am nächsten " . $tag_restmuell . "abgeholt.";}
    else { $output_restmuell = "Der Restmüll wird am übernächsten " . $tag_restmuell . " abgeholt.";}
    }

switch ($tage_bis_gelbersack) {
    case [0] { $output_gelbersack = "Der gelbe Sack wird heute abgeholt.";}
case [1..6] { $output_gelbersack = "Der gelbe Sack wird am kommenden " . $tag_gelbersack . "abgeholt.";}
    case [7] { $output_gelbersack = "Der gelbe Sack wird am nächsten " . $tag_gelbersack . "abgeholt.";}
else { $output_gelbersack = "Der gelbe Sack wird am übernächsten " . $tag_gelbersack . " abgeholt.";}
    }

$muell_output = $output_restmuell . "   " . $output_gelbersack;

return $muell_output;
}


Letzteres noch quick and dirty. Könnte natürlich auch sagen "wir heute abgeholt".

Jetzt für gelben Sack und Restmüll und auch grammatikalisch korrekt!

Die switch-anweisung benötigt das Perl-Modul SWITCH. Wer es nicht hat, kann es wie folgt nachinstallieren:

sudo apt-get install libswitch-perl

So langsam findet auch meine Frau Alexa prima!
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: oli82 am 17 Februar 2017, 11:40:10
Zitat von: Roman am 15 Februar 2017, 21:48:58
und das passende sub in der 99_my_Utils
Wenn ich den Code in meine my_Utils übernehme erhalte ich folgenden Fehler:
Global symbol "%Alexakommando" requires explicit package name (did you forget to declare "my %Alexakommando"?) at ./FHEM/99_myUtils.pm line 142
Problem ist nur: ein %Alexakommando ist bei mir gar nicht vorhanden...

Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Roman am 17 Februar 2017, 17:28:05
Hi oli82,

Das wird doch mit 'my %Alexakommando' definiert.

Evtl. Irgendwo einen Tippfehler oder Klammer/Semikolon vergessen?

Wenn du es nicht findest poste Mal deine 99_myUtils bzw. die Sub

Gruß
Roman
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Ma_Bo am 17 Februar 2017, 17:31:24
Können wir hier nicht einen 2 Beitrag im 1. Post verlinken, in dem Probleme von hier besprochen werden, dann bleibt der Beitrag hier ein wenig übersichtlicher...

@prodigy7: Könntest du den 2 Beitrag eröffnen und ihn im ersten Post hier markieren.

Ist nur ne Idee, möchte hier niemanden angreifen.

Grüße Marcel
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: prodigy7 am 18 Februar 2017, 09:48:59
Zitat von: Ma_Bo am 17 Februar 2017, 17:31:24
Können wir hier nicht einen 2 Beitrag im 1. Post verlinken, in dem Probleme von hier besprochen werden, dann bleibt der Beitrag hier ein wenig übersichtlicher...

@prodigy7: Könntest du den 2 Beitrag eröffnen und ihn im ersten Post hier markieren.

Ist nur ne Idee, möchte hier niemanden angreifen.
Versteh ehrlich gesagt gerade nicht so ganz, was du meinst :)
Titel: alexa-fhem: Eure Custom-Skill Setups
Beitrag von: Ma_Bo am 18 Februar 2017, 10:05:47
Also, ein neues Thema aufmachen, was nur die Probleme, der hier behandelten setups, beinhaltet.
Dieses neue Thema dann bitte in dem ersten Post von dir hier in diesem Thema verlinken, so wie die beiden Links zu den Alexa Themen von justme.

Dann stehen in dem Thema hier nur die setups und im anderen kann man über die Probleme diskutieren.


Gesendet von iPhone mit Tapatalk
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: RaspiCOC am 18 Februar 2017, 16:11:50
Habe meine Müll- und S-Bahnansagen nochmal getweakt. Update hier: https://forum.fhem.de/index.php/topic,65890.msg587062.html#msg587062 (https://forum.fhem.de/index.php/topic,65890.msg587062.html#msg587062)
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: dk3572 am 19 Februar 2017, 10:47:36
Hallo,

das hier funktioniert bei mir:
{currentRadioTitle()}=was läuft gerade im radio
{currentRadioTitle()}=was gerade im radio läuft


allerdings nur 1x. Danach kommt die Antwort:
"Bei der Antwort des angeforderten Skill ist ein Problem aufgetreten"

Gleiches Problem trat hier auf:
{alexa_guten_morgen()}=guten morgen
{alexa_gute_nacht()}=gute nacht


Jemand eine Idee was schief läuft bzw. wo und wie ich den Fehler suchen kann?
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: justme1968 am 19 Februar 2017, 11:17:03
was steht auf der console bzw. im log?
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: dk3572 am 19 Februar 2017, 13:12:06
Ausgabe der console:
[2/19/2017, 1:05:35 PM] IntentRequest
[2/19/2017, 1:05:35 PM] FHEMperlCodeIntent
[2/19/2017, 1:05:35 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
[2/19/2017, 1:05:35 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd=setreading%20Alexa%20fhemIntent%20%7BcurrentRadioTitle()%7D&XHR=1
[2/19/2017, 1:05:35 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
[2/19/2017, 1:05:36 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
[2/19/2017, 1:05:36 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd=%7BcurrentRadioTitle()%7D&XHR=1
[2/19/2017, 1:05:36 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
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Hitradio OE3 - LiveStream\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"},"shouldEndSession":false}}
**** Received Directive: {"version":"1.0","session":{"new":false,"sessionId":"amzn1.echo-api.session......","application":{"applicationId":"amzn1.ask.skill........"},"user":{"userId":"amzn1.ask.account..........."}},"context":{"System":{"application":{"applicationId":"amzn1.ask.skill.........."},"user":{"userId":"amzn1.ask.account............."},"device":{"supportedInterfaces":{"AudioPlayer":{}}}}},"request":{"type":"SessionEndedRequest","requestId":"amzn1.echo-api.request...........","timestamp":"2017-02-19T12:05:38Z","locale":"de-DE","reason":"ERROR","error":{"type":"INVALID_RESPONSE","message":"An exception occurred while dispatching the request to the skill."}}}
[2/19/2017, 1:05:39 PM] SessionEndedRequest
[2/19/2017, 1:05:39 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
[2/19/2017, 1:05:39 PM] [FHEM]   executing: https://192.168.178.25:8083/fhem?cmd=setreading%20Alexa%20intent%20SessionEndedRequest&XHR=1
[2/19/2017, 1:05:39 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
response :{"version":"1.0","sessionAttributes":{},"response":{"outputSpeech":{"type":"PlainText","text":"Bye"},"shouldEndSession":true}}


Im log steht nichts. Wie müsste ich was loggen?

Danke für deine Hilfe !
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: justme1968 am 19 Februar 2017, 13:19:10
in der antwort sind ein ganzer haufen null bytes. ich vermute mal das alexa damit ein problem hat.
Titel: Antw:alexa-fhem: Eure Custom-Skill Setups
Beitrag von: prodigy7 am 19 Februar 2017, 13:20:00
Ich habe einen passenden Thread angelegt. Siehe Post 1!
Titel: Antw:|alexa-fhem | Custom Skills] Eure Setups
Beitrag von: RaspiCOC am 19 Februar 2017, 13:42:11
@prodigy7: Du hast natürlich völlig Recht. Ich glaube aber, es ist schwer, ein Problem losgelöst vom unmittelbaren Kontext zu diskutieren.

Ich traue mich kaum noch dk3572 zu fragen, ob das Problem vielleicht bei anderen Sendern nicht besteht. Denn, wie justme  richtig bemerkt, kommt da wohl senderseitig Müll mit.

Insgesamt glaube ich, dass das Alexa Custom Skill Thema so gross ist, dass es 1. unter Sprachsteuerung eine eigene Kategorie Alexa benötigt und darunter weitere Themengruppen. D.h. dieser Thread in eigener Kategorie mit einem Thread pro eigenem Setup und entsprechender Diskussion.

Wollte ich nur mal vorschlagen, bin jetzt aber wieder still.  :)
Titel: Antw:|alexa-fhem | Custom Skills] Eure Setups
Beitrag von: dk3572 am 19 Februar 2017, 14:09:52
Nur Mut, mich kann man alles fragen  ;D
Das Problem tritt bei allen Sendern auf und wir erwähnt auch bei dem Beispiel mit "guten morgen".
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: KölnSolar am 23 Februar 2017, 00:11:22
dimmen mit itl210-dimmer mit rfxtrx
alexa-mapping: default-Einstellungen
homebridgeMapping: Brightness=state,cmd=level,factor=6.67

Alexa-Befehl: "alexa, sage femm, stelle Helligkeit dimmer auf xy%
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Master_Nick am 23 Februar 2017, 10:32:16
@KölnSolar kann ich dieses hier:

alexa-mapping: default-Einstellungen
homebridgeMapping: Brightness=state,cmd=level,factor=6.67

Eventuell direkt für einen Dummy nutzen? ^^
( https://forum.fhem.de/index.php/topic,67721.0.html )
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: KölnSolar am 23 Februar 2017, 11:23:56
eher nicht  :'( aber vielleicht ähnlich  ;D
ich hatte ja extra geschrieben, dass ich mit dem rfxtrx arbeite  ::) da lautet der Befehl  zum dimmen "set Dimmer level x" (x= 0-15)
Im IT-Modul wird mit "set Dimmer dimxy%" (xy=06, 12, 18, ....100) gedimmt.

Das in ein homebridgemapping umzusetzen bin ich nicht in der Lage  :-[
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Master_Nick am 23 Februar 2017, 11:25:58
Da sind wir schon 2...  8)

Naha ich schau mal, ob jemand wissendes über meinen Thread stolpert... bisher hab ich noch keinen wirklichen Ansatz.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: KölnSolar am 23 Februar 2017, 11:34:44
jaja homebridgemapping. Sicherlich einfach und logisch, wenn man aus der homebridge-welt kommt, aber sonst  :'(
Guck mal hier. https://forum.fhem.de/index.php/topic,67398.msg590456.html#msg590456 Ich empfinde das zwar als schlechtestmögliche Lösung, aber wenn man keine bessermögliche hat  :-[
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Master_Nick am 23 Februar 2017, 11:37:55
Mir fehlt aktuell noch der Ansatz wann alexa-fhem überhaupt denkt, dass es den Dimm Befehl gibt :-D
Reine WebCMDs reichen da glaube ich noch nicht.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: KölnSolar am 23 Februar 2017, 11:47:58
das ist aber eigentlich leicht: alexa-mapping: Brightness ! Damit hast die die Sprachkommandos, die Erkennung....
Damit ist schon einmal die alexa-Seite gelöst. Nur dann für Deinen Fall ein homebridgemapping, um die aus alexa-fhem kommende Prozentzahl in einen set-Befehl umzusetzen ..... Klingt einfach (und geht wahrscheinlich auch einfach) 6:dim06%, 12:dim12%...100:dim100%... Aber wie schreibt man das, wo es gar keine "Characteristic" im set-Befehl gibt  und keine konkreten readings :-\
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Master_Nick am 23 Februar 2017, 11:54:23
Ich habe dieses Attribut Alexa-Mapping noch bei keine Combobox in FHEM gesehen ^^ Aber ich schau nachher nochmal.
Danke dir.. Das Mapping kann man sich bestimmt aufdröseln.... und verstehen hoffe ich.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: tagedieb am 05 März 2017, 08:41:02
Guten morgen zusammen

ich weiss nicht, ob ich in diesem Thread auch fragen stellen "darf" oder ob hier nur Beispiele vorgestellt werden

daher bitte ich um Nachsicht

@Roman

mein "Verständnis" für die Erstellung funktionstüchtiger Aufgaben für Alexa ist noch sehr gering, doch du hast ein beispiel angebracht, was mir sehr verständlich erscheint - und dazu habe ich noch eine Frage
Zitatmy $Command = $_[0];
my $ALEXAReturn = "OK";
my $FHEMCommand = "set Dummy_test no_alexa_action";  # falls kein passendes Kommando gefunden wird

fhem("set Dummy_test $Command");    # nur zur Kontrolle um zu sehen was ankommt
$Command =~ s/fhemIntent: //;           # das reine Intent extrahieren
in deiner Sub erscheint diese Zeile - hast du dazu einen dummy angelegt und wenn ja, welche attr hast du ihn für diese Aufgabe gegeben, bzw welcher genericdevicetyp ist das?

ich möchte hier nicht einfach nur copy/paste veranstalten, sondern das verstehen

eine Antwort wäre toll

gruss tagedieb
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: h3llsp4wn am 06 März 2017, 17:02:46
Ähm ... kurze Frage - wäre es möglich, dass jemand mal einen "einfachen" Custom Skill (inkl. der erforderlichen Änderungen aller Bereiche (config.json, FHEM, alexa-fhem, lambda, skill set) veröffentlicht.

Ich habe jetzt meine Konfiguration nach einem Kampf mit Apache und Co. lauffähig und würde quasi gerne mit einem einfachen "Wohnzimmer Lampe an/aus" starten, um dann weitere Dinge aufzunehmen.
Ich habe zwar viele Teile gefunden, aber irgendwie erschließt sich mit nicht ganz der Zusammenhang?  :-[
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 06 März 2017, 17:40:11
das wird dir nicht helfen. für den smart home skill geht das out of the box wenn der
filter zu deinen geräten passt und für den custom skill musst du das get interactionModel selber machen weil es von deinen device und raum namen abhängig ist.

welcher zusammenhang fehlt dir noch? es steht doch alles im wiki und in den diversen threads hier.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: h3llsp4wn am 06 März 2017, 18:49:38
Ok - jetzt hab ich's ... er wollte irgendwie meine Geräte nicht annehmen, nachdem ich nun den alexaNamen gesetzt habe funktioniert meine erste Schaltung ... über den alias hat er meine Testlampe nicht gefunden ... aber egal. Jetzt hat sich dann auch der Kreis geschlossen, d.h. FHEM konfigurieren, Model für Amazon exportieren, Alexa-FHEM neu starten - ins Log schauen, ob alles erkannt wurde.

Naja, wenn man ein Weilchen gekämpft hat, dann verlässt einen zum Schluss der Mut ... sorry.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: tklein am 07 März 2017, 12:13:19
@tagedieb:

Zitat
in deiner Sub erscheint diese Zeile - hast du dazu einen dummy angelegt und wenn ja, welche attr hast du ihn für diese Aufgabe gegeben, bzw welcher genericdevicetyp ist das?

Soweit ich das verstehe brauchst du dafür keinen genericdevicetyp. es geht hierbei einfach um einen befehls-test-dummy, um so zu sehen, was alexa verstanden hat. macht sinn, gerade wenn man mit mehreren parametern in der intent arbeitet. spezielle attribute habe ich bei mir nicht gesetzt.

gruß
thomas
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: tagedieb am 19 März 2017, 15:11:17
Hallo zusammen

ich komme hier gerade nicht weiter, es wäre schön, wenn mir bitte jemand, den fehlenden Stubs geben könnte  ???
ich habe einen dummy Internals:
   NAME       Wurzelberegnung
   NR         1630
   STATE      aus
   TYPE       dummy
   Readings:
     2017-03-19 14:38:42   state           off
Attributes:
   alexaName  Rabatten
   alexaRoom  Aussen
   alexaTypes valve
   devStateIcon ein:Restart:off aus:Shutdown:on time:Update
   eventMap   on:ein off:aus
   genericDeviceType valve
   group      Bewässerung
   room       Beregnungsanlage,alexa
   setList    on off
   webCmd     ein:aus:time

im normalen fhem lassen sich hervorragend durch "set xyz time " seine aufgabe erledigen (zeitliche begrenzte beregnungsdauer)
mit alexa fhem und { fhem("set Wurzelberegnung time");;return "ich habe die bewässerung eingestellt"}=beregnest du bitte die rabattenauch
da ich jedoch einige von diesen Ventilen mit dieser einrichtung habe, wollte ich es im alexamapping zentralisieren
On=verb=bewässere,valueOn=time,valueOff=aus
leider sagt mir alexa ständig, das sie die bewässerung AUSgeschaltet hat - wie kann ich das ändern?
ein normales einschalten , möchte ich hier vermeiden, denn ein "vergessen" des abstellen, würde unangenehme Folgen haben

gruss tagedieb
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 20 März 2017, 10:46:22
die On characteristik

- ist nur zum ein und aus schalten
- kann man (aktuell) im alexaMapping nicht ändern
- hat mit fhemIntents nichts zu tun

du kannst aber mit der version 0.3.1 auch device namen im fhemIntent verwenden.

wenn du on auf on-for-timer oder etwas anderes umbiegen willst musst du das im homebridgeMapping des devices machen.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: tagedieb am 20 März 2017, 12:59:07
hallo justme1968

dankeschöön - da komme ich erst einmal weiter

schöne Woche
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Roman am 20 März 2017, 23:09:15
Zitat von: tagedieb am 05 März 2017, 08:41:02

@Roman

mein "Verständnis" für die Erstellung funktionstüchtiger Aufgaben für Alexa ist noch sehr gering, doch du hast ein beispiel angebracht, was mir sehr verständlich erscheint - und dazu habe ich noch eine Fragein deiner Sub erscheint diese Zeile - hast du dazu einen dummy angelegt und wenn ja, welche attr hast du ihn für diese Aufgabe gegeben, bzw welcher genericdevicetyp ist das?

ich möchte hier nicht einfach nur copy/paste veranstalten, sondern das verstehen

eine Antwort wäre toll

gruss tagedieb

Sorry für die späte Antwort, ich hab letzte Zeit wenig im Forum lesen können-
Es ist aber so wie tklein schon geschrieben hat. Ist einfach ein Dummy in den ich in den Status einfach beliebigen Text schreibe.
Hilft mir zumindest um schnell zu sehen ob und was so verstanden wird, bzw,, durch das Script gesetzt wird.
Ist meiner Meinung nach oft einfacher und schneller, als Logfiles durchsehen zu müssen.

Gruß
Roman
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: tagedieb am 22 März 2017, 21:21:50
Hallo Roman

danke für die Rückinfo, ich habe es dann doch "copy und paste" probiert, und dabei festgestellt das dieser dummy fehlte und welche Aufgabe hatte ???

gruss tagedieb
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: myrave am 26 April 2017, 08:58:37
Ich möchte den Custom Skill dazu nutzen, um den Status von Geräten abzufragen, z.B. "Alexa frag FHEM status Waschmaschine"

Das Gerät wurde unter FHEM_Device korrekt gelistet und hat die Attribute AlexaName und Alias "Waschmaschine".

Ich bekomme immer die Fehlermeldung: "Ich habe kein Gerät mit Namen waschmaschine im Raum unknown gefunden."
--> Ich will die Abfrage ja ohne Raum machen, aber scheinbar habe ich dort etwas falsch eingestellt - nur wo?

In den Sample Utterances gibt es folgenden Eintrag, die für mich keinen Raum benötigt - aber irgendwo fehlt noch etwas:
StatusIntent {Device} status

Alternativ funktioniert die Abfrage nach einem Raum - ohne Angabe des Gerätes, z.B. "Alexa frag FHEM status Waschraum"
Es werden korrekt die dort enthaltenen Geräte mit Status zurückgegeben, z.B. Waschmaschine ist aus.

Danke für den entscheidenden Tipp, wo ich hier noch eine Änderung machen muss, damit ich direkt nach dem Gerät fragen kann. :)
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 26 April 2017, 09:01:00
den fehler mit dem unknown room habe ich vorhin behoben.

neue version hier: https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117 (https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117)
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: myrave am 26 April 2017, 09:24:29
Danke für die schnelle Antwort, habe es gerade installiert - einen Schritt weiter, noch ein kleines Problem:

ERROR: TypeError: Cannot read property 'roomsOfName' of undefined

Muss ich irgendwo noch eine weiteres Attribut hinzufügen?

Oder kann ich den echoRoom auf "Alexa" setzen, da alle Geräte ja dieser Gruppe in FHEM angehören?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 26 April 2017, 09:43:28
wann genau kommt diese meldung? was steht auf der konsole?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: myrave am 26 April 2017, 10:12:11
Ich habe zum Testen den Befehl "Alexa frag FHEM status Waschmaschine" über Test bei developers.amazon.com im Custom Skill abgesetzt.

Service Request
{
  "session": {
    "sessionId": "SessionId.xxx",
    "application": {
      "applicationId": "amzn1.ask.skill.xxx"
    },
    "attributes": {},
    "user": {
      "userId": "amzn1.ask.account.xxx"
    },
    "new": true
  },
  "request": {
    "type": "IntentRequest",
    "requestId": "EdwRequestId.xxx",
    "locale": "de-DE",
    "timestamp": "2017-04-26T08:01:37Z",
    "intent": {
      "name": "StatusIntent",
      "slots": {
        "Device": {
          "name": "Device",
          "value": "Waschmaschine"
        },
        "preposition": {
          "name": "preposition"
        },
        "Room": {
          "name": "Room"
        }
      }
    }
  },
  "version": "1.0"
}


Service Response
1. The response is invalid

Im roten X steht folgendes ... copy and paste geht leider nicht:
Parse error on line 1:
The response is inva
Expecting 'String', 'Number' ... got 'undefined'


Im Terminal seh ich folgende Ausgabe:

**** Received Directive: {"version":"1.0","session":{"new":true,"sessionId":"SessionId.xxx","application":{"applicationId":"amzn1.ask.skill.xxx"},"attributes":{},"user":{"userId":"amzn1.ask.account.xxx"}},"request":{"type":"IntentRequest","requestId":"EdwRequestId.xxx","timestamp":"2017-04-26T08:01:37Z","locale":"de-DE","intent":{"name":"StatusIntent","slots":{"preposition":{"name":"preposition"},"Room":{"name":"Room"},"Device":{"name":"Device","value":"Waschmaschine"}}}}}
[4/26/2017, 10:02:43 AM] StatusIntent
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20myAlexa%20intent%20IntentRequest%20StatusIntent&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20myAlexa%20echoId%20unknown&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%201%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=setreading%20myAlexa%20echoRoom%20unknown&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]   executing: http://127.0.0.1:8083/fhem?cmd=%7B$defs%7BmyAlexa%7D-%3E%7B%22active%22%7D%20=%200%7D&XHR=1
[4/26/2017, 10:02:43 AM] [FHEM]     caching: On: 0 (as number; from 'off')
[4/26/2017, 10:02:43 AM] ERROR: TypeError: Cannot read property 'roomsOfName' of undefined from ::ffff:52.209.132.237
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 26 April 2017, 10:35:20
beim testen musst du aufpassen:
- normalerweise lässt man  das 'alexa, frage fhem' weg. es wird nur der text eingegeben der direkt an den skill geht
- ist das invocation word bei dir FHEM oder fhem? die schreibweise ist an dieser stelle wichtig.

der service request scheint aber trotzdem korrekt zu sein. ich habe die oben verlinkte version noch mal aktualisiert. bitte schau mal ob es damit besser geht.

wenn es immer noch nicht geht: starte alexa-fhem mal mit --debug und teste mit einem gesprochenen kommando.

Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: myrave am 26 April 2017, 10:58:44
Hey justme1968,

habe die neue Version installiert und es funktioniert jetzt. Vielen Dank dafür und auch generell für den Engagement für Alex FHEM, echt klasse!

Am Testen lag es nicht, das war schon korrekt gewesen. Ich habe auch jeweils andere Befehle ausprobiert, die korrekt funktioniert haben. :)
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 26 April 2017, 13:16:30
Wie bekomme ich in dem Beispiel mit der Temperatur es hin, wenn ich den Raum draußen ohne preposition abfragen will?

{alexaRoomTemperature($preposition,$Room)}=wie {preTemperature:warm;kalt} ist es {preposition} {Room}

Die Frage "Wie warm ist es im Bad" klappt prima, aber bei "Wie kalt ist es draußen" wird der Raum nicht geliefert. Wenn ich frage "Wie kalt ist es im draußen" funktioniert die Abfrage......

  "FHEMperlCodeIntent_preTemperature": {
          "name": "FHEMperlCodeIntent_preTemperature",
          "value": "kalt"
        },
        "preposition": {
          "name": "preposition"
        },
        "Room": {
          "name": "Room"
        }
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 26 April 2017, 14:59:00
mach die präposition optional in dem du eine zweite sample utterance ohne {preposition} angibst:{alexaRoomTemperature($preposition,$Room)}=wie {preTemperature:warm;kalt} ist es {preposition} {Room}|wie {preTemperature:warm;kalt} ist es {Room}
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 27 April 2017, 10:09:25
Hi Justme,
das könnte ich mal versuchen.
Jetzt ist die Frage ob ich Amazon die Sample utterance einfach unterjuble, oder sie von FHEM erzeugen lasse, dann benötige ich aber einen neuen fhemIntentes Eintrag.
Ich muss auch mal sehen was meine Ausführende Routine in der MyUtils dazu sagt, wenn ein Parameter fehlt. Ich hoffe der wird dann einfach leer übergeben.
Wenn alle Stricke reißen mache ich einen eigenen Intent für "wie kalt ist es draußen". Da brauche ich dann auch keinen Parameter mehr ;).

Ich hatte erhofft, dass man einen Parameter tatsächlich als optional kennzeichnen kann. Vielleicht kommt das noch mal in der Zukunft.

Viele Grüße
Ohosch
Titel: [alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 27 April 2017, 10:59:46
so wie oben geschrieben kannst du in einem fhemIntent mehrtet sampler utterances mit | getrennt angeben.

d.h. du brauchst keinen zweiten fhemIntent.

so ist das auch der offizielle api weg. bei optionalen parameter gibt man je ein beispiel mit und ohne an.

der andere weg ist nicht preposition zu verwenden sondern einen eigenen custom
slot type und hier am anfang ein leeres element einzubauen. ich weiß aber gerade nicht ob das im modul schon komplett eingebaut ist.

fehlende parameter werden als undef übergeben. das musst du in deinem
code berücksichtigen und gut ist.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 28 April 2017, 09:17:36
klappt leider nicht  :(

Fhem baut mit dem oder im Intent wie erwartet einen 2ten Eintrag in der Sample Utterance.
Amazon mag es allerdings nicht, wenn wenn derselbe Slot 2 mal durch den intent verwendet wird, und schmeisst mir eine Fehlermeldung. 

Ich glaube ich muss das doch durch einen komplett eigenen Intetnt mit eigenem Custom Slot lösen.

Viele Grüße
Ohosch
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 28 April 2017, 09:53:36
der slot darf nur ein mal vorhanden sein. wo kommt der zweite her?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 28 April 2017, 11:16:26
Der Slot ist nur einmal vorhanden.
Amazon sagt aber dass er 2 mal vom Intetnt verwendet wird. Ich muss am WE mal genauer schauen warum. Am 2ten Eintrag in der Sample Utterance lag es nicht. Nachdem ich den Manuell raus genommen habe konnte ich das Interaction Model immer noch nicht speichern.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 28 April 2017, 11:23:56
schau noch mal nach.

- jeden intent darf es nur ein mal geben. jeweils mit allen (auch den eventuell unbenutzten slots)
  wenn hier etwas doppelt ist -> das wäre ein fehler im alexa modul. oder copy&paste fehler.
- die custom slots darf es je nur ein mal geben. wenn hier etwas doppelt ist -> fehler im modul. oder copy&paste fehler.
- die sample utterances darf es so oft geben wie man es braucht. jeweils mit anderen sätzen und anderer kombination an slot typen.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 28 April 2017, 11:33:56
Könnte es daran liegen? das hat das Alxa Modul so gebaut. ich habe Deinen Vorschlag mit dem | im FhemIntent realisiert.

"slots" : [
            {
               "name" : "FHEMperlCodeIntent_preTemperature",
               "type" : "FHEMperlCodeIntent_preTemperature_Value"
            },
            {
               "name" : "preposition",
               "type" : "FHEM_preposition"
            },
            {
               "name" : "Room",
               "type" : "FHEM_Room"
            },
            {
               "type" : "FHEMperlCodeIntent_preTemperature_Value",
               "name" : "FHEMperlCodeIntent_preTemperature"
            },
            {
               "type" : "FHEM_Room",
               "name" : "Room"
            }
         ]
      },
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 28 April 2017, 13:03:35
FHEM scheint das Interaction Model falsch zu bauen wenn mann ein oder "|" im Intent verwendet.

Ich habe den Code oben in das hier abgeändert und nun schluckt Amazon es. Zumindest beim Test konnte ich jetzt auch mit und ohne Präpositon arbeiten.

So Funktioniert es nun:

"slots" : [
            {
               "name" : "FHEMperlCodeIntent_preTemperature",
               "type" : "FHEMperlCodeIntent_preTemperature_Value"
            },
            {
               "name" : "preposition",
               "type" : "FHEM_preposition"
            },
            {
               "name" : "Room",
               "type" : "FHEM_Room"
            }
         ]
      },
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 28 April 2017, 14:14:31
hab es im alexa modul repariert. ab morgen im update.

eine kleine einschränkung gibt es: ich war zu faul den fall zu berücksichtigen das gleiche slot namen mit unterschiedlichen values angegeben werden. deshalb werden nur die values des ersten vorkommen berücksichtigt. streng genommen kann man sogar die values der anderen dann weg lassen. d.h. z.b. beim zweiten preTemperature die warm;kalt aufzählung:{alexaRoomTemperature($preposition,$Room)}=wie {preTemperature:warm;kalt} ist es {preposition} {Room}|wie {preTemperature} ist es {Room}
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: ohosch am 28 April 2017, 14:28:45
Cool, vielen Dank und ein riesen Lob für den super Support :)
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Reinhart am 03 Mai 2017, 19:08:12
Dank der guten Beschreibungen habe ich nun auch den Echo problemlos in Betrieb nehmen können. Natürlich habe ich gleich am Custom Skill herumgebastelt und bin sehr schnell an meine eBus Daten und Energiewerte vom Youless Device gekommen. Am einfachsten erscheint mir hier die 99_myUtils geeignet zu sein, da ich mir hier die Messdaten beliebig zusammen stellen kann.

2 FHEMIntents hinzugefügt
{alexaHeizung()}=heizungsstatus
{currentEnergy()}=energieverbrauch


Sample Utterances Skill
FHEMperlCodeIntentB heizungsstatus
FHEMperlCodeIntentC energieverbrauch


und etwas Code in der 99_myUtils.pm
sub currentEnergy() {
  my $title = ReadingsVal("LS110_2", "electricityPower", "");
  my $titleday = int(ReadingsVal("LS110_2", "electricityConsumed_EnergyDay", ""));
  my $titlespitze = int(ReadingsVal("LS110_2", "electricityConsumed_PowerDayMax", ""));
  my $titlekosten = int(ReadingsVal("LS110_2", "electricityConsumed_EnergyCostDay", ""));
  return "Die aktuelle Leistung beträgt $title Watt und der Tagesverbrauch ist $titleday Kilowatt. Die Spitze betrug $titlespitze Watt. Die Stromkosten betrugen heute $titlekosten Euro";
}

sub alexaHeizung() {
  my $titlevorlauf = ReadingsVal("Vorlauf", "temperature", "");
  $titlevorlauf =~ s/\./,/g;
  my $titlekurve = ReadingsVal("HKurve", "HKurve", "");
  $titlekurve =~ s/\./,/g;
  my $titletemp = ReadingsVal("HKurve", "Aussentemp", "");
  $titletemp =~ s/\./,/g;
  my $titlekueche = ReadingsVal("Kueche", "state", "");
  $titlekueche =~ s/on/ein/g;
  my $titlewohn = ReadingsVal("Wohnzimmer", "state", "");
  $titlewohn =~ s/on/ein/g;
  my $titleeg = ReadingsVal("PumpeEG", "state", "");
  $titleeg =~ s/on/ein/g;
  return "Der Vorlauf beträgt $titlevorlauf Grad und die Heizkurve ist auf $titlekurve eingestellt. Die Pumpe in der Küche ist $titlekueche im Wohnzimmer $titlewohn und im Erdgeschoss $titleeg ";
}

hier musste ich zusätzlich noch den Dezimalpunkt und den Text "Ein" korrigieren.

Danke an alle die das ermöglicht haben!

LG
Reinhart


Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: WumpE am 17 Mai 2017, 10:12:36
Hier mal mein Setup

Alexa Sub
package main;
use strict;
use warnings;
use POSIX;

sub
Alexa_Sprache_Utils_Initialize($$)
{
  my ($hash) = @_;
}

sub get_alexa_skill_name(){

my @skillArray = (["XX","amzn1.ask.skill.www","allen"],
                   ["WZ","amzn1.ask.skill.xxx","wohnzimmer"],
                   ["K1","amzn1.ask.skill.yyy","charlotte"],
                   ["KU","amzn1.ask.skill.zzz","küche"],
                   ["K2","amzn1.ask.skill.ccc","johanna"],
                   ["FL","amzn1.ask.skill.vvv","flur"]);


my $skillID = ReadingsVal("Alexa_Device","fhemIntent",0);

my $ret = "";

for(my $i = 0; $i<@skillArray; $i++){
   if( $skillID =~ $skillArray[$i][1] ){
      $ret = $skillArray[$i][0]." ".$skillArray[$i][2];
      last;
   }
}
return $ret;
}

#####################################################################
#
# alexa_guten_morgen
#
#####################################################################
sub alexa_master($)
{
  my ($aktion) = @_;
  my ($skillName,$skillRoom) = split(m/\ /,get_alexa_skill_name());

  fhem "setreading Alexa_Device alexaSub master";
  fhem "setreading Alexa_Device skillName ".$skillName;
  fhem "setreading Alexa_Device skillRoom ".$skillRoom;
  fhem "setreading Alexa_Device aktion ".$aktion;
  fhem "setreading Alexa_Device szene ";
 
  if(lc($aktion) =~ m/hallo|guten.morgen/){
     if( $skillName eq "XX"){
       fhem "set SONOS_Kueche_STATUS on";
       fhem "set Rolladen_Gruppe_Alle pct 0";
       return $aktion.", ich habe in der Küche Sonos an geschalten und alle Rolladen geöffnet";
     }
     elsif ( $skillName eq "K1"){
       fhem "set K1_RA pct 0";
       return $aktion.", ich habe bei ".$skillRoom." das Rollo geöffnet";
     }
     elsif ( $skillName eq "K2"){
       fhem "set K2_RA pct 0";
       return $aktion.", ich habe bei ".$skillRoom." das Rollo geöffnet";
     }
     elsif ( $skillName eq "KU"){
       fhem "set SONOS_Kueche_STATUS on";
       return $aktion.", ich habe in der ".$skillRoom." das Radio an geschalten";
     }
     else {
       return "Für den Skill ".$skillRoom." gibt es keine Aktion ".$aktion ;
     }
  }elsif(lc($aktion) =~ m/tschüss|gute.nacht|auf.wiedersehen/){
     if( $skillName eq "XX"){
       fhem "set SONOS_Kueche_STATUS off";
   fhem "set Rolladen_Gruppe_Alle pct 100";
       return "Ich habe in der Küche das Radio aus geschalten. ".$aktion;
     }
     elsif ( $skillName eq "WZ"){
       fhem "set WZ_DA_R_SW off";
       fhem "set WZ_DA_L_SW off";
       fhem "set WZ_HUB activity PowerOff";
       return "Ich habe im ".$skillRoom." das Licht und den Fernseher aus geschalten. ".$aktion;
     }
     elsif ( $skillName eq "K1"){
       fhem "set K1_RA pct 100";
       return "Ich habe bei ".$skillRoom." das Rollo geschlossen.";
     }
     elsif ( $skillName eq "K2"){
       fhem "set K2_RA pct 100";
       return "Ich habe bei ".$skillRoom." das Rollo geschlossen.";
     }
     elsif ( $skillName eq "KU"){
       fhem "set SONOS_Kueche_STATUS off";
       return "Ich habe in der ".$skillRoom." das Radio aus geschalten. ".$aktion;
     }
     else {
       return "Für den Skill ".$skillRoom." gibt es keine Aktion ".$aktion ;
     }
  }elsif(lc($aktion) =~ m/ausschlafen|aus.schlafen/){
     if( $skillName eq "XX"){
       fhem "set Rollos_Automatik off";
       return "Ich habe die Rolladenautomatik aus geschalten. ";
     }
     else {
       return "Für den Skill ".$skillRoom." gibt es keine Aktion ".$aktion ;
     }
  }else{
     return "Für die Master Routine gibt es keine Aktion ".$aktion ;
  }
}

#####################################################################
#
# alexa_licht
#
#####################################################################
sub alexa_licht($$){
  my ($aktion,$szene) = @_;
  my ($skillName,$skillRoom) = split(m/\ /,get_alexa_skill_name());

  fhem "setreading Alexa_Device alexaSub licht";
  fhem "setreading Alexa_Device skillName ".$skillName;
  fhem "setreading Alexa_Device skillRoom ".$skillRoom;
  fhem "setreading Alexa_Device aktion ".$aktion;
  fhem "setreading Alexa_Device szene ".$szene;

# LichtSzene WZ
  if(lc($aktion) eq "lichtszene" && $skillName eq "WZ"){
     if( $szene eq "essen" ){
       fhem "set WZ_LightSzene_RP Essen";
       return "Ich habe die ".$aktion." im ".$skillRoom." auf essen gestellt";
     }
     elsif( $szene eq "fernsehen" ){
       fhem "set WZ_LightSzene_RP TV";
       return "Ich habe die ".$aktion." im ".$skillRoom." auf fernsehen gestellt";
     }
     elsif( $szene eq "film" ){
       fhem "set WZ_LightSzene_RP Beamer";
       return "Ich habe die ".$aktion." im ".$skillRoom." auf Film schauen gestellt";
     }
     elsif( $szene eq "an" ){
       fhem "set WZ_LightSzene_RP An";
       return "Ich habe die ".$aktion." im ".$skillRoom." auf an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set WZ_LightSzene_RP Aus";
       return "Ich habe die ".$aktion." im ".$skillRoom." auf aus gestellt";
     }
     else {
       return "Für den Raum ".$skillRoom." gibt es keine ".$aktion." mit dem Namen ".$szene ;
     }
# Licht WZ
  }elsif(lc($aktion) eq "licht" && $skillName eq "WZ"){
     if( $szene eq "an" ){
       fhem "set WZ_LightSzene_RP An";
       return "Ich habe das ".$aktion." im ".$skillRoom." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set WZ_LightSzene_RP Aus";
       fhem "set WZ_DA_R_SW off";
       fhem "set WZ_DA_L_SW off";
       return "Ich habe sämtliche Lichter im ".$skillRoom." aus gemacht";
     }
     else {
       return "Für den Raum ".$skillRoom." gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
     }
# Licht Charlotte
  }elsif(lc($aktion) eq "licht" && $skillName eq "K1"){
     if( $szene eq "an" ){
       fhem "set K1_LE_Ball on";
       return "Ich habe das ".$aktion." bei ".$skillRoom." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set K1_LE_Ball off";
       return "Ich habe das ".$aktion." bei ".$skillRoom." aus gemacht";
     }
     elsif( $szene eq "nacht" ){
       fhem "set K1_LE_Ball night";
       return "Ich habe das ".$aktion." bei ".$skillRoom." auf Nachtmodus gestellt";
     }
     else {
       return "Für den Raum ".$skillRoom." gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
     }
# Licht Johanna
  }elsif(lc($aktion) eq "licht" && $skillName eq "K2"){
     if( $szene eq "an" ){
       fhem "set K2_LE_Ball on";
       return "Ich habe das ".$aktion." bei ".$skillRoom." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set K2_LE_Ball off";
       return "Ich habe das ".$aktion." bei ".$skillRoom." aus gemacht";
     }
     else {
       return "Für den Raum ".$skillRoom." gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
     }
# Licht Flur
  }elsif(lc($aktion) eq "licht" && $skillName eq "FL"){
     if( $szene eq "an" ){
       fhem "set FL_SA1_Licht on";
       fhem "set TA_SA2_Licht on";
       return "Ich habe das ".$aktion." im ".$skillRoom." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set FL_SA1_Licht off";
       fhem "set TA_SA2_Licht off";
       return "Ich habe das ".$aktion." im ".$skillRoom." aus gemacht";
     }
     else {
       return "Für den Raum ".$skillRoom." gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
     }
  }else{
     return "Für die Licht Routine gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
  }
}

#####################################################################
#
# alexa_media
#
#####################################################################
sub alexa_media($$){
  my ($aktion,$szene) = @_;
  my ($skillName,$skillRoom) = split(m/\ /,get_alexa_skill_name());

  fhem "setreading Alexa_Device alexaSub media";
  fhem "setreading Alexa_Device skillName ".$skillName;
  fhem "setreading Alexa_Device skillRoom ".$skillRoom;
  fhem "setreading Alexa_Device aktion ".$aktion;
  fhem "setreading Alexa_Device szene ".$szene;

# Media KU
  if(lc($aktion) eq "radio" && $skillName eq "KU"){
     if( $szene eq "an" ){
       fhem "set SONOS_Kueche_STATUS on";
       return "Ich habe das ".$aktion." in der ".$skillRoom." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set SONOS_Kueche_STATUS off";
       return "Ich habe das ".$aktion." in der ".$skillRoom." aus gemacht";
     }
     else {
       return "In dem Raum ".$skillRoom." gibt es kein ".$aktion ;
     }
# Media WZ
  }elsif(lc($aktion) eq "fernseher" && $skillName eq "WZ"){
     if( $szene eq "an" ){
       fhem "set WZ_HUB activity FernsehenTV";
       return "Ich habe den ".$aktion." im ".$skillRoom." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set WZ_HUB activity PowerOff";
       return "Ich habe den ".$aktion." im ".$skillRoom." aus gemacht";
     }
     else {
       return "Für den Raum ".$skillRoom." gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
     }
# Media XX
  }elsif(lc($aktion) eq "klingel" && $skillName eq "XX"){
     if( $szene eq "an" ){
       fhem "set XX_LA_Klingel off";
       return "Ich habe die ".$aktion." an gestellt";
     }
     elsif( $szene eq "aus" ){
       fhem "set XX_LA_Klingel on";
       return "Ich habe die ".$aktion." stumm geschalten";
     }
     else {
       return "Für den Skill ".$skillRoom." gibt es keine ".$aktion." mit der Funktion ".$szene ;
     }
  }else{
     return "Für die Media Routine gibt es keine Aktion ".$aktion." mit der Funktion ".$szene ;
  }
}

1;



fhemIntends im AlexaDevice
{ alexa_master($AKTION)       }={AKTION:hallo;guten+morgen;tschüss;gute+nacht;auf+wiedersehen}
{ alexa_licht($AKTION,$SZENE) }={AKTION:licht;lichtszene} {SZENE:essen;fernsehen;film;an;aus}
{ alexa_media($AKTION,$SZENE) }={AKTION:radio;fernseher;klingel} {SZENE:an;aus}
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 15 Juni 2017, 16:44:31
Edit:
Eintrag in den richtigen Thread verschoben
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: prodigy7 am 17 Juni 2017, 08:02:43
Zitat von: Amenophis86 am 15 Juni 2017, 16:44:31
Ich bin dabei den Custom Skill zu lernen, habe aber noch Verständnisprobleme mit Homemapping und AlexaMapping.

Was will ich machen?
"Alexa, sage Smarti: Melde XY ab/an"

Was soll passieren?
Das Device XY (Aktuell ein Dummy Test, spätere mehrere Dummys) soll auf "anwesend"/"abwesend" gesetzt werden. (Aktuell test ich mit on/off um es einfacher zu verstehen)

Was habe ich bisher:
- Der Custom Skill funktioniert
- Im AlexaMapping habe ich folgendes ergänzt: TargetAnwesenheit=verb=melde,values=an:on;ab:off
- Im Custom Skill:
{
         "intent" : "TargetAnwesenheitIntent",
         "slots" : [
            {
               "name" : "article",
               "type" : "FHEM_article"
            },
            {
               "name" : "Device",
               "type" : "FHEM_Device"
            },
            {
               "type" : "FHEM_preposition",
               "name" : "preposition"
            },
            {
               "name" : "Room",
               "type" : "FHEM_Room"
            },
            {
               "type" : "TargetAnwesenheit_Value",
               "name" : "TargetAnwesenheit_Value"
            }
         ]
      },


TargetAnwesenheit_Value an | ab

TargetAnwesenheitIntent melde {Device} {TargetAnwesenheit_Value}
TargetAnwesenheitIntent melde {Device} {preposition} {Room} {TargetAnwesenheit_Value}
TargetAnwesenheitIntent melde {article} {Device} {TargetAnwesenheit_Value}
TargetAnwesenheitIntent melde {article} {Device} {preposition} {Room} {TargetAnwesenheit_Value}


Mein Dummy:
Internals:
   CFGFN
   NAME       test
   NR         3092
   STATE      ???
   TYPE       dummy
Attributes:
   alexaName  Anja
   alexaRoom  Test
   genericDeviceType switch
   room       Z_alexa



Zum testen hatte ich mal genericDeviceType switch gesetzt

Alex Antwortet mir: "Ich habe Ich kann anja nicht auf ab schalten. ab gestellt"

Vermutlich muss ich jetzt noch irgendwie das homebridgeMapping im Dummy setzen, aber verstehe nicht wie.
[alexa-fhem | Custom Skills] Probleme mit euren Setups (https://forum.fhem.de/index.php/topic,67398.0.html)
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 17 Juni 2017, 09:43:45
Zitat von: prodigy7 am 17 Juni 2017, 08:02:43
[alexa-fhem | Custom Skills] Probleme mit euren Setups (https://forum.fhem.de/index.php/topic,67398.0.html)

Aufgrund der vielen Alexa Threads wohl im falschen gelandet. Danke für den Hinweis.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: hummeruli am 12 Juli 2017, 01:01:25
Hi,

leider kann ich machen was ich will. Ich versuche meine MAX! Tür und Fenster Kontakte mit Alexa abzufragen, doch leider kommt immer nur "Der Status von Fenster im ... ist geschlossen" obwohl es auf ist.


Internals:
   CFGFN      ./FHEM/Raumklima.cfg
   CHANGED
   CULMAX_MSGCNT 23
   CULMAX_TIME 2017-07-12 00:29:57
   DEF        ShutterContact 0a5455
   IODev      CULMAX
   LASTInputDev CULMAX
   MSGCNT     23
   NAME       KU_Fenster
   NR         815
   RSSI       -70.5
   STATE      opened
   TYPE       MAX
   addr       0a5455
   backend    CULMAX
   rferror    0
   type       ShutterContact
   READINGS:
     2017-07-12 00:29:57   RSSI            -70.5
     2017-07-12 00:29:57   battery         ok
     2017-07-12 00:29:57   onoff           1
     2017-07-12 00:29:57   state           opened
   internals:
     interfaces switch_active;battery
Attributes:
   IODev      CULMAX
   alexaName  fenster
   alexaRoom  küche
   alias      Fenster-Küche
   devStateIcon opened:fts_window_2w_open@red closed:fts_window_2w@green
   event-on-change-reading state
   genericDeviceType contact
   homebridgeMapping clear ContactSensorState=state,values=opened:CONTACT_DETECTED,closed:CONTACT_NOT_DETECTED
   room       Alarm,Alexa,Raumklima


Das Logging gibt folgendes aus:


[2017-07-10 23:32:04] [Alexa_Custom_Skill] BU_Fenster is ContactSensor
[2017-07-10 23:32:04] [Alexa_Custom_Skill] BU_Fenster has
[2017-07-10 23:32:04] [Alexa_Custom_Skill]   StatusLowBattery [battery]
[2017-07-10 23:32:04] [Alexa_Custom_Skill]   ContactSensorState [state]
[2017-07-10 23:32:04] [Alexa_Custom_Skill]   CurrentDoorState [state]
[2017-07-10 23:32:04] [Alexa_Custom_Skill] { reading: 'battery',
  values: [ 'ok:BATTERY_LEVEL_NORMAL', '/.*/:BATTERY_LEVEL_LOW' ],
  device: 'BU_Fenster',
  informId: 'BU_Fenster-battery',
  characteristic_type: 'StatusLowBattery',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'Alexa_Custom_Skill' },
  value2homekit: { ok: 'BATTERY_LEVEL_NORMAL' },
  value2homekit_re: [ { re: '.*', to: 'BATTERY_LEVEL_LOW' } ] }
  2017-07-10 23:32:04 caching: BU_Fenster-battery: ok
[2017-07-10 23:32:04] [Alexa_Custom_Skill] { reading: 'state',
  values: [ 'closed:CONTACT_DETECTED', '/.*/:CONTACT_NOT_DETECTED' ],
  device: 'BU_Fenster',
  informId: 'BU_Fenster-state',
  characteristic_type: 'ContactSensorState',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'Alexa_Custom_Skill' },
  value2homekit: { closed: 'CONTACT_DETECTED' },
  value2homekit_re: [ { re: '.*', to: 'CONTACT_NOT_DETECTED' } ] }
  2017-07-10 23:32:04 caching: BU_Fenster-state: closed
[2017-07-10 23:32:04] [Alexa_Custom_Skill] { reading: 'state',
  values: [ 'closed:CLOSED', '/.*/:OPEN' ],
  device: 'BU_Fenster',
  informId: 'BU_Fenster-state',
  characteristic_type: 'CurrentDoorState',
  log:
   { [Function: bound ]
     debug: [Function],
     info: [Function],
     warn: [Function],
     error: [Function],
     log: [Function],
     prefix: 'Alexa_Custom_Skill' },
  value2homekit: { closed: 'CLOSED' },
  value2homekit_re: [ { re: '.*', to: 'OPEN' } ] }


Auch muss ich dazu sagen, dass der "state" bei diesen Geräten opened und closed annehmen kann. Als weiteres Reading gibt es noch "onoff", dieses kann "0" und "1" annehmen.
Meine Vermutung ist dass an Stelle von "open" eben "opened" zu Verfügung gestellt wird. Habe das mit dem "onoff" auch schon versucht zu nutzen. Als genericdevice habe ich schon diverse versucht, ohne Erfolg.

Ich hoffe, dass mir von Euch Profis jemand helfen kann.

Danke

Uli
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 12 Juli 2017, 20:11:12
das device listing ist von KU_Fenster, das alexa log von BU_Fenster. kann es sein das du beim falschen device bist?

die max kontakte sollten auch komplett automatisch erkannt werden. ohne das genericDeviceType und homebridgeMapping gesetzt werden muss.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: hummeruli am 13 Juli 2017, 00:00:49
Oh sorry, habe nur einen Ausschnitt kopiert, die sind alle identisch. Es ist aber schon komisch dass er bei mir keinen einzigen Kontakt erkennt. Ich hatte es zuerst ohne jegliche Einträge in den genericDeviceTypes und homebridgeMappings versucht.
Würde eventuell ein Dummy bzw. Notify helfen?


Uli
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 13 Juli 2017, 00:15:42
zeig mal ein jsonlist2 von einem der max devices.

dummys und notifys sind nichtnötig.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: hummeruli am 13 Juli 2017, 07:05:27
Hier ein Jsonlist2 vom Bürofenster:


{
    "Name":"BU_Fenster",
    "PossibleSets":"wakeUp factoryReset groupid associate:WZ_Termostat deassociate:WZ_Termostat",
    "PossibleAttrs":"alias comment:textField-long eventMap group room suppressReading userReadings:textField-long verbose:0,1,2,3,4,5 IODev do_not_notify:1,0 ignore:0,1 dummy:0,1 showtime:1,0 keepAuto:0,1 scanTemp:0,1 event-on-change-reading event-on-update-reading event-aggregator event-min-interval stateFormat:textField-long timestamp-on-change-reading alexaName alexaRoom cmdIcon devStateIcon devStateStyle fm_fav fm_groups fm_name fm_order fm_type fm_view genericDeviceType:security,ignore,switch,outlet,light,blind,thermometer,thermostat,contact,garage,window,lock homebridgeMapping:textField-long icon room_map sortby structexclude webCmd widgetOverride userattr",
    "Internals": {
      "CFGFN": "./FHEM/Raumklima.cfg",
      "CHANGED": "null",
      "CULMAX_MSGCNT": "14",
      "CULMAX_TIME": "2017-07-13 06:42:59",
      "DEF": "ShutterContact 1511a5",
      "LASTInputDev": "CULMAX",
      "MSGCNT": "14",
      "NAME": "BU_Fenster",
      "NR": "881",
      "RSSI": "-55.5",
      "STATE": "closed",
      "TYPE": "MAX",
      "addr": "1511a5",
      "backend": "CULMAX",
      "rferror": "0",
      "type": "ShutterContact"
    },
    "Readings": {
      "RSSI": { "Value":"-55.5", "Time":"2017-07-13 06:42:59" },
      "battery": { "Value":"ok", "Time":"2017-07-13 06:42:59" },
      "onoff": { "Value":"0", "Time":"2017-07-13 06:42:59" },
      "state": { "Value":"closed", "Time":"2017-07-13 06:42:59" }
    },
    "Attributes": {
      "IODev": "CULMAX",
      "alexaName": "fenster",
      "alexaRoom": "büro",
      "alias": "Fenster-Büro",
      "devStateIcon": "opened:fts_window_2w_open@red closed:fts_window_2w@green",
      "event-on-change-reading": "state",
      "room": "Alarm,Alexa,Raumklima"
    }
  },



Ich hoffe dass Du da etwas findest.

Danke

Uli
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Marlen am 19 Juli 2017, 06:52:13
Hallo, vielen dank an die super Beschreibungen und Beispiele!

Ich hab nir auch eine 99_Alexa_Sprache_Utils.pm gebastelt!

package main;
use strict;
use warnings;
use POSIX;
sub
Alexa_Sprache_Utils_Initialize($$)
{
   my ($hash) = @_;
}
##### Start Warmwasser
sub
alexa_warmwasser()
{
my $wwasser = ReadingsVal("WarmWasser","alexatemp","");; #Value("Ww_Floorplan");
if ($wwasser >= 42) {
return "Die Warmwassertemperatur beträgt $wwasser °C, wenn du baden oder duschen möchtest ist das kein Problem!";
}elsif ($wwasser >= 35) {
return "Die Warmwassertemperatur beträgt $wwasser °C, wenn du duschen möchtest ist das kein Problem!";
}else{
return "Die Warmwassertemperatur beträgt $wwasser °C.";
}
}

#####Ende Warmwasser
1;


Kann man damit aber auch einen schaltbefehl abarbeiten?

Ich möchte sagen "Alexe, sage Smart Home, lade Warmwasser!"

geht das?

Oder das Alexa gleich fragt, wenn das Wasser unter 35C ist ob ich das Wasser nachladen möchte!

LG
  Marlen
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Cobra am 19 Juli 2017, 09:02:09
Du kannst natürlich in die SUB auch entsprechende set-Befehle einbauen.

Hab ich so zB. bei meiner Kaffeemaschine gemacht:

sub macheKaffee($$) {

my($num,$State) = @_;

if (Value("KM.Kueche_Filterkaffee") eq "ready" && $State eq "schwache") {
fhem ("set KM.Kueche_Filterkaffee brew $num weak");
return "ich mache $num $State Kaffee für dich.";
}
elsif (Value("KM.Kueche_Filterkaffee") eq "ready" && $State eq "mittlere") {
fhem ("set KM.Kueche_Filterkaffee brew $num medium");
return "ich mache $num $State Kaffee für dich.";
}
elsif (Value("KM.Kueche_Filterkaffee") eq "ready" && $State eq "starke") {
fhem ("set KM.Kueche_Filterkaffee brew $num strong");
return "ich mache $num $State Kaffee für dich.";
}


Eine weiterer direkter Befehl bei Rückmeldungen von Alexa geht meines Wissens noch nicht.

Gruß Cobra
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Marlen am 19 Juli 2017, 15:22:20
Wie schaut das dann in deinem fhemIntents aus?

Was sagst du dann? "Alexa, sage Samrt Home machKaffee stark!"?

LG
  Marlen
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Cobra am 19 Juli 2017, 15:24:45
Hey Marlen,

mein fhemIntent ist folgendermaßen:

{macheKaffee($num,$State)}=mache {num:AMAZON.NUMBER} {State:schwache;mittlere;starke;extrastarke} Kaffee

Also zB.
Alexa, sage James mache 5 mittlere Kaffee
Alexa, sage James mache 9 starke Kaffee
etc.

Gruß Cobra
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Marlen am 20 Juli 2017, 12:38:30
Hallo,

ich hab jetzt 4 fhemIntents angelegt!
Und natürlich auch in der 99_Alexa_Sprache_Utils.pm!

1.{alexa_tagesverbrauch()}=tagesverbrauch
2.{alexa_garagentor()}=garagentor
3.{alexa_garagentor_auf()}=garagentor auf
4. {alexa_garagentor_zu()}=garagentor zu

3.& 4. funktionieren gut!

aber 1. & 2. wollen nicht so! Liegt das daran, wie ich sage:
"Alexa, frage Smart Home nach Tagesverbrauch!"
"Alexa, frage Smart Home nach Garagentor!"

Liegt das an dem "nach" ????

Wenn ich "Alexa, lade Smart Home" und dann nur "Tagesverbrauch", dann klappt es!
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 20 Juli 2017, 13:16:35
was hast du denn im Skill für den Intent angegeben?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Cobra am 20 Juli 2017, 13:19:04
Ich meine dass wenn du sagst:

"Alexa, frage Smart Home nach Tagesverbrauch!"
"Alexa, frage Smart Home nach Garagentor!"


Dass dann das fhemIntent auch z.B. so aussehen muss:

1.{alexa_tagesverbrauch()}=nach tagesverbrauch
2.{alexa_garagentor()}=nach garagentor
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Marlen am 20 Juli 2017, 13:21:38
Zitat von: Amenophis86 am 20 Juli 2017, 13:16:35
was hast du denn im Skill für den Intent angegeben?

Muss ich da was manuell ändern?

{
  "intents": [
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "Weckzeit_valuePrefix",
          "type": "Weckzeit_prefix"
        },
        {
          "name": "uhr_Value",
          "type": "AMAZON.TIME"
        }
      ],
      "intent": "uhrIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "prozent_Value",
          "type": "AMAZON.NUMBER"
        }
      ],
      "intent": "prozentIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "On_Value",
          "type": "On_Value"
        }
      ],
      "intent": "OnIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "TargetPosition_Value",
          "type": "TargetPosition_Value"
        }
      ],
      "intent": "TargetPositionIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "Brightness_Value",
          "type": "AMAZON.NUMBER"
        }
      ],
      "intent": "BrightnessIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "grad_Value",
          "type": "AMAZON.NUMBER"
        }
      ],
      "intent": "gradIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "Saturation_Value",
          "type": "AMAZON.NUMBER"
        }
      ],
      "intent": "SaturationIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "Saturation_ValueB",
          "type": "AMAZON.NUMBER"
        }
      ],
      "intent": "SaturationIntentB"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "Hue_Value",
          "type": "Hue_Value"
        }
      ],
      "intent": "HueIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        },
        {
          "name": "Hue_ValueB",
          "type": "Hue_ValueB"
        }
      ],
      "intent": "HueIntentB"
    },
    {
      "intent": "FHEMperlCodeIntent"
    },
    {
      "intent": "FHEMperlCodeIntentB"
    },
    {
      "intent": "FHEMperlCodeIntentC"
    },
    {
      "intent": "FHEMperlCodeIntentD"
    },
    {
      "intent": "FHEMperlCodeIntentE"
    },
    {
      "intent": "FHEMperlCodeIntentF"
    },
    {
      "intent": "FHEMperlCodeIntentG"
    },
    {
      "slots": [
        {
          "name": "Device",
          "type": "FHEM_Device"
        },
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        }
      ],
      "intent": "StatusIntent"
    },
    {
      "slots": [
        {
          "name": "preposition",
          "type": "FHEM_preposition"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        }
      ],
      "intent": "RoomAnswerIntent"
    },
    {
      "intent": "RoomListIntent"
    },
    {
      "slots": [
        {
          "name": "article",
          "type": "FHEM_article"
        },
        {
          "name": "Room",
          "type": "FHEM_Room"
        }
      ],
      "intent": "DeviceListIntent"
    },
    {
      "intent": "AMAZON.CancelIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    }
  ]
}
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Cobra am 20 Juli 2017, 13:24:20
Am einfachsten ist, wenn du nach der Erstellung der fhemIntents nochmal alles wesentliche bei Alexa im Skill auf der Developer-Seite neu reinkopierst.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 20 Juli 2017, 13:26:09
Ich mag mich ja irren, aber im Sample Utterances musst du es auch anpassen. Hier mal ein Beispiel meiner Intents:

FHEMperlCodeIntent guten morgen
FHEMguteNachtIntent gute nacht
FHEMperlCodeIntentB welche kontakte sind offen
FHEMperlCodeIntentB welche kontakte sind noch offen
FHEMperlCodeIntentB sind noch kontakte offen
FHEMperlCodeIntentC schalte am Fernseher {Programm} {On_Value}
FHEMperlCodeIntentC schalte den Fernseher auf {Programm} um
FHEMperlCodeIntentC stelle den Fernseher auf {Programm}
FHEMperlCodeIntentD stelle den Fernseher {lautstaerke}
FHEMperlCodeIntentD stelle den Ton am Fernseher {lautstaerke}
FHEMperlCodeIntentE stell den Fernseher auf Laustärke {stufe}
FHEMperlCodeIntentE stell den Fernseher auf Stufe {stufe}
FHEMperlCodeIntentE stell den Ton am Fernseher auf Stufe {stufe}


Dazu natürlich das Intent Schema und die Slot Types angepasst.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Marlen am 20 Juli 2017, 13:36:07
Ach hier kann man auch mehrer "Auslösetexte" festlegen?

Und das FHEMperlCodeIntentB bedeutet, dass einfach welcher Sub aus der 99_Alexa_Sprache_Utils.pm abgearbeitet wird!?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 20 Juli 2017, 16:39:57
Wenn ich es richtig verstanden habe (und soweit klappt es bei mir), werden die Intents mittels der Buchstaben durch nummeriert. Im Alexa Device sieht es dazu wie folgt aus bei mir:

#IntentName=<sample utterance>
{alexa_gutenmorgen()}=guten morgen
guteNacht=gute nacht
{alexa_kontakte()}=welche kontakte sind offen
{alexa_tv_programm($Programm)}=schalte am Fernseher {Programm} ein
{alexa_tv_lautstaerke($lautstaerke)}=stellen den Fehrnseher {$lautstaerke}
{alexa_tv_lautstaerke_stufe($stufe)}=stell den Fernseher auf Laustärke {$stufe}
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 20 Juli 2017, 17:01:45
bitten nichts in die namen hinein interpretieren. die können sich ändern. wenn man mehrere sätze für den gleichen intent verwenden möchte einfach mit | getrennt im attribut angeben.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 20 Juli 2017, 17:24:38
Soll das heißen die Sample Utterances im Skill sind nicht relevant? Dachte dort werden die verschiedenen Sätze abgebildet, wie von mir hier (https://forum.fhem.de/index.php/topic,65890.msg662001.html#msg662001) gepostet? Werden die Sätze etwa alle im Attr fhemIntents angegeben?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: justme1968 am 20 Juli 2017, 17:35:14
die sind relevant aber man sollte sie im attribut anpassen und dann nur das get ergebniss dort eintragen.

das ist zwar aktuell nur zum teil relevant da man noch nichts per api zu amazon hoch laden kann. aber ich denke das kommt irgendwann.

zum anderen überschreibt man sich nicht aus versehen etwas weil man einfach stur die komplette get ausgabe verwenden kann ohne von hand häppchenweise zu kopieren.

ausserdem kann der skill nur die variablen für custom slots füllen die er auch kennt. die information kommt ebenfalls aus dem attribut.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Amenophis86 am 20 Juli 2017, 17:55:47
Kann dir leider nicht ganz folgen, kannst du mal ein Beispiel machen? Sry, bin da einfach noch net ganz dahinter gekommen.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Marlen am 20 Juli 2017, 21:59:52
Hi,

mit Attribut anpassen meinst du also hier die Befehle mit | getrennt auf zu führen???

So etwa?
{alexa_tagesverbrauch()}=tagesverbrauch|nach tagesverbrauch|nach den tagesverbrauch


Irgendwie werde ich zwar verstanden, aber es wird was anderes ausgeführt!
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Cobra am 12 August 2017, 00:50:36
Falls jemand auf der Suche ist wie er schnell abfragen kann ob noch Fenster auf sind hier meine Setup.

Voraussetzung ist bei mir, dass alle Fensterkontakte mit FTK. anfangen.

Meine Sub:

sub alexastatusFensterOffen() {

my @monitored=devspec2array("(FTK.*):FILTER=STATE!=closed");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= AttrVal($_,"alias",$_);
if ($i < $cnt_devs - 2) {
  $msgtext .= ", ";
}
if ($i == $cnt_devs - 2) {
  $msgtext .= " und ";
}
$i++;
}

if ($cnt_devs > 1) {
return "$msgtext sind noch auf";
}
elsif ($cnt_devs < 1){
return "Alle Fenster sind zu";
}
elsif ($cnt_devs = 1){
return "$msgtext ist noch auf";
}
}


Mein fhemIntent:

{alexastatusFensterOffen()}=ob noch fenster auf sind|welche fenster auf sind|welche fenster noch auf sind

Somit kann ich fragen:
Alexa, frage James ob noch Fenster auf sind.
Alexa, frage James welche Fenster auf sind.
Alexa, frage James welche Fenster noch auf sind.


Gruß Cobra
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: itze61 am 09 September 2017, 23:44:57
Hallo Cobra,

habe lange eine Funktion für meine Fenster in FHEM in Verbindung mit Alexa gesucht.

Auch wenn ich zwei Tage für die Installation deines Scriptes gebraucht habe (individuelle Probleme), so läuft es jetzt hervorragend.

Vielen Dank dafür !

Möchte gerne auch andere ermutigen ihre Scripte/Setups in diesem Forum zu präsentieren.

Schönes WE
  .
/tze
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: wolley am 10 Dezember 2017, 12:53:55
Hallo,

danke fuer den Script !


Zitat von: Cobra am 12 August 2017, 00:50:36
Voraussetzung ist bei mir, dass alle Fensterkontakte mit FTK. anfangen.

Meine Sub:

sub alexastatusFensterOffen() {

my @monitored=devspec2array("(FTK.*):FILTER=STATE!=closed");

}


Leider bekomme ich ihn bei mir nicht zum Laufen. Liegt daran, dass meine Fensterkontake mit _Fenster enden. Ich möchte die Kontake aber nicht umbenennen.
Veilleicht kann mir ja einer einen Denkanstoss geben !

Leider bringt mir die Verwendung des Nachfolgenden:

sub alexastatusFensterOffen() {

my @monitored=devspec2array("(.*Fenster):FILTER=STATE!=closed");

}


....nicht das gewuenschte Ergebnis. Die Abfrage in FEHM nach dem Batteriestatus in der fhem.cfg funktioniert jedoch darueber. Scheint aber wohl nicht der gleiche Syntax zu sein.

Danke fuer eure Hilfe !

Cu
Wolle

Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Catinor am 11 Dezember 2017, 00:19:12
Dank (oder trotz ;D ) der vielen Threads und Posts habe ich Alexa nun schon recht weit gebracht. Wird Zeit anzufangen was zurückzugeben. Als erstes die Lichtsteuerung.

Meine Sofaecke wird durch 3 weisse HUEs und einen LightStrip beleuchtet. Seit längerem sind die in einer LightScene zusammengefasst, die die Helligkeitsstufen on/70/50/30 sowie spezielle Settings extra und romantisch kennt. Die werden in FTUI genutzt, und mit einem HUE-Dimmer, der neben ein/aus zwei Perl-Funktion zum hoch- und runterdimmen triggert. Wobei es abgesehen vom Dimmen selten was manuell zu steuern gibt, ein Arduino mit Bewegungssensor löst 95% der Schaltvorgänge aus.

Ich hab mir für jeden Bereich einen eigenen Skill angelegt. Der hier hört auf "licht" (ich hab nur noch ein weiteres FHEM-geschaltetes Licht, das steuert zu 99% ein anderer Arduino), also zb. "alexa, sag licht heller".

Der Skill:


{
  "intents": [
    {
      "intent": "AMAZON.CancelIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    },
    {
      "intent": "AMAZON.HelpIntent"
    },
    {
      "intent": "AMAZON.YesIntent"
    },
    {
      "intent": "AMAZON.NoIntent"
    },
    {
      "intent": "AMAZON.RepeatIntent"
    },
    {
      "slots": [
        {
          "name": "brightness",
          "type": "LightControl"
        },
        {
          "name": "action",
          "type": "LightAction"
        }
      ],
      "intent": "FHEMperlCodeIntent"
    }
  ]
}


Die Custom Slot Types, erstens "LightAction":


mach
mache
schalt
schalte


Zweitens "LightControl":


aus
ein
an
heller
mehr
rauf
dünkler
dunkler
runter
weniger
hell
ganz hell
mittel
gedämpft
gedimmt
romantisch


Und die Utterances:


FHEMperlCodeIntent {brightness}
FHEMperlCodeIntent {action} {brightness}


Die {action} nutze ich in der Perl-Funktion nicht. Die Definition des fhemIntents im Alexa-Objekt:

{alexa_light("$brightness")}={brightness}|{action} {brightness}


Zuletzt die Perl-Funktion:


sub alexa_light {
    my $brightness = $_[0];
    my $answer = "";
    my $command = "";
    my $FHEMcommand = "";
    my %setting = (
          "heller" => "{light_cycle_wandlampe_up()}:&ok",
          "mehr" => "{light_cycle_wandlampe_up()}:&ok",
          "rauf" => "{light_cycle_wandlampe_up()}:&ok",
          "dünkler" => "{light_cycle_wandlampe_down()}:&ok",
          "dunkler" => "{light_cycle_wandlampe_down()}:&ok",
          "weniger" => "{light_cycle_wandlampe_down()}:&ok",
          "runter" => "{light_cycle_wandlampe_down()}:&ok",
          "hell" => "set state_light_wz scene on",
          "ein" => "set state_light_wz scene on",
          "an" => "set state_light_wz scene on",
          "ganz hell" => "set state_light_wz scene extra",
          "mittel" => "set state_light_wz scene 50",
          "gedämpft" => "set state_light_wz scene 30",
          "gedimmt" => "set state_light_wz scene 30",
          "romantisch" => "set state_light_wz scene 10",
          "aus" => "set HUEDevice3 off;set HUEDevice1 off 10;sleep 10;set HUEDevice2 off 10;sleep 20;set state_light_wz scene off"
);
    ($FHEMcommand,$answer) = split (/:/, $setting{$brightness});
    fhem("$FHEMcommand");
    return "$answer";
}


Nach dem "&" vor dem Antworttext hab ich 5 Stunden lang alle Posts der Alexa-Threads durchgesucht  :P mit Erfolg: damit wird die Verbindung resp. der Skill offen gehalten, ein "mehr" "mehr" dimmt dann Stufe um Stufe hoch, ohne "Alexa, sag Licht ..." wiederholen zu müssen. Und wenn alexa-fhem dann auch noch Synonyme und IDs versteht, fallen die Hälfte der möglichen Helligkeitsanweisungen auch noch weg.

Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: x-ingo am 06 Januar 2018, 20:36:28
Hallo,

ich hab bei mir zu Hause eine Squeezebox im Wohnzimmer. Diese läuft auch gut mit Google Music "all inclusive" nur das ich die bisher nicht mit Alexa steuern konnte. Außerdem wollte ich auch nicht noch zusätzlich "unlimited" von Amazon bezahlen um über den Echo Musik zu hören und deshalb musste ich mich an die Integration der beiden Komponenten machen.
Quasi perfekt dazu ist FHEM mit ALEXA-FHEM und ein wenig Einarbeitung :-).

Umsetzung ist wie folgt
---
Alexa Developer Console
Der Custom Skill heißt "Wohnbereich" und ist hat u.a. folgendes
interaction model:
    {
      "slots": [
        {
          "name": "artist",
          "type": "SEARCH"
        },
        {
          "name": "song",
          "type": "SEARCH"
        }
      ],
      "intent": "FHEMperlCodeIntentB"
    }

custom slot types
SEARCH

Hallo Du
Was auch
Immer das
sein kann
Wer ist Kanzler
Warum ist
Kanzler
Göthe
hilf mir
hilf mir nicht
Taylor Swift
Herbert Grönemeyer
Deichkind
Flunk
Morcheeba
George Ezra
Helmut Kohl Merkel

sample utterances
FHEMperlCodeIntentB spiele {artist}
FHEMperlCodeIntentB spiele Lieder von {artist}
FHEMperlCodeIntentB spiel was von {artist}
FHEMperlCodeIntentB spiele {song} von {artist}
FHEMperlCodeIntentB spiele das Lied {song} von {artist}
FHEMperlCodeIntentB spiele das Lied {song}

FHEM Alexa-Device:
fhemIntents - Das zweite wohlgemerkt, sonst wäre es oben nicht FHEMperlCodeIntentB sondern FHEMperlCodeIntent
{Musikcmd ("spiele", $artist, $song)}=spiele {artist:SEARCH} {song:SEARCH}

myUtils.pm:

sub Musikcmd {

my $artist = $_[1];
my $song = $_[2];
my $return = "<speak><say-as interpret-as=\"interjection\">oh oh</say-as> - da hat was nicht geklappt.</speak>";

# Convert the spaces into % for the URL call
my $sb_artist = $artist;
my $sb_song = $song;
$sb_artist =~ tr/ /%2520/;
$sb_song =~ tr/ /%2520/;

# Will play the 50 best rated songs if just an artist is given
if ($song eq "") {
HttpUtils_NonblockingGet({ url=>'http://192.168.2.102:9002/plugins/googlemusic/index.html?index=1.3_' . $sb_artist . '.0.0.1&player=00%3A04%3A20%3A23%3A66%3A4e&action=play', callback=>sub(){ Log 1,"DATA:$_[2]" } });
print "Musikcmd: " . 'http://192.168.2.102:9002/plugins/googlemusic/index.html?index=1.3_' . $sb_artist . '.0.0.1&player=00%3A04%3A20%3A23%3A66%3A4e&action=play' . "\n";
$return = "<speak><say-as interpret-as=\"interjection\">alles klar</say-as> - ich werde Lieder von " . $artist . " spielen.</speak>";
}
# If just a song is given, we will try to play this song
elsif ($artist eq "") {
HttpUtils_NonblockingGet({ url=>'http://192.168.2.102:9002/plugins/googlemusic/index.html?index=1.3_' . $sb_song . '.2.0&player=00%3A04%3A20%3A23%3A66%3A4e&action=play', callback=>sub(){ Log 1,"DATA:$_[2]" } });
print "Musikcmd: " . 'http://192.168.2.102:9002/plugins/googlemusic/index.html?index=1.3_' . $sb_song . '.2&player=00%3A04%3A20%3A23%3A66%3A4e&action=play' . "\n";
$return = "<speak><say-as interpret-as=\"interjection\">oh mein gott</say-as> - ich hoffe es ist die richtige Version von " . $song . " </speak>";
}
# If an artist and a song is given, lets play all matching song in a playlist
else {
HttpUtils_NonblockingGet({ url=>'http://192.168.2.102:9002/plugins/googlemusic/index.html?index=1.3_' . $sb_artist . '%25' . $sb_song .  '.2&player=00%3A04%3A20%3A23%3A66%3A4e&action=play', callback=>sub(){ Log 1,"DATA:$_[2]" } });
print "Musikcmd: " . 'http://192.168.2.102:9002/plugins/googlemusic/index.html?index=1.3_' . $sb_artist . '%25' . $sb_song .  '.2&player=00%3A04%3A20%3A23%3A66%3A4e&action=play' . "\n";
$return = "<speak><say-as interpret-as=\"interjection\">okey dokey</say-as> - ich spiele ". $song . " von " . $artist . " in allen Varianten die ich finden kann.</speak>";
}

return $return;
}

---

Wichtig ist (leider) die Aussprache gerade bei englischen Titeln .. wenn ich Musik von der Gruppe "Flunk" hören will und dies vermeintlich richtig ausspreche, dann sucht die Squeezebox nach Liedern von "Frank" :-(.
Was nett ist, dass bei den custom slot types nur eine Auswahl stehen muss, Alexa versteht auch alles andere ohne Probleme. Erstaunlicherweise auch meinen Test mit "Thievery Corporation".

Grüße,
x-ingo
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Mpomp am 11 Januar 2018, 22:26:10
Hallo Catinor,

mir gefällt dein Setup mit dem Licht dimmen.
Ich hätte da nur noch ein paar Fragen.

ZitatNach dem "&" vor dem Antworttext hab ich 5 Stunden lang alle Posts der Alexa-Threads durchgesucht  :P mit Erfolg: damit wird die Verbindung resp. der Skill offen gehalten, ein "mehr" "mehr" dimmt dann Stufe um Stufe hoch, ohne "Alexa, sag Licht ..."

Wie funktioniert dies mit der Referenz und was beinhaltet die Funktion light_cycle_wandlampe_up()

Ist es so auch möglich einen Dialog mit Alexa zu führen, falls nicht alle Parameter übermittelt wurden?

Danke
LG
MPomp
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Catinor am 11 Januar 2018, 22:53:30
Frage: was meinst du mit "Referenz"

Die cycle-Funktionen: das war wohl mein erster Perl-Code seit 15 Jahren. Er könnte besser sein, aber wer fixt schon gerne funktionierenden alten Code, wenn es immer neues zu erstellen gibt?  :)


sub light_cycle_wandlampe_up {
    my $status = ReadingsVal("state_light_wz", "state", "off");
    if ($status eq "off") {
fhem "set state_light_wz scene 10";
    } elsif ($status eq "10") {
fhem "set state_light_wz scene 30";
    } elsif ($status eq "30") {
fhem "set state_light_wz scene 50";
    } elsif ($status eq "50") {
fhem "set state_light_wz scene 70";
    } elsif ($status eq "70") {
fhem "set state_light_wz scene 90";
    } elsif ($status eq "90") {
fhem "set state_light_wz scene on";
    } elsif ($status eq "on") {
fhem "set state_light_wz scene extra";
    }
}
sub light_cycle_wandlampe_down {
    my $status = ReadingsVal("state_light_wz", "state", "off");
    if ($status eq "extra") {
        fhem "set state_light_wz scene on";
    } elsif ($status eq "on") {
fhem "set state_light_wz scene 90";
    } elsif ($status eq "90") {
fhem "set state_light_wz scene 70";
    } elsif ($status eq "70") {
fhem "set state_light_wz scene 50";
    } elsif ($status eq "50") {
fhem "set state_light_wz scene 30";
    } elsif ($status eq "30") {
fhem "set state_light_wz scene 10";
    } elsif ($status eq "10") {
fhem "set state_light_wz scene off";
    }
}


Kleine Korrektur zu meinem früheren Post: Stufe 10 wird nur über Alexa "romantisch" angesprochen, und hat schlicht einen hohen Rot-Anteil.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Mpomp am 12 Januar 2018, 06:17:49
Danke für die schnelle Antwort und das bereitstellen der Funktionen.

Zitatdamit wird die Verbindung resp. der Skill offen gehalten

Das meine ich mit Referenz, das die Verbindung solange offen gehalten bleibt bis etwas anderes als "heller" bzw. "dunkler" der Alexa gesagt wird.
Habe ich das richtig interpretiert?

Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Catinor am 12 Januar 2018, 08:17:12
Genau. Verbindung und geöffneter Custom Skill bleiben aktiv, das Licht am Echo auch. Nach ca.10 Sekunden erfolgt dann ein Timeout und Alexa geht wieder schlafen.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: pole23 am 22 Februar 2018, 10:11:20
Hallo, ich habe heute meiner Alexa auch beigebracht, mir einen Kaffee zu machen. :-)

Dabei ist mir folgendes aufgefallen.
Meine Befehle:
...bereite mit zwei kaffee zu

Dabei wird automatisch die Stärke "strong" ausgewählt, da das hier so der Standard bei mir ist. Aber ich wollte auch die Möglichkeit haben, die Stärke anzupassen.
Befehl:
...bereite mit zwei mittlere kaffee zu

Daher sie mein fhemIntents wie folgt aus:
{alexa_coffee($num,$strength)}=bereite mir {num:AMAZON.NUMBER} {strength:schwache;mittlere;starke;extrastarke} Kaffee zu|bereite mir {num:AMAZON.NUMBER} Kaffee zu
Wenn ich das so übernehme und es hochlade, erhalte ich folgende Fehlermeldung:
Error: There was a problem with your request: Slot name "{num:AMAZON.NUMBER}" is used in a sample utterance but not defined in the intent schema.

Das Problem dabei ist, das die Sample Utterances wie folgt angelegt werden:
FHEMperlCodeIntentC bereite mir {FHEMperlCodeIntentC_num} {FHEMperlCodeIntentC_strength} Kaffee zu
FHEMperlCodeIntentC bereite mir {num:AMAZON.NUMBER} Kaffee zu

Ich habe es dann wie folgt umgebaut und jetzt klappt es ohne Fehler.
FHEMperlCodeIntentC bereite mir {FHEMperlCodeIntentC_num} {FHEMperlCodeIntentC_strength} Kaffee zu
FHEMperlCodeIntentC bereite mir {FHEMperlCodeIntentC_num} Kaffee zu


Mache ich dabei beim fhemIntent etwas falsch?
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: cejot am 23 April 2018, 21:45:18
Hallo zusammen,

ich habe Probleme mit der Einrichtung des CustomSkills. Zunächst ist es nicht mehr so einfach (glaub ich) die Intents, Typs, etc im AWS (https://developer.amazon.com/alexa/) zu hinterlegen.
Dafür kann man ein Json File scheinbar hochladen? Nun habe ich probiert mit get Alexa interactionModel mir das Model geben zu lassen und daraus das JSON zu bauen und dieses direkt komplett da reinzuhämmern.
Aber Amazon meldet verschiedene Fehler: Erstens: Es darf keine Intents ohne Namen geben. Habe also alles was da bspw heißt: "intent" : "prozentIntent" in "name": "prozentIntent" geändert. Glaub das war richtig?
Wenn ich aber jetzt versuche zu speichern erzählt Amazon mir, dass ich keine leeren Diaglos Intens benutzen dürfte? Hab aber gar kein Dialog drin. Kann mir jemand sagen wie ich die Konfiguration sauber rein bekomme? Und / oder ob es ne Möglichkeit gibt zur alten Skill Konfigurationsansicht zurück zu kehren?

Danke und viele Grüße
Christoph
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Otto am 19 Mai 2018, 16:59:31
Hi Christoph,

hast du es hin bekommen?

Amazon hat die Oberfläche ja komplett geändert und ich finde keine aktuelle Anleitung.

Habe auch Probleme mit den Intents
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: cejot am 21 Mai 2018, 20:09:25
Hallo Otto,

leider nicht :( Mit dem Hilfeschrei hier hatte ich erstmal aufgegeben. Dachte eigentlich es gäbe hier den ein oder anderen, der es hinbekommen hat.
Eine aktuelle Anleitung habe ich auch nicht gefunden und hatte daher einfach nach meinem mangelnden Verständnis probiert.

Vielleicht kann uns ja auch jemand mit einem Blick in die aktuelle Konfiguration helfen (also alte Konfig in neuer Gui), denn die sollte sich ja für alle geändert haben.

Viele Grüße
Christoph
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: bugster_de am 22 Mai 2018, 08:22:50
Hi,

mein CustomSkill spielt nun Musik.

Anwendungsfall
- ich habe in ziemlich jedem Zimmer einen Musikplayer. Die meisten davon sind Squeezebox-Player aber nun kamen auch noch zwei SONOS dazu
- ich habe eine ziemlich große Musiksammlung die lokal auf dem Server liegt. Dort sind auch die Hörspiele für mein Töchterchen abgelegt. Und genau um die ging es, da, die verschiedenen Online Musik-Dienste zwar viel Musik haben, aber quasi keine Hörspiele. Und nur weil ich das ganze per Sprache steuern will, sehe ich eigentlich nicht ein, dass ich die ganzen Hörspiele bei Audible.com nochmal kaufe
- die SONOS1 mit integrierter Alexa hat, ich nenne es mal "Verbesserungspotential". Das Kommando "Alexa, stop" geht bei der Kiste z.B. nicht

In Summe hat das dazu geführt, dass der WAF vorallem bei meiner Tochter in den Minus Bereich gerutscht ist.

Ich habe mir nun einen Customskill angelegt, der diese Lücken schliesst. Im Skill selbst habe ich verschiedene Utterances und Slot definiert, die Künstler, Album Raum und Kommando rausfischen können. Diese werden dann an eine Perl Routine übergeben.
Wenn man Musik hören möchte, macht diese Routine folgendes:
Falls der Nutzer Wunsch ein Kommando ist ("nächstes Lied", "halt" wird dieser am Player ausgeführt. Dadurch habe ich jetzt auch die fehlenden Funktionen des SONOS mit Alexa umschifft.

Aktuell nutze ich am alexa Device nur das Attribut fhemIntents. Alles andere wie Slots, utterances etc. definiere ich im Skill auf Amazon Seite. Ich habe das so verstanden, dass diese alexa Device Attribute nur dazu genutzt werden, die Intents und Slots ausgeben zu können, so dass man die dann per Copy / Paste im Skill Setup einbringen kann. Da Amazon aber eh das JSON Format geändert hat, geht das eh nicht mehr ohne Nacharbeit auf Amazon Seite und ich finde es schneller, es gleich im Amazon auf dem neuen Format umzusetzen. Oder habe ich das falsch verstanden?

Ansonsten viel mir auf, dass die verschiedenen Player in FHEM für eigentliche Standard-Aufgaben wie abspielen einer Playlist verschiedene set Kommandos haben. Das macht so eine Umsetzung schwerer, da man pro Player Type unterscheiden muß. Es gab doch mal eine generelle definition, wie die Interfaces von Multimedia Geräten zu machen sind? siehe hier: https://wiki.fhem.de/wiki/DevelopmentGuidelinesAV (https://wiki.fhem.de/wiki/DevelopmentGuidelinesAV). Gerade das SONOS Modul shcert sich da mal überhaupt nicht drum (passt ja zum Rest des Sonos Portfolios, die das Rad eigentlich fast überall neu erfinden müssen und dann dabei mit Verbesserungspotential umsetzen). Hat nichts mit CustomSkills zu tun.



Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: TomLee am 22 Mai 2018, 11:28:20
Das Kommando "Alexa, stop" geht bei der Kiste z.B. nicht

Kleine Bemerkung dazu. "stop" geht auch mit dem Sonos-Skill nicht, aber mit "Alexa, <playername> pause"
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: Thyraz am 22 Mai 2018, 11:55:16
Nutze zum Musik hören Amazon Music Unlimited und TuneIn auf dem Sonos ONE.
Damit geht "Alexa Stop" zumindest.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: TomLee am 22 Mai 2018, 13:05:08
ZitatNutze zum Musik hören Amazon Music Unlimited und TuneIn auf dem Sonos ONE.
Damit geht "Alexa Stop" zumindest.

Cool, gerade getestet mit einem Dot und einer Play3, das geht jetzt wirklich.
Anfangs ging das nicht.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: stefanru am 22 Mai 2018, 21:11:40
Hi,

so Alexa <-> Plex läuft bei mir sehr zufriedenstellend.
Ist sicher nicht ausgereift und schon ein erster Hack, wen es interessiert hier die Details zum Nachbauen:
https://forum.fhem.de/index.php/topic,88038.msg804627.html#msg804627

Gruß,
Stefan
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: bugster_de am 22 Mai 2018, 23:50:48
Zitatauf dem Sonos ONE. Damit geht "Alexa Stop" zumindest.
Ja mit einem Echo Dot und einem SONOS:One geht das. der Echo Dot macht den SONOS sogar leiser, wenn man "Alexa, " sagt.
Nur mit einem SONOS:ONE mit eingebautem Echo geht das alles nicht. Tippt das mal bei Google ein. Da gibt es genügend Hineise dazu. Das gin wohl mal, aber dann SONOS eine neue Firmware eingespielt....
ZitatKleine Bemerkung dazu. "stop" geht auch mit dem Sonos-Skill nicht, aber mit "Alexa, <playername> pause"
das probiere ich gleich mal.
Würde mich aber wundern wenn es geht, denn durch das dauernde rumprobieren taucht das Echo-Device im SONOS jetzt mehrfach in der Alexa-App auf und man kann es nicht löschen. Löschen kann das wohl nur der Amazon US support (laut Internetz).
Das SONOS:ONE mit Alexa war wohl eher eine Fehlanschaffung. Ein SONOS und ein getrennter Echo Dot kosten weniger und funktionieren besser :-)
Ist aber alles off-topic hier
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: bugster_de am 22 Mai 2018, 23:54:30
ich bin gerade voll im Custom Skill Fieber. Das macht voll Spaß !

Deshalb Frage: wie kann ich denn auf FHEM Seiten auf Amazon Built-In Intents reagieren? Da gibt es ein paar ganz nette Built-In Intents, die ich gerne nutzen will aber wie kriege ich die an FHEM ran? Auch würde ich gerne den CancelIntent überschreiben. Das Codewort Stop soll erstmal alle Player stoppen, den den FHEM Skill zu stoppen macht ja wenig Sinn, da wir eh nur Befehl->Ausführung->Ende haben und keine langen Dialoge.
Titel: Antw:[alexa-fhem | Custom Skills] Eure Setups
Beitrag von: stefanru am 23 Mai 2018, 10:11:07
Hi bugster, das ist im server.js von Alexa.