SNIPS: Sprachsteuerung (mittlerweile auch per Textcommands) über snips.ai

Begonnen von Thyraz, 21 Juli 2018, 20:28:48

Vorheriges Thema - Nächstes Thema

Maista

Hallo zusammen,

was mich aber trotzdem interessieren würde,
warum das mit einem Array funktioniert?!
Bin nicht der Experte aber im Original-Code wird der Wert aus fhemweb
in die Variable mit $type = @_; übergeben.
In der Variable steht aber nur eine "1" drin?!
$type in Klammer setzen hat auch nichts gebracht.

Werden z.B. drei Werte übergeben und an drei unterschiedlichen Variablen übergeben funktioniert das.

{snipsCalc(1,"plus",2)}

Zumindest mit
# Snips Calculation Intent
sub snipsCalc($$$) {
# Übergebene Parameter in Variablen speichern
my ($val1, $operator, $val2) = @_;

# Standardantwort festlegen
my $response = "Dafür muss ich nochmal in die Nachhilfe";

if ($operator eq "plus") {
  # Antwort überschreiben mit dem Ergebnis
  $response = "Das Ergebnis ist " . ($val1 + $val2);
}

# Antwort an das Snipsmodul übergeben
return $response;
}


Über Aufklärung wäre ich sehr dankbar  ;D

Sonnige Grüße

Gerd

Maista

#61
Hat mir keine Ruhe gelassen.
In diversen Modulen geschaut.
Dachte ich hatte das ausprobiert, aber scheinbar doch nicht.

Mit ($type) = @_;

funktioniert es!

Also (gezeigter Code fragt so natürlich keine Readings von FHEM ab)

# Abfall Intent
sub snipsAbfall($) {
    # Übergebene Parameter in Array speichern , Variable klappt nicht
    my ($type) = @_; # debug
  Log 1,"SNIPS0 Variable $type"; # debug
    # Standardantwort festlegen
    my $response = "Das kann ich leider nicht beantworten";
  Log 1,"SNIPS1 $type"; # debug

    if ($type eq "Restmuell")
    {
        # Wert aus Reading lesen
        #my $days = ReadingsVal("Abfall","USBAbfuhrGrau-Restmuell_days", undef);
        my $days = "12"; # debug
        # Antwort überschreiben mit dem Ergebnis
        $response = "Der Restmuell wird in $days abgeholt";
  Log 1,"SNIPS2 $type $days"; # debug
    }
    elsif ($type eq "Altpapier") {
        # Wert aus Reading lesen
        #my $days = ReadingsVal("Abfall","USBAbfuhrBlau-Altpapier_days", undef);
        my $days = "11"; # debug
        # Antwort überschreiben mit dem Ergebnis
        $response = "Das Altpapier wird in $days abgeholt";
  Log 1,"SNIPS3 $type $days"; # debug
    }
   
    # Antwort an das Snipsmodul zurück geben
    return $response;
}


Was ist der Unterschied zwischen

($type) = @_;

und

$type = @_;


??

Gruss Gerd

Thyraz

Zitat von: Maista am 29 Juli 2018, 19:42:51

Was ist der Unterschied zwischen

($type) = @_;

und

$type = @_;


Das erste ist eine Zuweisung im Scalaren Kontext.
Ein Array (und das ist was eine Funktion eben übergeben bekommt, auch wenn es wie hier nur ein Element ist) liefert dabei die Anzahl der Elemente die es beinhaltet zurück.

Du kannst die Anzahl der Elemente in einem Array also immer durch Zuweisung an eine scalare Variable ($nameOfScalar) abfragen.

Das zweite Beispiel ist eine Zuweisung im List Kontext.
Lists sind eine kommagetrennte Liste von Werten die von der Syntax her in Klammern geschrieben werden.

Das kann zum Beispiel so aussehen:

my ($var1, $var2, $var3) = (1, 2, 3);


