[39_Talk2Fhem.pm] Flexible Sprachsteuerunghilfsmodul

Begonnen von Phill, 12 Dezember 2017, 12:24:09

Vorheriges Thema - Nächstes Thema

Phill

Talk2Fhem

Kurzbeschreibung:
Das Modul verarbeitet natürliche Sprache der in Textform vorliegen muss in Zeit- und Ereignisabhängige FHEM Befehle. Ziel ist es ein möglichst flexibles und unabhängiges Modul bereit zu stellen. Die Konfiguration erfolgt über die Weboberfläche anhand regulären Ausdrücken.
Der Sprachbefehl wird über den "set" Befehl an das Modul übergeben. Das Modul stellt eine Reihe von Readings bereit, die für Rückmeldungen an den User verwendet werden können.

Für weitere Informationen siehe wiki. https://wiki.fhem.de/wiki/Modul_Talk2Fhem

Beispiel:




Texteingang:
Modul Telegram oder GoogleHome per IFTT/MQTT
Befehle:FHEM Kommando
Perl
Textausgabe:Textnachricht Telegram Fehlerbericht
TTS Antwort / Fehleransage
Unbekanntes Kommando TEERKO/Babble
 

Es lassen sich mit relativ wenig Aufwand beispielsweise folgende Dinge konfigurieren:
Zitatmach die Garage auf und in 5 Minuten wieder zu
die sonne blendet in der Küche
ich gehe um halb 7 duschen (dann soll das bad warm sein)
gib mir bescheid wenn mein Kind nach hause kommt

UPDATE
Ab Version 0.5.0 ist es möglich Objekte in den Sätzen aufzuzählen und zu verunden. Damit lassen sich Sätze wie im Folgenden übergeben.
ZitatBeschatte das Wohnzimmer, Esszimmer und die Küche
Schalte den Fernseher und die Soundbar an
Anstatt wie vorher eigenständige Kommandos zu formulieren.

Die notwendige Konfiguration ist hier im Wiki beschrieben.

Installation


Zitatupdate 39_Talk2Fhem
shutdown restart
define talk Talk2Fhem
attr talk disable 1


Für Kommentare des Autors zu wichtigen updates bitte die folgenden verlinkten Beiträge beachten.
EDIT 18.03.2017:
Update auf 0.5.3

  • Zeitenerkennung verbessert und erweitert
  • Erfolgreiche RegExp werden jetzt aus dem Kommando entfernt für die folgenden RegExp bei &&
  • Zeilenumbrüche in der Konfig werden jetzt als Leerzeichen interpretiert
  • Bugfixes

Update auf 0.5.1

  • Einführung der Objekt-Verundung
  • Diverse Bugfixes

Update auf 0.4.5

  • Zeitenerkennung verbessert
  • Reihenfolge der Typenmodifikatoren wird jetzt berücksichtigt
  • Commandref Umlaute und Sonderzeichen ersetzt
  • Verschachtelte Klammern in RegEx möglich
  • Klammerzeichen im Modifikator möglich
  • Stabilitätsupdates
  • Ersetze ; durch ;; in Zeitevents
  • Syntaxwarning bei unbekannter keywordlist

Update auf 0.4.0

  • Neues SET cleartriggers, cleartimers
  • wieder Erkennung verbessert
  • Logikfehler bei verschachtelten Sätzen mit "und" behoben
  • Neue pass checks float, numeral
  • Extraktion des Klammernarrays auch bei Keylistenselector $n@
  • Bug on none existing namelists
  • Fhem $_ modifikations bug behoben
  • Log ausgaben verbessert
  • Neues Attribut T2F_if
  • Neues Attribut T2F_origin
  • Neuer GET standardfilter
  • Neuer GET log
  • Neue Variable $IF
  • Errormessages detaliert
  • Neuer Get @keylist @modlist


Update auf 0.3.2

  • Eventgesteurte Befehle
  • && Verundeung von RegExp
  • $include Konfiguration über externe Dateien
  • $& !$& $DATE $AGAIN Zugriff auf Umgebungsmuster und Zeitphrasen
  • Indikatoren der RegExp's ? und !
  • $n@ für den Keylistenzugriff
  • Zahlenwörter in Zeitphrase werden jetzt erkannt
  • FHEM helper hash zur Optimierung für verwendet
  • Reihenfolge der DEF fix
  • Code generell aufgeräumt

Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Esjay

Meine Neugier ist geweckt. Vielen Dank für deine Mühe.

