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

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

Vorheriges Thema - Nächstes Thema

Thyraz

Was gibt es denn in FHEM bisher für TextToSpeech Lösungen?
Nur das hier: https://fhem.de/commandref_DE.html#Text2Speech ?

Kann ich mir irgendwann mal anschauen ob das nicht recht einfach umsetzbar wäre.

Dann könnte man Snips einfach das Endsession Kommando ohne Text schicken und dafür dem TTS Modul den Text.
Das Problem ist halt, dass Snips ja auch eigene Sounds abspielt (Hotword erkannt, Erkennung fehlgeschlagen, ...).

Die würden dann eben untergehen, was durchaus zu Verwirrung führen kann.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

kud

Naja. Das das "Mikrofon" sagt, dass es was nicht verstanden hat ist doch ok.

Oder man macht erst gar keinen Lautsprecher an den Snips-Pi dran ;-)

Thyraz

Ah ok, du wolltest dennoch einen Lautsprecher dran machen.
Ich dachte den lässt du weg.

Mit Verwirrung meinte ich, dass diese Sounds dann eben nicht zu hören sind.
Und die einzuhaltende Pause zwischen "Hey Snips" und dem Text den man sagen will ist eben genau die Länge des Sounds. ;)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

mark79

#33
@kud man kann den Sound übers Netzwerk weiterleiten, mit Pulseaudio:
https://wiki.ubuntuusers.de/PulseAudio/
https://wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network
https://snips.gitbook.io/documentation/ressources/sound-setup-linux
Aber selbst habe ich das noch nicht ausprobiert.

Zitat von: Thyraz am 26 Juli 2018, 11:06:05
Ich hab die kurzen Sätze mittlerweile rausgeschmissen, nachdem ich das gemerkt habe.
Aber durch das Forken kommen die Änderungen halt nicht bei dir an.
Du müsstest an sich deine Devices (und evtl. Räume falls du die verändert hast) exportieren,
dann geforkte App und geforkte Intents aus deinem Account löschen (nicht nur aus dem Assistenten).
Da merkt man mal wieder wie bescheiden die aktuelle Lösung mit dem forken ist. ;)
Alles klar, danke für die Erklärung! Dann werde ich das am besten neu forken und vorher meine Sachen exportieren und umschreiben. :)

Zitat von: Thyraz am 26 Juli 2018, 11:06:05
Nein, verschiedene Werte der Slots sind egal.
Es geht eher um Beispiele wie:
- Mache die Deckenlampe im Wohnzimmer aus
- Schalte die Deckenlampe im Wohnzimmer aus

Ich hatte natürlich beides eingetragen.  ;D

Zitat von: Thyraz am 26 Juli 2018, 11:06:05
Vor lauter Programmieren am Modul hab ich noch nichtmal meine Geräte alle in Snips eingebunden. ;D

Aber das wäre ja auch eine hervorragende Übung für einen Custom Intent. ;)
Hey Snips, stelle einen Timer auf 6 Minuten
In der Perl Funktion ein AT oder Internal Timer starten und beim Zeitende ein Snip say Timer fertig ausführen. :)

edit: Wobei Timer stellen ja auch irgendwie eine Grundfunktionalität der meisten Assistenten ist.
Evtl. sollte ich das auch mal als Standard-Intent mit ins Modul aufnehmen.
Ja neue Geräte kommen schon mit der Zeit dort rein. Ich habe auch erst gerade mal 5-6 Stück drin.
Macht auch bisher noch wenig sinn, weil ich bisher nur ein snips Gerät habe und der steht dazu noch im Flur.
Wie viele snips Geräte hast du eigentlich? :)

Das mit Timer mal schauen, ob ich das am WE hinkriege. Erstmal wollte ich den Abfallkalender einbinden.
Dann wird mir das bestimmt auch klarer, wie man solche Sachen wie den Timer umsetzt.

Hast du eigentlich schon mal darüber nachgedacht wie man die Lautstärke per Fhem ändern könnte? Also das Nachts die Lautstärke runtergefahren wird und Tagsüber erhöht wird?
Per Snips/mqtt geht das wohl anscheinend noch nicht, ich habe jedenfalls in der Doku und Github nichts gefunden.
Aber man könnte es per Crontab umsetzen, mit dem Befehl geht das bei mir:  amixer -c1 sset 'PCM' 80%
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Thyraz