Im List Kontext liefert das Array nicht die Anzahl der Elemente, sondern eine List welche die Elemente beinhaltet.

Mit mehreren Werten sieht das evtl. auch logischer aus als mit einem Element. ;)

$type = @_[0] ist hier gefährlicher. Es greift direkt auf das erste Element im Array zu.
Wenn da kein Element drin ist knallt es. Würde ungetestet mal schätzen, dass das reicht um Fhem crashen zu lassen.

Mit dem List Assign wäre die Variable $type in dem Fall einfach undef.

Hoffe diese Ausführung hilft mehr, als dass sie verwirrt. ;)
[/code]
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Maista

#63
Hallo Thyraz

Ohje. Jetzt wo du es sagst.

Ich hatte das glaube ich auch schon probiert gehabt aber da hatten wohl noch die
Anführungszeichen  beim Aufruf gefehlt.

Ich habe zwar schon einige Programme im Geschäft für mich geschrieben aber meist nur sporadisch.
Aber wenn man das nicht immer macht verlässt einem die Macht  ;)

Das habe ich auch schon benutzt um die Anzahl von Prüflinge zu bekommen.
Aber nach dem ich ein Jahr nichts mehr gemacht habe ist das wissen verdunstet  :-\

Danke noch mal fürs auffrischen

Gruss Gerd

jowe

Ich habe Snips jetzt seit dem Wochenende im Wohnzimmer in Betrieb. Es funktioniert bisher das Ein-/Ausschalten von Lampen, Abfrage der Helligkeit und Abfrage der Temperaturen in den verschiedenen Räumen. Das ist schon mal super und sehr praktisch!

Allerdings hatte ich am Wochenende mehrfach das Problem, dass Snips während Gesprächen irrtümlicherweise das Wakeword erkannt hat und dann mit "Da ist etwas schief gelaufen" antwortet. Das führt bei den Familienmitgliedern und Gästen doch "etwas" zu Irritationen :). Hat sonst noch jemand dieses Problem? Ich vermute, ich muss da mal mit verschiedenen Wakewords experimentieren (ich habe es bisher bei "Hey Snips" belassen).

Was ich bisher noch nicht hinbekommen habe ist die SetNumeric Funktion bei meinen Lampen, sowohl bei Hue wie auch beim Homematic Dimmer.
GetNumeric funktioniert mit

GetNumeric=pct,type=Helligkeit

Aber wie müsste das SetNumeric bei Hue-Lampen aussehen? So funktioniert es jedenfalls nicht (abgeändertes Beispiel aus der git-Beschreibung):
SetNumeric=pct,cmd=pct,minVal=0,maxVal=100,step=25,map=percent

Ich verstehe aktuell auch nicht, wofür der erste Teil "SetNumeric=pct" genutzt wird. Folgende Variationen hatte ich noch ausprobiert und hatte keinen Erfolg:

SetNumeric=brightness,cmd=pct,minVal=0,maxVal=100,step=25,map=percent
SetNumeric=pct,cmd=pct,minVal=0,maxVal=100,step=25,map=percent,type=Helligkeit

Hat das jemand ans Laufen bekommen?

Thyraz

#65
Zitat von: jowe am 31 Juli 2018, 10:00:44
Allerdings hatte ich am Wochenende mehrfach das Problem, dass Snips während Gesprächen irrtümlicherweise das Wakeword erkannt hat und dann mit "Da ist etwas schief gelaufen" antwortet. Das führt bei den Familienmitgliedern und Gästen doch "etwas" zu Irritationen :).

Kann ich jetzt gar nicht nachvollziehen.  ;D
Hatte damit bisher noch gar keine Probleme, mal sehen wie sichbdas entwickelt.
Es gibt ja einen Parameter bei Snips den man einstellen kann, wie sensibel er auf das Hotword achtet.
Damit soll man false Positives reduzieren können, evtl. reagiert Snips dann etwas schlechter bei Hintergrundgeräuschen. Ist ein Wert von 0.0 bis 1.0. Standard liegt in der Mitte bei 0.5