Ps: Du bist Schuld daran, dass ich mir trotz 5 Alexa Büchsen gestern ein Google Home Mini gekauft habe. Ich hoffe du kannst damit leben  ;)

Grüße

MadMax-FHEM

Ich häng mich auch mal dran...

Habe zwar auch eigentl. alles per Alexa laufen aber suche immer noch eine vernünftige Möglichkeit meinen Google Home einzubinden, um echt vergleichen zu können...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

ToM_ToM

Das sieht ja interessant aus. Ähnlich wie TEERKO. Leider ist das ja irgendwie eingeschlafen. Ich hänge mich hier mal mit dran. Evtl. kann ich dann meine Eigenlösung rausschmeißen. :)
Ich hatte das mit der Unterscheidung via REGEX vorher alles mit Tasker und AutoVoice gelöst. Das Problem ist nur dass Eintippen der Befehle und REGEX auf der Tablet-Tastatur wenn dieses auch noch fest an der Wand verbaut ist.^^ Und ganz optimal fand ich das auch nicht.

Bin mal gespannt :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Prof. Dr. Peter Henning


Phill

#5
Zitat von: Esjay am 13 Dezember 2017, 10:49:04
Ps: Du bist Schuld daran, dass ich mir trotz 5 Alexa Büchsen gestern ein Google Home Mini gekauft habe. Ich hoffe du kannst damit leben  ;)
hört sich nach einer Art Lob an.  ;D Von daher kann ich das sehr gut...

Ich habe mit Alexa noch gar nichts gemacht. Kann man den gesprochenen Text von Alexa abgreifen wie bei Google?
TEERKO schaue ich mir mal bezüglich Modularbeiten an. Danke.

Ich habe mal ein kleines Update gefahren und im ersten Beitrag ergänzt. Der Fehlerteufel wieder...  ::)

Müsst halt eure Änderungen momentan noch manuell einpflegen. Vorallem den Hash %phrase vermutlich . Ziel ist es aber auf jedenfall alles in eine Config auszulagern...
Ich schreibe heute Abend nochmal ein paar ergänzende Worte...


Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

MadMax-FHEM

#6
Zitat von: Phill am 13 Dezember 2017, 14:47:36
Ich habe mit Alexa noch gar nichts gemacht. Kann man den gesprochenen Text von Alexa abgreifen wie bei Google?

Nein, leider nicht.

Im alexa-fhem landen wohl nur die bereits "geparsten" Ergebnisse...
https://wiki.fhem.de/wiki/Alexa-Fhem

Es gibt (aber da ist grad "Stopp" bei der Entwicklung) ein echodevice/amazonecho Modul, da steht dann schon die letzte Ansage drin.
Ist aber ein Polling per Webabfrage (ähnlich wie in der Amazon Alexa-App wo man sich die "Historie" anschauen kann) also nichts für auswerten und reagieren.
https://forum.fhem.de/index.php/topic,77458.0.html

Zitat von: Phill am 13 Dezember 2017, 14:47:36
@pah das kann ich aber nicht selbst verschieben oder ???

Bin zwar nicht 'pah' aber trotzdem: das kannst du selbst!
(unten rechts oder links)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Pitcher90

Finde das Thema auch sehr interessant!
IFTTT ist so ansich ja schon ganz gut. Allerdings ist es schon ziemlich nervig, wenn man sich mal verspricht, oder der Fernseher in den Befehl reinquatscht, direkt der Befehl fehlschlägt.
Hab es jetzt mal soweit gemacht wie du beschrieben hast, bin aber bei dem notify hängen geblieben.
Und zwar erhalte ich folgenden Fehler:
Global symbol "$EVT" requires explicit package name at (eval 18356) line 3.
Global symbol "$EVT" requires explicit package name at (eval 18356) line 4.

Kann es sein, dass es $EVENT sein muss?

LG Stefan

Phill

Ja natürlich. Hab's korrigiert oben.
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Phill

Ich habe mal ein paar Beispiele und die Konfiguration ergänzt... Läuft eigentlich schon erstaunlich rund...  8)
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Esjay

Zitat von: Phill am 14 Dezember 2017, 00:58:19
Ich habe mal ein paar Beispiele und die Konfiguration ergänzt... Läuft eigentlich schon erstaunlich rund...  8)

Moin Phil

ich habe mich jetzt noch nicht voll umfänglich mit dem Thema beschäftigt, aber bei mir kommt das Gefühl hoch, dass dein Skript auf irgendetwas aufbaut, was aus diesem Theard nicht hervorgeht.Sozusagen der Punkt vor deiner Installation. Aus dem Bauch heraus würde ich jetzt sagen ich muss in dem Theard "Google Home ab 8 August......." recherchieren.