#34
Zitat von: mark79 am 26 Juli 2018, 16:58:50
Wie viele snips Geräte hast du eigentlich? :)
Bisher auch nur das eine Device.
Aber ein Pi, ein weiteres PS3 Eye und Lautsprecher stehen schon im Büro und warten darauf irgendwann als erster Satellit installiert zu werden. ;)

Zitat von: mark79 am 26 Juli 2018, 16:58:50
Das mit Timer mal schauen, ob ich das am WE hinkriege. Erstmal wollte ich den Abfallkalender einbinden.
Dann wird mir das bestimmt auch klarer, wie man solche Sachen wie den Timer umsetzt.

Ja, wenn du das einmal gemacht hast ist das mit Sicherheit kein Hexenwerk mehr.
Der Ablauf ist ja immer der selbe. Du brauchst:
- einen Intent in deinem Snips Assistent der beim Sprechen eines Texts eben Intent-Name + Slot-Werte ins MQTT schiebt
- in FHEM eine Zeile im snipsIntents Attribut, welches diesem Intent-Namen eine Perlfunktion zuweist
- Eine Perl Funktion in deiner 99_myUtils.pm welche die Slot-Werte als Parameter übergeben bekommt

In der Funktion kannst du dann machen was du willst.
Du kannst anhand der Parameter Geräte schalten, Readings abfragen, Readings setzen, Timer starten, Werte berechnen, ...
Am Ende kannst du dann noch einen Text als Rückgabewert zurückliefern, welchen Snips dann als TTS ausgibt.
Dies kann ein einfaches "Ok" sein, falls der Intent nur Sachen schaltet und eine Bestätigung reicht.
Es kann aber auch ein ganzer Satz sein, welcher berechnete Werte oder was auch immer enthält.

Zitat von: mark79 am 26 Juli 2018, 16:58:50
Hast du eigentlich schon mal darüber nachgedacht wie man die Lautstärke per Fhem ändern könnte? Also das Nachts die Lautstärke runtergefahren wird und Tagsüber erhöht wird?

Ja, da mich das auch nervt, dass das bisher nicht geht. ;)
Der aktuelle Plan: Ein Python Script schreiben (Ähnlich snips-tts-polly), welches auf volume topics im MQTT lauscht und daraufhin mit dem AlsaMixer die Lautstärke verändert.
Dann könnte man das bequem bei einem "set Snips volume 50" volume Nachrichten über MQTT publishen und ich bräuchte keinen weiteren Kommunikationskanal neben MQTT zum Snips Rechner.


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

Neues kleines Update auf Github:

Das Abfragen von numerischen Werten ohne die Nennung eines bestimmten Device-Namens ist nun möglich.
Snips sucht dann über den Raum und den Type nach einem passenden Gerät.

Dafür muss der type im snipsMapping gesetzt sein.

Beispiel snipsMapping eines Thermometers:

GetNumeric=temperature,type=Temperatur


Beispielfrage an Snips:
Wie ist die Temperatur im Wohnzimmer
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

kud

Jetzt machst Du aber vor Deinem Urlaub Dampf. TOP und Daumen hoch :)

mark79

#37
Zitat von: Thyraz am 26 Juli 2018, 17:17:52
Bisher auch nur das eine Device.
Aber ein Pi, ein weiteres PS3 Eye und Lautsprecher stehen schon im Büro und warten darauf irgendwann als erster Satellit installiert zu werden. ;)
Ich erwarte auch noch ein Orange Pi, am besten ich bestell mir schon mal ein Mikro, bevor die alle weg sind oder die im Preis steigen. :D

Zitat von: Thyraz am 26 Juli 2018, 17:17:52
Ja, wenn du das einmal gemacht hast ist das mit Sicherheit kein Hexenwerk mehr.
Der Ablauf ist ja immer der selbe. Du brauchst:
- einen Intent in deinem Snips Assistent der beim Sprechen eines Texts eben Intent-Name + Slot-Werte ins MQTT schiebt
- in FHEM eine Zeile im snipsIntents Attribut, welches diesem Intent-Namen eine Perlfunktion zuweist
- Eine Perl Funktion in deiner 99_myUtils.pm welche die Slot-Werte als Parameter übergeben bekommt

In der Funktion kannst du dann machen was du willst.
Du kannst anhand der Parameter Geräte schalten, Readings abfragen, Readings setzen, Timer starten, Werte berechnen, ...
Am Ende kannst du dann noch einen Text als Rückgabewert zurückliefern, welchen Snips dann als TTS ausgibt.
Dies kann ein einfaches "Ok" sein, falls der Intent nur Sachen schaltet und eine Bestätigung reicht.
Es kann aber auch ein ganzer Satz sein, welcher berechnete Werte oder was auch immer enthält.