Was hast du denn für ein Mikro?

Allgemein wäre es auch denkbar, die Hotword-Erkennung z.B. gegen SnowBoy oder Ähnliches auszutauschen, so modular wie Snips ist.

Zitat
Was ich bisher noch nicht hinbekommen habe ist die SetNumeric Funktion bei meinen Lampen, sowohl bei Hue wie auch beim Homematic Dimmer.
GetNumeric funktioniert mit

GetNumeric=pct,type=Helligkeit

Aber wie müsste das SetNumeric bei Hue-Lampen aussehen?
Also ich hab eine meiner Hue Lampen so laufen:

SetOnOff=pct,cmdOn=on,cmdOff=off
GetOnOff=pct,valueOff=0
GetNumeric=pct,type=Helligkeit
SetNumeric=pct,cmd=pct,step=10

Sag mal Bescheid ob das bei dir klappt.
Wenn ja, muss ich mal nach dem Urlaub testen warum es mit den zusätzlichen Optionen nicht geht.
Sind an sich hier zwar nicht nötig (0 bis 100 ist der Standard im Modul und die Umrechnung des Wertebereichs auf 0 bis 100 Prozent ändert ja auch nichts), sollte aber auch nicht stören.

Falls es damit auch nicht geht, wäre ein list von der Lampe interessant, sowie ein Log mit Verbose 5 im Snips Device, wenn du ,,Stelle <Lampenname> auf 50" sagst.

P.S.
Der erste Teil hinter SetNumeric ist das Reading mit dem das Modul den aktuellen Wert des Geräts zurücklegen kann. Das ist zum Beispiel wichtig, wenn du Snips sagst es soll eine Lampe 10% heller machen. Ohne den alten Wert zu kennen lässt sich der neue nicht berechnen.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

jowe

Hi Thyraz,
danke für die Tipps.
Weißt du wo ich die Empfindlichkeit einstellen kann? Ich habe auf die Schnelle nur beim Integrieren eines "personal hotword" die Möglichkeit gefunden. Ich nutze das PS3Eye als Mikro, versuche damit aber den gesamten Wohn-/Essbereich und Küche abzudecken. Evtl. ist es sinnvoller, zwei Satelliten mit jeweils einem Eye einzusetzen und das Level jeweils etwas zu senken.

mit SetNumeric=pct,cmd=pct,step=10 funktioniert jetzt bei mir. Wenn ich sage "Schalte Lampe auf 20" geht es, wenn ich aber sage "Schalte Lampe auf 20 Prozent" funktioniert es nicht. Ich vermute dass es hauptsächlich daran bei mir lag, dass die Tests fehlgeschlagen waren.
Und sobald ich map=percent oder maxVal/minVal hinten dran hänge funktioniert es garnicht mehr.

Eine letzte Frage noch: kann ich einem Device auch mehrere setNumeric zuweisen? Beim GetNumeric kann ich ja den type angeben, geht das beim Set auch? Ich würde gerne bei meinen HUE's auch die Farbtemperatur einstellen können, also z.B. "Mache Lampe wärmer" soll ct erhöhen. Aber wenn ich SetNumeric=ct,cmd=ct,step=100,type=Temperatur eingebe ändert sich trotzdem nur die Helligkeit.

So, danke für die ganze Hilfe und das Modul und jetzt wünsche ich Dir erstmal einen schönen Urlaub. Die wichtigsten Funktionen laufen ja jetzt, denke das Feintunig kann getrost warten. Ich finde es jetzt schon genial, was ich mit dem Modul machen kann. Und das bei eigentlich recht geringem Einrichtungsaufwand.

Gruß Jonas

Thyraz