Stumpf gesagt, wo ist denn überhaupt die Verbindung zwischen Google Home und Fhem. Oder auch wo kommt der Text der den Dummy befüllt überhaupt her? Verstehst du was ich sagen will?

ZitatKonfiguration:
Momentan muss das Script leider noch direkt in der Moduldatei konfiguriert werden. Wird auf jeden Fall ausgelagert die Frage ist nur wo die Reise eigentlich hingeht. Vorschläge dazu werden gerne angenommen.

Zu dem Punkt wäre wichtig zu wissen, ob du auch schon Vorstellung hast. Redet man hier evtl. über eine Art Device (siehe Alexa/Siri Device) in dem man alles konfiguriert. Über Attribute in denen man den jeweiligen Regex angeben kann, oder ebenfalls eine Config vornehmen kann? Zum Beispiel GoogleName GoogleRaum GoogleRegexDevice.

Grüße


Phill

ZitatStumpf gesagt, wo ist denn überhaupt die Verbindung zwischen Google Home und Fhem. Oder auch wo kommt der Text der den Dummy befüllt überhaupt her? Verstehst du was ich sagen will?
Absolut. Wichtiger Hinweis. Das muss alles diskutiert werden.

Dem Script ist es aber erst mal egal wo der Text her kommt. Bei mir ist das der Telegram Messenger und Google Home. Aber das kann alles sein. Ich denke, zu erklären wie man die verschiedenen Eingabemethoden mit dem Modul verbunden bekommt, wäre dann was für ein Wiki Betrag.
Das Script konvertiert erst Mal Stumpf "Text zu FHEM-Kommando".

Ich persönlich hole die Daten von Google Home über ein ifttt template. Per webhook.
Ich suche später mal den Link raus wo das mit dem webhook erklärt wird.

ZitatZu dem Punkt wäre wichtig zu wissen, ob du auch schon Vorstellung hast. Redet man hier evtl. über eine Art Device (siehe Alexa/Siri Device) in dem man alles konfiguriert. Über Attribute in denen man den jeweiligen Regex angeben kann, oder ebenfalls eine Config vornehmen kann? Zum Beispiel GoogleName GoogleRaum GoogleRegexDevice.
das sollte diskutiert werden. Ich bin hier noch relativ offen. Ich wollte kein komplett neues Süppchen kochen sondern eher an was bestehen orientieren, da würde ich vorschlagen begrüßen. Muss halt Sinn machen.
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Pitcher90

Ich erhalte leider immer einen Fehler im Log:
2017.12.14 11:39:56 1: Licht im Wohnzimmer an
2017.12.14 11:39:56 1: ERROR evaluating my $NAME='d_assistent';my $EVENT='Licht im Wohnzimmer an';my $EVTPART3='an';my $EVTPART0='Licht';my $TYPE='dummy';my $EVTPART2='Wohnzimmer';my $SELF='n_assistent';my $EVTPART1='im';{

Log 1, $EVENT;
my %r = assi($EVENT);

if ($r{answer}) { # Wenn eine Antwort enthalten gib die aus z.b. telegram oder google home mini oder amazon dot
foreach (@{$r{answer}}) {
fhem("set telbot _msg \@user $_");
fhem("set googlehome speak '$_'");
}
}

if ($r{err}) { # Wenn das Kommando nicht verstanden wurde sende den Fehler an einen Telegramuser und sage etwas am google home mini
my $err = encode("utf8", join("\n", @{$r{err}}));
fhem("set telbot _msg \@user $err");
fhem("set googlehome speak 'Das hat leider nicht geklappt!'");
} else { # falls kein Fehler vorliegt führe die Kommandos aus.
foreach(@{$r{cmds}}) {
#fhem($_);
}
}
}
: Undefined subroutine &main::assi called at (eval 46226) line 4.


Hast du eine Idee woran das liegen könnte? Die Subroutine ist wie bei dir unter 39_fhemtalk.pm abgespeichert. Leider sind meine Perl-Kenntnisse nicht ausreichend um den Fehler zu finden.  :-\

Phill

Fhem neu gestartet?
reload 39_fhemtalk.pm gemacht?
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Pitcher90

Ja, wurde schon öfter neugestartet. Ich muss dazu sagen, dass ich die Config erstmal so gelassen wie bei dir. Weiß jetzt nicht ob das diesen Fehler zur Folge haben kann. Log sieht ja danach aus, dass er generell nicht auf die Subroutine zugreifen kann.