Für dich ist das sicherlich leicht. :) Ich kann leider kein Perl und in die 99_myUtils.pm,
habe ich bisher kaum was selber rein geschrieben, sondern nur Sachen rein kopiert und dann ergänzt. :D
Jedoch deine Beispiele helfen schon enorm... und ich muss mal anfangen, das zu lernen.

Du hast schon ein Bespiel im Git und ich habe mal versucht (vorher gegoogelt) es zu erweitern. Aber Fhem wirft mir einen Fehler aus:

# Abfall Intent
sub snipsAbfall($) {
    # Übergebene Parameter in Variablen speichern
    my $type = @_;

    # Standardantwort festlegen
    my $response = "Das kann ich leider nicht beantworten";

    if ($type eq "Restmuell") {
        # Wert aus Reading lesen
        my $days = ReadingsVal("MyAbfallDevice","Restmuell_days, undef);
        # Antwort überschreiben mit dem Ergebnis
        $response = "Der Restmuell wird in $days abgeholt";
    }
    elsif ($type eq "Altpapier") {
# Wert aus Reading lesen
        my $days = ReadingsVal("MyAbfallDevice","Altpapier_days, undef);
        # Antwort überschreiben mit dem Ergebnis
        $response = "Das Altpapier wird in $days abgeholt";
    }
   
    # Antwort an das Snipsmodul zurück geben
    return $response;
}


ERROR:

syntax error at ./FHEM/99_myUtils.pm line 37, near "$response = "Der Restmuell " Global symbol "$days" requires explicit package name (did you forget to declare "my $days"?) at ./FHEM/99_myUtils.pm line 37. Global symbol "$days" requires explicit package name (did you forget to declare "my $days"?) at ./FHEM/99_myUtils.pm line 39. BEGIN not safe after errors--compilation aborted at ./FHEM/99_myUtils.pm line 210.


Wenn ich dein Original Code nehme, kommt der Fehler nicht.
Ich habe gedacht, nimmst du das hier noch mit rein:
my $days = @_;

Dann kommt das hier:
syntax error at ./FHEM/99_myUtils.pm line 38, near "$response = "Der Restmuell " BEGIN not safe after errors--compilation aborted at ./FHEM/99_myUtils.pm line 211.

Geht das überhaupt so oder muss ich den Code komplett für jede Tonne übernehmen und nur umschreiben, für Restmüll, Gelbe Tonne, Altpapier Tonne... Sorry, wie gesagt ich bin ein Perl bzw. Programmier noob. :D

Zitat von: Thyraz am 26 Juli 2018, 17:17:52
Ja, da mich das auch nervt, dass das bisher nicht geht. ;)
Der aktuelle Plan: Ein Python Script schreiben (Ähnlich snips-tts-polly), welches auf volume topics im MQTT lauscht und daraufhin mit dem AlsaMixer die Lautstärke verändert.
Dann könnte man das bequem bei einem "set Snips volume 50" volume Nachrichten über MQTT publishen und ich bräuchte keinen weiteren Kommunikationskanal neben MQTT zum Snips Rechner.
Ja so was wäre natürlich noch cooler! :)
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

mark79

Ich glaube ich es nun verstanden, so wie oben kann dies ja nicht gehen.

Ich bräuchte dazu mehrere Einträge in der 99_myUtils.pm, passend zu den snipsIntent wie:
snipsAbfall
snipsGelbeTonne
snipsAltPapier

Ich setzte das mal um und Freitag wirds getestet. :)
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Thyraz

#39
Oh, da hab ich dich auf die falsche Fährte geführt.
Da ist ein Anführungszeichen verschütt gegangen bei dem Beispielcode auf Github.

Bei ReadingsVal hat der String für den Readingsnamen am Ende kein Anführungszeichen.

Versuch es mal so:

# Abfall Intent
sub snipsAbfall($) {
    # Übergebene Parameter in Variablen speichern
    my ($type) = @_;

    # Standardantwort festlegen
    my $response = "Das kann ich leider nicht beantworten";

    if ($type eq "Restmuell") {
        # Wert aus Reading lesen
        my $days = ReadingsVal("MyAbfallDevice","Restmuell_days", undef);
        # Antwort überschreiben mit dem Ergebnis
        $response = "Der Restmuell wird in $days abgeholt";
    }
    elsif ($type eq "Altpapier") {
        # Wert aus Reading lesen
        my $days = ReadingsVal("MyAbfallDevice","Altpapier_days", undef);
        # Antwort überschreiben mit dem Ergebnis
        $response = "Das Altpapier wird in $days abgeholt";
    }
   
    # Antwort an das Snipsmodul zurück geben
    return $response;
}


Dadurch kam Perl wohl total durcheinander.
Sehe auf die Schnelle (ungetestet) sonst gerade keinen Fehler mehr.

Und an sich solltest du nur eine Perl-Funktion brauchen, solange du das in Snips auch nur in einen Intent rein hast (der dann für den Slot mehrere mögliche Wörter wie Restmüll/Altpapier,... hat).


edit:
Und ein bisschen Perl lernen schadet nie bei FHEM. ;)
Hatte bevor ich zu FHEM kam auch noch nie eine Zeile Perl gesehen.

Irgendwann wechselt man dann halt vermehrt in Notifies und DOIFs per geschwungenen Klammern auf die Perl-Ebene.
Dann kamen die ersten eigenen Funktionen die ich wegen Mehrfachverwendung in  die 99_myUtils ausgelagert habe.
Danach dann etwas komplexere Funktionen in Perl die anders nicht mehr zu realisieren waren.
Als letztes dann ein paar Änderungen an alten verwaisten Modulen über die ich mich in den Aufbau der FHEM-Module reingefuchst habe.
Und geendet hat es jetzt eben mit dem ersten eigenen Modul, nachdem es für Snips noch nichts gab, ich es aber unbedingt ausprobieren wollte. :)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

mark79

#40
Zitat von: Thyraz am 26 Juli 2018, 20:49:10
Oh, da hab ich dich auf die falsche Fährte geführt.
Da ist ein Anführungszeichen verschütt gegangen bei dem Beispielcode auf Github.

Bei ReadingsVal hat der String für den Readingsnamen am Ende kein Anführungszeichen.

Das ist mir nicht aufgefallen. Jedenfalls geht es jetzt, ohne Fehler, danke dir! :)

Ich habe in der Console eine CustomIntents APP erstellt, darin zwei Intents, einmal der Taschenrechner bzw. Calc und der Abfallkalender. Nur dort kommt das nächste Problem...

Und zwar scheint Snips die Training Examples nicht zuordnen zu können. Also man sieht das an der fehlenden Farbe und am record request. Dort stimmt die Antwort nicht:

{
  "input": "wann wird die blaue tonne geleert",
  "intent": {
    "intentName": "mark79:Abfallkalender",
    "probability": 1
  },
  "slots": []
}


Ich habe mal ein paar Screenshots von zwei Bespielen angelegt:
https://www.dropbox.com/sh/3ui8azkvnpoyhmu/AABugzNtHB7nJEq-63ZZ31wka?dl=0

Ich verstehe noch nicht wirklich, wo (in der Console) was hin muss. Stehe sozusagen wie ein Ochs vorm Berg, trotz des Calc Beispiels.  ???
Ich kann ja bestimmt die zwei Tonnen (Restmuell und graue Tonne) in ein Intent rein werfen? und wenn ja,
gehören die (Restmuell und graue Tonne) jeweils unter dem Slot Namen oder unter dem Type? Das habe ich noch nicht ganz verstanden...

Ich habe beides ausprobiert, aber das scheint er nicht nutzen zu wollen. Irgendwas scheint noch zu fehlen, oder falsch zu sein.

Zitat von: Thyraz am 26 Juli 2018, 20:49:10
edit:
Und ein bisschen Perl lernen schadet nie bei FHEM. ;)
Hatte bevor ich zu FHEM kam auch noch nie eine Zeile Perl gesehen.

Irgendwann wechselt man dann halt vermehrt in Notifies und DOIFs per geschwungenen Klammern auf die Perl-Ebene.
Dann kamen die ersten eigenen Funktionen die ich wegen Mehrfachverwendung in  die 99_myUtils ausgelagert habe.
Danach dann etwas komplexere Funktionen in Perl die anders nicht mehr zu realisieren waren.
Als letztes dann ein paar Änderungen an alten verwaisten Modulen über die ich mich in den Aufbau der FHEM-Module reingefuchst habe.
Und geendet hat es jetzt eben mit dem ersten eigenen Modul, nachdem es für Snips noch nichts gab, ich es aber unbedingt ausprobieren wollte. :)
Das scheinst du recht schnell gelernt zu haben! *daumenhoch* Hast du mit einem Perl Buch unterm Kopfkissen geschlafen?  ;)