Das mit der Sensibilität fürs Hotword ist hier beschrieben:
https://snips.gitbook.io/documentation/advanced-configuration/platform-configuration

Unter Wakeword -> Sensibility


Zu SetNumeric:
Bei mir geht es gar nicht wenn ich ,,Schalte" sage.
Das liegt daran, dass ich das in keinem Beispielsatz drin habe,
,,Schalte" aber bei sehr vielen Beispielsätzen von SetOnOff drin ist.
Snips tendiert bei mir bei einem ,,Schalte Deckenlampe auf 20" daher zu SetOnOff.
Kommt dann in Fhem zu einem Fehler weil der OnOff Value Slot nicht belegt ist.

Kommt einfach daher, dass ich das selbst so nicht sage und mi das daher als Beispiel so nicht eingefallen ist.
Ist das etwas, das du so normal verwenden würdest?
Für mich war Schalten eher ein Begriff für einen ,,digitalen" (ein/aus) Zustand.

Im SetNumeric Intent finden sich viele Beispiele mit ,,Stelle", ,,Dimme" usw. 
es sollte aber auch die einfache Variante mit ,,Deckenlampe auf 20" gehen.
Falls dir das mit ,,Stelle" einfacher über die Lippen kommt, teste ich mal ob ein paar Beispielsätze in die Richtung helfen und Snips da nicht mit SetNumeric/SetOnOff durcheinander kommt. ;)

Ob mit oder ohne Prozent macht bei mir keinen Unterschied, solange mal=percent nicht gesetzt ist.
Kannst du mal testen ob das bei dir evtl. auch eher am ,,Schalte" liegt?
Sprich, ob es dann auch mit Prozent geht?


Dann noch zwecks mehreren SetNumeric Intents in einem Device:
Das sollte an sich schon funktionieren, habe da nur noch eine Kleinigkeit vergessen.

