[alexa-fhem | Custom Skills] Eure Setups

Begonnen von prodigy7, 28 Januar 2017, 13:59:09

Vorheriges Thema - Nächstes Thema

Cobra

#75
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
RaspberryPI 3 mit Raspbian Jessie, HMLAN/HM-LAN-Gateway
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki, Alexa

Marlen

Wie schaut das dann in deinem fhemIntents aus?

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

LG
  Marlen

Cobra

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
RaspberryPI 3 mit Raspbian Jessie, HMLAN/HM-LAN-Gateway
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki, Alexa

Marlen

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!

Amenophis86

was hast du denn im Skill für den Intent angegeben?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Cobra

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
RaspberryPI 3 mit Raspbian Jessie, HMLAN/HM-LAN-Gateway
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki, Alexa

Marlen

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"
    }
  ]
}

Cobra

Am einfachsten ist, wenn du nach der Erstellung der fhemIntents nochmal alles wesentliche bei Alexa im Skill auf der Developer-Seite neu reinkopierst.
RaspberryPI 3 mit Raspbian Jessie, HMLAN/HM-LAN-Gateway
Diverse HM-Komponenten, Netatmo, Hue, Sonos, Nuki, Alexa

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Marlen

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!?

Amenophis86

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}
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Amenophis86

Soll das heißen die Sample Utterances im Skill sind nicht relevant? Dachte dort werden die verschiedenen Sätze abgebildet, wie von mir hier gepostet? Werden die Sätze etwa alle im Attr fhemIntents angegeben?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Amenophis86

Kann dir leider nicht ganz folgen, kannst du mal ein Beispiel machen? Sry, bin da einfach noch net ganz dahinter gekommen.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...