Die fehlenden Perl Kenntnisse merkt man zwischendurch leider immer wieder, das frisst dann auch Zeit.
Notifys und DOIFs habe ich auch anfangs benutzt, mittlerweile lieber MSwitch, das ist einfacher und es sieht ordentlicher aus.
Aber ich werde mich damit mal mehr mit beschäftigen, am besten an kleinen beispielen... :)


Viele Grüße
Mark
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Thyraz

Du musst die Slots für die ersten paar Sätze händisch Zuordnen.
In den Beispielsätzen das entsprechende Wort mit der Maus markieren und dann kommt ein Popup.

Wahrscheinlich ist das alles was dir fehlt. 😉

Ist ein wenig versteckt, evtl. muss das auch noch in die Anleitung rein.
Wenn man dann auf Save drückt sollte es danach klappen.

Mein Calc Beispiel mit den importierten Beispielsätzen, importiert die Zuordnung gleich mit (ist in dem zu kopierenden Text in Klammern mit drin), daher geht es dort.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

mark79

#42
Ahhhh händisch zuweisen, ja so was erfährt man wohl, wenn man das Wiki ließt.  ::)  ;D

Jetzt geht es, noch mals vielen Dank!!! https://www.dropbox.com/s/wol87goo88roynx/Snips%20Console%20for%20Voice%20Assistants.png?dl=0

Ausprobieren ob es klappt, kann ich aber erst morgen. Ich gebe dann noch mal bescheid. :)
Rock64 4GB mit Debian Strech, FHEM im LXC, Sonoff Switches/Touch, HM Thermostate, HMUART/Zigbee2MQTT@MapleCUN, ESP RGBWW Wifi Controller, ESP8266 Door Sensor/Briefkastenwächter, BT CSL Stick, BT iTags, Alexa, FireTV, RPi2 mit Kodi, Xiaomi Vacuum v1/Smarthome Komponenten

Thyraz

Ja, tief in der von mir auf Github verlinkten Doku zum Erstellen eines neuen Intents ist es drin:
https://snips.gitbook.io/documentation/console/set-intents#create-a-new-intent

Aber das Dokument ist halt von Snips selbst und die verweisen da dann auf die Erstellung von Actions und die Möglichkeit einen Skill für Bares um Unmengen Beispielsätze erweitern zu lassen usw.
Das mag teilweise mehr verwirren als helfen. ;)

Denke wir sollten da irgendwann mal eine abgespeckte Form der Anleitung in der FHEM Doku haben.
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

Vielen Dank für das super Modul und für das "Finden" von Snips. Sowas habe ich mir schon sehr lange gewünscht und ich bin echt begeistert von den Möglichkeiten!

Ich lese schon seit mehreren Jahren im Forum mit, das Snips-Modul bringt mich aber jetzt dazu, meinen ersten Kommentar zu verfassen  :)
Heute Morgen habe ich meine ersten Lampen per Sprache geschaltet, für mich kommt eine Amazon/Google/Apple Lösung dafür zu Hause nicht in Frage. Deshalb nochmal Danke für diese super Lösung! In den nächsten Tagen werde ich mich dann mal in das Thema Erweiterung mittels myUtils einarbeiten.

Eine Idee für die evtl. etwas fernere Zukunft hätte ich noch:
Der NLU-Teil von Snips kann soweit ich in der NLU-Doku richtig verstanden habe auch eigenständig genutzt werden (und ist mittlerweile sogar Open-Source). Es gibt das Modul Babble, das natürliche Spracheingaben in Befehle für FHEM umwandelt.
Super wäre es, wenn man den ja ohnehin schon eingelernten Snips-NLU ebenfalls für z.B. Befehle per Telegram nutzen könnte. Da das Snips-TTS ja im Snips-Modul schon zur Textausgabe genutzt werden kann vermute ich, dass dies in die andere Richtung ebenfalls relativ einfach möglich sein müsste, richtig? Also beliebigen Text über das Snips-Modul an Snips weiterreichen, entsprechend Aktionen in FHEM auszulösen und die Antworten statt per TTS z.B. über Telegram auszugeben.

Gruß Jonas