Ich hatte den Slot für relative Änderungen zum aktuellen Wert (Slot ,,Change" mit rauf/runter/heller/dunkler/wärmer/kälter...) schon so aufgebaut, dass ich unterschiedliche Werte für rauf/heller/wärmer... übermittelt bekomme um das zu unterscheiden.
Allerdings ist das eben kein echter ,,Type"-Slot da ich hier ja auch eine Richtungsinformation habe mit wärmer oder kälter.

Ich werde also schauen müssen ob der Type Slot bei der Frage angegeben wurde,
und wenn nicht ihn im Fhem-Modul nachträglich setzen falls er aus dem Wert vom ,,Value" oder ,,Change" Slot ableitbar ist.

Hab das mal in meine Todo Liste aufgenommen, damit ich es nicht vergesse.

Was aber schon jetzt gehen sollte: Den Type Slot explizit zu nennen:
,,Stelle die Temperatur der Deckenlampe wärmer"
Werde als Synonym von Temperatur auch noch Farbtemperatur aufnehmen.

Was noch zu beachten ist:
Wenn ich mich recht erinnere gewinnt bei mehreren passenden Intents aktuell immer der erste in der Liste, es sei denn ein darauf folgender passt besser (Kein type beim ersten Intent, passender Type beim nächsten).

Ich würde den SetNumeric für Helligkeit also weiter oben platzieren als den für Temperatur.
Sonst ändert ein, ,,Deckenlampe auf 20" die Farbtempertur statt die Helligkeit. ;)



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

laberlaib

#68
[gelöscht da beim Abschicken beantwortet]

Wie schalte ich den am besten ein Radio?
Das wäre ja ein "SetArbitraryIntent":
"Spiele im Badezimmer [Room] auf dem Radio [Device] SWR3 [Value]."

Edith:
Ich möchte das nicht unbedingt mit einem Customintent lösen, da in dem Modul ja bereits ein schönes Raummatching implementiert ist.

Frage zum Raummatching: ich muss meine Satelliten dann so nennen, wie ich die snipsRoom-Attribute vergeben habe? Zumindest lese ich das so aus der 10_SNIPS.pm
193      $room = $data->{'siteId'};

Ich verstehe Perl nur ungefähr aber die Übergabe der Slots auf die CustomIntentfunktion geschieht ja irgendwie aus "data" heraus (vgl. Zeilen 393 ff). Und darin steckt auch die 'siteID'.
D.h. ich könnte mir auch eine eigene Raumerkennung basteln?
snipsIntents:
RadioIntent=snipsRadio(Sender,siteID)
und wenn nun die Annahme von oben zu Zeile 193 stimmt, dann einfach Fallunterscheidung und die jeweiligen Squeezeboxen schalten.

Oder was passiert denn, wenn ein Customintent mit fehlendem Slot aufgerufen wird?
Also z.B. lautet der Intent
RadioIntent=snipsRadio(Sender,Raum)
und ich rufe ihn auf mit
Zitat"Hey Snips! Schalte das Radio mal auf Bassdrive."
wobei Bassdrive als Senderslot bekannt ist und der Raumslot weggelassen wurde.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

jowe

Danke für den Link, hatte es irgendwie geschafft diese Seite in der Doku zu übersehen. Ich werde die nächsten Tage mal beobachten, ob sich an der fehlerhaften Hotword Erkennung dadurch etwas ändert.

Guter Einwand mit dem "schalte". Das ist in der Tat nicht wirklich logisch. Ich werde das heute Abend mal mit "stelle" ausprobieren. Ich denke da braucht es dann auch keine Beispielsätze mit "schalte", sonst wird die Erkennung von tatsächlichem Ein-/Ausschalten ja evtl. auch etwas ungenauer. Und vermutlich wird sich auf Dauer ohnehin keiner die Mühe machen, vollständige Sätze zu verwenden wenn es ausreichend ist, stattdessen "Lampe auf 20" zu sagen.

Das Einstellen der Lichttemperatur probiere ich dann heute Abend mal aus. Bin gespannt ob das klappt.

Und der Hinweis mit der Reihenfolge der Intents ist super, das hatte ich bisher nicht auf dem Schirm, klingt aber plausibel.

Ich werde mir dann als Nächstes die CustomIntents vornehmen und schauen wie weit ich damit komme.
Das Thema Musik abspielen ist bei mir wie bei laberlaib auch das nächste Top-Feature, ich möchte gerne auf meinen Squeezeboxen per Zuruf wenigstens das Abspielen starten/stoppen.
Das Steuern von Harmony Hub Szenen wäre dann längerfristig das Sahnehäubchen. Wenn das funktioniert, ist bei mir schonmal das Meiste meiner Geräte zu Hause per Snips bedienbar.
Aber ich muss ehrlich gestehen, je mehr man überlegt, desto mehr Ideen kommen. Lightscenes schalten wäre auch noch toll, Timer/Wecker setzen zu können, Verknüpfen mit Homemode bzw. Residents ("Hey Snips, gute Nacht" macht alle Geräte, Lichter etc. aus, schaltet "do-not-disturb" Modus an usw...).
Das Modul hat definitiv extrem viel Potenzial...

Thyraz

@laberlaib ja, Satelliten sollten heißen wie die snipsNames.

Du bringst mich da auf einen Punkt der problematisch wird wenn man die Snips Fhem-App nicht mehr Forken muss. Im Moment habt ihr durch das Forken alle den SlotType der in den Standard Intents als Room benutzt wird. Der heißt de.fhem.Room.

Wenn du nun einen neuen Intent erstellst, solltest du einen Slot von diesem Typ hinzufügen können.
Ohne das Forken wird der SlotType aber nicht mehr in deinem Account auftauchen. Einen eigenen mit eigenem Namen zu erstellen würde bedeuten, dass du die Räume von Hand pflegen musst, statt sie per Inject aus Fhem automatisch zu bekommen. Bei Räumen nicht so wild, aber wenn du in einem CustomIntent Devices nutzen willst wird es weit nerviger.

Wenn es soweit ist, werde ich mal testen ob es hilft wenn man gleichnamige SlotTypes in seiner CustomIntent App hat. Also auch de.fhem.Room, de.fhem.Device usw.
Da der Inject über diesen Identifier läuft, könnte das klappen.

Dann könnte ich sogar eine CustomApp Vorlage im Snips AppStore hochladen,
welche die Standard SlotTypes beinhaltet.

Zu deiner Frage zwecks siteId:
Das könnte sogar momentan klappen.
Die ganzen Einträge in data sind alle auf der gleichen Hierarchie-Ebene.
Also sowohl siteId, was der Name des aktuellen Satelliten ist (Aber Achtung: der Wert ist ,,default" beim Hauptdevice) als auch die einzelnen Slot Values.
Aber siteId ist eigentlich nicht für den Endnutzer gedacht gewesen.
Vorschlag: Ich ändere den CustomIntent so ab, dass er bei der Anwesenheit eines Slot namens ,,Room" auch prüft ob der Slotwert per Sprache übergeben wurde, ansonsten belegt er ihn mit dem Namen des Raums in dem der angesprochene Satellit steht.
Genau das macht die Perl-Funktion ,,roomName" bei den anderen Intents.

Dann könntet ihr bei euren Custom Intents einen Slot namens ,,Room" integrieren und dafür den SlotType de.fhem.Room wählen.
Der CustomIntent müsste dann so definiert sein:
RadioIntent=snipsRadio(Channel,Room)
Bei ,,Schalte um auf S.W.R.3" würde er den aktuellen Raum übergeben.
,,Schalte im Büro auf S.W.R.3 um" kann hingegen auch vom Wohnzimmer ausgeführt werden.

Ein Slot mit dem Namen ,,Room" hätte hier also eine Sonderbehandlung,
was mich nicht komplett glücklich macht, aber dass alle Endnutzer in allen CustomIntents die selbe Fallunterscheidung zwischen Room und siteId machen müssen klingt nach einer doofen Alternative. ;)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

#71
Zum Thema Multimedia Intent:

Ja, das ist etwas das ich auch brauche und wäre sicher ein guter Standard Intent.
Bin mir nur nicht sicher ob das wirklich funktioniert?

Die Sendernamen heißen ja in den Geräten nicht so wie man sie sprechen will.
Oder man muss evtl. Sendernummern statt Sendernamen übergeben.

Wenn man Pech hat sogar in jedem Raum auf eine andere Weise, da man unterschiedliche Player hat.
Weiß nicht so recht ob sich das mit einem generischen Mapping abdecken lässt, oder ob eine eigene Perl-Funktion in der ich solche Fallunterscheidungen machen kann nicht der bessere Weg ist.

Edit für Harmony Hub:
Hier müsste man (wenn man sich Dummies sparen will) ja pro Intent ein snipsName vergeben können,
anstatt nur einen pro Fhem Device
Homebridge unterstützt sowas ja zum Beispiel.
Müsste dann etwa so aussehen:

GetOnOff=activity,valueOn=radio,name=Radio
SetOnOff=activity,cmdOn=activity radio,cmdOff=activity PowerOff,name=Radio
GetOnOff=activity,valueOn=fernsehen,name=Fernsehen
SetOnOff=activity,cmdOn=activity fernsehen,cmdOff=activity PowerOff,name=Fernsehen


Hab die Idee mal auf die Todo Liste gepackt.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

laberlaib

Zitat von: Thyraz am 01 August 2018, 20:45:38
Also sowohl siteId, was der Name des aktuellen Satelliten ist (Aber Achtung: der Wert ist ,,default" beim Hauptdevice) als auch die einzelnen Slot Values.
Aber siteId ist eigentlich nicht für den Endnutzer gedacht gewesen.
Vorschlag: Ich ändere den CustomIntent so ab, dass er bei der Anwesenheit eines Slot namens ,,Room" auch prüft ob der Slotwert per Sprache übergeben wurde, ansonsten belegt er ihn mit dem Namen des Raums in dem der angesprochene Satellit steht.
Genau das macht die Perl-Funktion ,,roomName" bei den anderen Intents.
Den Raum über die siteID zu bestimmen macht auch keinen wirklichen Sinn da ich dann aus dem Bad das Büro gar nicht mehr beschallen kann, weil ich ja im Bad bin.
D.h. ich müsste, auch wenn ein Intent mit einem leeren Slot richtig gestartet werden würde (wird er das? siehe oben?), immer auch die siteID übergeben und uzr Flalunterscheidung nutzen. Richtig kann man das eigentlich nur vor dem Aufruf der eigenen Funktion machen. Auch wenn es dann zu

Zitat von: Thyraz am 01 August 2018, 20:45:38
Ein Slot mit dem Namen ,,Room" hätte hier also eine Sonderbehandlung,
was mich nicht komplett glücklich macht, aber dass alle Endnutzer in allen CustomIntents die selbe Fallunterscheidung zwischen Room und siteId machen müssen klingt nach einer doofen Alternative. ;)
kommt.

Zitat von: Thyraz
Die Sendernamen heißen ja in den Geräten nicht so wie man sie sprechen will.
Das kann man doch über Synonyme direkt in Snips lösen? Ich muss das eh mal mit einem ausländischen, spanischen, Assistenten versuchen: Rollladen als Slotvalue und "persiana" und gucken, ob snips das blickt.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

der-Lolo

Die SiteID des Satelliten benutzen nur wenn keine SiteID im befehl vorhanden ist wäre eine lösung, oder? Bzgl. der ansteuerung anderer Module gibt es sicher auch die möglichkeit die Maintainer Kollegen zu fragen ob sie nicht einen Slot für Snips in Ihren Modulen bereitstellen können. Schade das justme im Urlaub ist, er wäre sicher gerne behilflich.
Schaut euch bitte auch im Wiki die DevelopmentGuidelindesAV an...

https://wiki.fhem.de/wiki/DevelopmentGuidelinesAV

laberlaib

Zitat von: der-Lolo am 02 August 2018, 11:19:35
Die SiteID des Satelliten benutzen nur wenn keine SiteID im befehl vorhanden ist wäre eine lösung, oder?[/url]
Das was Du vorschlägst macht das Modul für dessen Intents wo es auch die Bedeutung der einzelnen Slots kennt (Room ist der Raum) aber nicht für eigene.

Das Modul kennt alle Werte aus dem Json, welches Snips generiert. D.h. Slot-Value Paare und auch ein Paar SiteID-"siteID".
Beim Aufruf eines eigenen Intents wird einfach eine eigene Perlfunktion aufgerufen und an diese die definierten Slots bzw. Werte übergeben.
D.h. jegliche Intelligenz für Quervergleiche und "Wenn-Vorhanden-dann-dies-oder-das" muss bereits in das Modul und kann nicht erst in der Funktion erfolgen.
Außer man übergibt dieser erstmal alles und wertet dann aus:
RadioIntent=snipsRadio(Sender,Raum,siteID)
Allerdings - und dafür reicht mein Perl nicht aus - weiß ich nicht, wie das Modul bei der Zuweisung Slots=>Funktionsaufruf (Modul Zeile 393ff) mit einem leeren Slot umgeht. Dies wäre ja der Fall, wenn ich keinen Raum bezeichne.

Bei der eigenen Funktion müsste man dann zunächst die Reihenfolge der Parameter geschickt wählen (die nicht-verpflichtende Angabe immer hinten, also (Sender, siteID, Raum)), dann die Länge der Übergabe prüfen und dann Fallunterscheidung.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)