[39_Talk2Fhem.pm] Flexible Sprachsteuerunghilfsmodul

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

Vorheriges Thema - Nächstes Thema

Phill

Genau genommen brauchst du den Dummy ja nicht, Talk2Fhem ersetzt den Dummy.

Wie meinst du das "Die Auswahl ist leer"? Ist doch genau so wie bei einem Dummy.
Was passiert denn wenn du in der Befehlszeile von fhem "set talk licht im Wohnzimmer an" eingibst.
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

2017.12.23 20:52:20 1: Text wird interpretiert: licht im Wohnzimmer an
2017.12.23 20:52:20 1: Kommando: licht im wohnzimmer an
2017.12.23 20:52:20 1: Restkommando: 'licht im wohnzimmer an'
2017.12.23 20:52:20 1: Hit: 'licht im wohnzimmer an' =~ qr/\s*licht (\S+ ){0,2}(haus|..?berall|wohnung|wohnzimmer|esszimmer|bad\s*|toilette|wc|b..?ro|schlafzimmer|ankleide|garderobe|kinderzimmer|spielzimmer|flur|gang|diele|garage|garten|terrasse|balkon|eg|erdgescho\s*|og|obergescho\s* names = mama|papa|sohn|name|tochter|name) (\S*)\s*/i
2017.12.23 20:52:20 1: Erweitertes Hashkommando verarbeiten. 2 [@lights] set ### $3{true=>"on", false=>"off"}
2017.12.23 20:52:20 1: ["lampen_alle","lampen_alle","lampen_wohnzimer","lampen_esszimmer","","","","lampen_schlafzimmer","[...]"]
2017.12.23 20:52:20 1: Keyword: wohnzimmer

2017.12.23 20:52:20 1: ARRAY Auswertung: wohnzimmer /  /  = lampen_alle lampen_alle lampen_wohnzimer lampen_esszimmer    lampen_schlafzimmer [...]
2017.12.23 20:52:20 1: ARRAY Suche in Liste: haus|..?berall wohnung wohnzimmer esszimmer bad\s* toilette|wc b..?ro schlafzimmer ankleide|garderobe kinderzimmer spielzimmer flur|gang|diele garage garten terrasse balkon eg|erdgescho\s* og|obergescho\s* names = mama papa sohn|name tochter|name
2017.12.23 20:52:20 1: Erweitertes Hashkommando verarbeiten. 3 {true=>"on", false=>"off"} set lampen_wohnzimer ###
2017.12.23 20:52:20 1: {true=>"on", false=>"off"}
2017.12.23 20:52:20 1: Keyword: an

2017.12.23 20:52:20 1: Wort gefunden 'an - true' ersetze durch 'on'
2017.12.23 20:52:20 1: Befehl: set lampen_wohnzimer on
2017.12.23 20:52:20 1: Ergebnis: 'cmds'
[
  ' set lampen_wohnzimer on'
]


Achso, jetzt fällt der Groschen. Also speise ich den Gesprochenen Text als "set" direkt in das Modul ein.  ;D ;D

Sry für die Mißverständnisse.

Prof. Dr. Peter Henning

@phill:
ZitatVielleicht kann ich aber trotzdem einige Ansätze davon mit in meinen Code aufnehmen.

Aber GNU GPL Lizenzbedingungen beachten.

LG

pah

Esjay

Nabend Phill,
mir ist ebend aufgefallen, das ich den Inhalt von "attr T2F_modwordlist" geändert habe, und erst nachdem ich ein reload gemacht habe, die Werte auch wirklich in die Auswertung übernommen wurden.

Hier zu sehen..number1 etc. stand zu diesem Zeitpunkt schon nicht mehr im Attribut

2017.12.23 23:58:43 1: Text wird interpretiert: Schalter auf Sat 1
2017.12.23 23:58:43 1: Kommando: schalter auf sat 1
2017.12.23 23:58:43 1: Restkommando: 'schalter auf sat 1'
2017.12.23 23:58:43 1: Hit: 'schalter auf sat 1' =~ qr/\s*auf (ard|erste|zdf|zweite|rtl|sat 1|prosieben|kabel 1|rtl 2|vox|sixx)\s*/i
2017.12.23 23:58:43 1: Erweitertes Hashkommando verarbeiten. 1 [@channel] set ReceiverAxBox4K channel ###
2017.12.23 23:58:43 1: ["number1","number2","number3","number4","number5","number6","number7","number8"]
2017.12.23 23:58:43 1: Keyword: sat 1

2017.12.23 23:58:43 1: ARRAY Auswertung: sat 1 /  /  = number1 number2 number3 number4 number5 number6 number7 number8
2017.12.23 23:58:43 1: ARRAY Suche in Liste: ard|erste zdf|zweite rtl sat 1 prosieben kabel 1 rtl 2 vox sixx
2017.12.23 23:58:43 1: Befehl: set ReceiverAxBox4K channel number4
2017.12.23 23:58:43 1: Ergebnis: 'cmds'
[
  ' set ReceiverAxBox4K channel number4'
]

2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Initialize redefined at ./FHEM/39_Talk2Fhem.pm line 79.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Define redefined at ./FHEM/39_Talk2Fhem.pm line 97.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Loadphrase redefined at ./FHEM/39_Talk2Fhem.pm line 120.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Undef redefined at ./FHEM/39_Talk2Fhem.pm line 140.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Delete redefined at ./FHEM/39_Talk2Fhem.pm line 148.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Notify redefined at ./FHEM/39_Talk2Fhem.pm line 155.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Set redefined at ./FHEM/39_Talk2Fhem.pm line 171.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_Get redefined at ./FHEM/39_Talk2Fhem.pm line 209.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_parseParams redefined at ./FHEM/39_Talk2Fhem.pm line 243.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_parseArray redefined at ./FHEM/39_Talk2Fhem.pm line 257.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine filter redefined at ./FHEM/39_Talk2Fhem.pm line 359.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine get_time_by_phrase redefined at ./FHEM/39_Talk2Fhem.pm line 368.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine mkattime redefined at ./FHEM/39_Talk2Fhem.pm line 421.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine addevt redefined at ./FHEM/39_Talk2Fhem.pm line 433.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine err redefined at ./FHEM/39_Talk2Fhem.pm line 619.
2017.12.23 23:59:53 1: PERL WARNING: Subroutine Talk2Fhem_exec redefined at ./FHEM/39_Talk2Fhem.pm line 263.
2017.12.24 00:00:18 1: Text wird interpretiert: Schalter auf Sat 1
2017.12.24 00:00:18 1: Kommando: schalter auf sat 1
2017.12.24 00:00:18 1: Restkommando: 'schalter auf sat 1'
2017.12.24 00:00:18 1: Hit: 'schalter auf sat 1' =~ qr/\s*auf (ard|erste|zdf|zweite|rtl|sat 1|prosieben|kabel 1|rtl 2|vox|sixx)\s*/i
2017.12.24 00:00:18 1: Erweitertes Hashkommando verarbeiten. 1 [@channel] set ReceiverAxBox4K channel ###
2017.12.24 00:00:18 1: ["1","2","3","4","5","6","7","8"]
2017.12.24 00:00:18 1: Keyword: sat 1

2017.12.24 00:00:18 1: ARRAY Auswertung: sat 1 /  /  = 1 2 3 4 5 6 7 8
2017.12.24 00:00:18 1: ARRAY Suche in Liste: ard|erste zdf|zweite rtl sat 1 prosieben kabel 1 rtl 2 vox sixx
2017.12.24 00:00:18 1: Befehl: set ReceiverAxBox4K channel 4
2017.12.24 00:00:18 1: Ergebnis: 'cmds'
[
  ' set ReceiverAxBox4K channel 4'
]


Ebenso hatte ich gerade nen Absturz von fhem.Leider nur verbose 1, aber vll hilft es ja trotzdem.

2017.12.24 00:02:23 1: Text wird interpretiert: Schalter auf 12
2017.12.24 00:02:23 1: Kommando: schalter auf 12
2017.12.24 00:02:23 1: Restkommando: 'schalter auf 12'
Unmatched ) in regex; marked by <-- HERE in m/\s*) <-- HERE {0,2}(haus|..?berall|wohnung|wohnzimmer|esszimmer|bad\s*|toilette|wc|b..?ro|schlafzimmer|ankleide|garderobe|kinderzimmer|spielzimmer|flur|gang|diele|garage|garten|terrasse|balkon|eg|erdgescho\s*|og|obergescho\s* names = mama|papa|sohn|name|tochter|name) (\S*)\s*/ at ./FHEM/39_Talk2Fhem.pm line 452.
2017.12.24 00:04:46 1: Including fhem.cfg
2017.12.24 00:04:48 2: eventTypes: loaded 5752 events from ./log/eventTypes.txt
2017.12.24 00:04:55 2: Switched MaxCUL rfmode to MAX


Nach dem Neustart hatte ich auch folgende Warnungen im log.

2017.12.24 00:05:23 1: PERL WARNING: Unrecognized escape \s passed through at ./FHEM/39_Talk2Fhem.pm line 379, <$fh> line 1896.
2017.12.24 00:05:23 1: PERL WARNING: Variable "$myname" will not stay shared at ./FHEM/39_Talk2Fhem.pm line 424, <$fh> line 1896.
2017.12.24 00:05:23 1: PERL WARNING: Variable "%keylist" will not stay shared at ./FHEM/39_Talk2Fhem.pm line 441, <$fh> line 1896.
2017.12.24 00:05:23 1: PERL WARNING: Variable "%modlist" will not stay shared at ./FHEM/39_Talk2Fhem.pm line 479, <$fh> line 1896.
2017.12.24 00:05:23 1: 'licht (\\S+ ){0,2}(@rooms) (\\S*)'
'set $2[@lights] $3{true=>"on", false=>"off"}'
'heizung (\\S*)$'
'set d_Heizung $1{true=>"on", false=>"off"}'
'auf (@sender)'
'set ReceiverAxBox4K channel $1[@channel]'
'(@rooms) licht (@colors)'
'set Licht_$1[@lightdev] hue $2[@huecolor]\''


Grüße und schöne Festtage!


Prof. Dr. Peter Henning

Konkurrenz belebt das Geschäft: Ich habe meinen semantischen Ansatz jetzt als Modul 95_Babble.pm umgeschrieben. Hier der passende Thread:

https://forum.fhem.de/index.php/topic,81737.msg738020.html#msg738020

Mal sehen, was sich so durchsetzt.

LG

pah

Phill

Hallo, na dann hau ich doch nochmal ein update raus...
Bitte unbedingt updaten, vorherige Version ist doch recht instabil was Syntaxfehler angeht, und ein Fehler mit der Zeitberechnung bei Wochentagsangaben war auch drin.

Ich habe einige Syntaxvereinfachungen eingebaut.
1. Es werden keine Anführungszeichen mehr benötigt bei Listen $n[] und dem hash $n{}
2. Kommentare können mit # eingefügt werden
3. Die Kommandos können zur Übersicht auf mehrere Zeilen ausgeweitet werden

Eine Sache ist beim Updaten zu beachten:
Ich musste eine kleine Syntaxänderung einbauen. Die Erweiterten Kommandos cmds=>..., answer=>... sind nicht mehr in geschweiften klammern anzugeben, sondern in einfachen ().
Das hatte Überschneidungen mit den Perlkommandos gegeben.

Sobald ich Zugang zum Wiki habe schreibe ich mal eine schönerer Anleitung.

Achja ist jetzt auch multilingual, also entweder das global Attribut language auf DE oder das lokale Attribut T2F_language auf DE.

Hier mal ein kleiner Vorgeschmack auf geniale Konfigs...  ;D

zustand (\S+)+ (\S+) = (answer=>'my $s=Value((grep { $attr{$_}{alias} eq "$2" } (keys %attr))[0]);; "Der Status ist ".$s if $s')
Gibt nach Angabe des Attributs Alias den Status des Gerätes aus.
Also, sag mit den Zustand von der Haustür. = Der Status ist zu/auf... Wenn das Entsprechende Device den Aliasnamen Haustür hat...


Was muss eigentlich noch erfüllt sein um offiziel als Modul Aufgenommen zu werden? Ich habe mal irgendwo gelesen Support und Englische Anleitung ist notwendig, weiß aber nicht mehr wo. Das ist mit dem Update beides gegeben...

Und nun, guten Rutsch...
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

Grml

#51
Erstmal vielen, vielen Dank für das Modul. Ich habe die letzten Stunden damit etwas gespielt und bin bisher sehr begeistert!
Für den ersten Test habe ich mir einen einfachen Dummy namens "Bildschirm" gebaut, den ich ein- und ausschalten kann. Das funktioniert per Webinterface als auch per Telegram-Nachricht.

Allerdings habe ich momentan ein kleines Problem: Ich verstehe noch nicht, wie bzw. auf welcher Basis Antworten/Bestätigungen an meinen TelegramBot geschickt werden.
Das NOTIFY zum chatten habe ich wie im WIKI-Artikel beschrieben angelegt (BTW: Da ist ein kleiner Fehler im Artikel, es fehlt das "NOTIFY" nach "define n_telbot NOTIFY [...]" ;-))

Wenn ich eine Telegram-Nachricht schreibe mit dem Inhalt "schalte den bildschirm ein" schaltet der Dummy auf "on".
Lt. dem Screenshot im WIKI sollte ich dann (meinem Verständnis nach) ein "Ok" oder sowas zurückbekommen. Das passiert aber nicht. Das Answers-Reading gibt es auch (noch) nicht (vermutlich weil es leer ist und noch nie was enthalten hat in meinem Fall).

DEF im talk-Device:
bildschirm\S* (a|ei)n = set test_bildschirm on
bildschirm\S* aus = set test_bildschirm off


DEF im n_talk Notify:
talk:.* {
# Sende die Antwort per Telegram und gebe es über das GoogleHome aus
if ($EVENT =~ s/^answers: //) {
fhem("set TelegramBot _msg \@xxxxxxx $EVENT");
}

# Schicke den Fehler per Telegram und sag am GoogleHome das es nicht geklappt hat.
if ($EVENT =~ s/^err: //) {
fhem("set TelegramBot _msg \@xxxxxx $EVENT");
}

# Schick mir alle ausgeführten Befehle als Telegram
if ($EVENT =~ s/^cmds: //) {
fhem("set TelegramBot _msg \@xxxxxx $EVENT");
}
}


(Die Google Home Ausgabe habe ich erstmal gelöscht, weil meine sämtlichen GOOGLECAST Devices nach einem FHEM Neustart nicht mehr online sind...)

Ich glaube ich stehe da gerade etwas auf dem Schlauch...

Phill

Zitat von: Grml am 02 Januar 2018, 22:21:15
Wenn ich eine Telegram-Nachricht schreibe mit dem Inhalt "schalte den bildschirm ein" schaltet der Dummy auf "on".
Lt. dem Screenshot im WIKI sollte ich dann (meinem Verständnis nach) ein "Ok" oder sowas zurückbekommen. Das passiert aber nicht. Das Answers-Reading gibt es auch (noch) nicht (vermutlich weil es leer ist und noch nie was enthalten hat in meinem Fall).
Talk2Fhem ist erst mal ruhig. Das Konzept ist eher, wenn alles gut verlaufen ist dann sage nichts. Will man eine Antwort haben muss das definiert werden. Siehe https://wiki.fhem.de/wiki/Modul_Talk2Fhem#Antworten

Zitat von: Grml am 02 Januar 2018, 22:21:15
DEF im talk-Device:
bildschirm\S* (a|ei)n = set test_bildschirm on
bildschirm\S* aus = set test_bildschirm off


Schau dir mal hierzu das Thema Klammermodifikation an, und dieses Beispiel.
https://wiki.fhem.de/wiki/Modul_Talk2Fhem#Einfaches_schalten
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

#53
Mir ist gerade eine Idee gekommen wie man einfach eine Standardantwort definiert bekommt. Beim nächsten Update gibt es zwei weitere Readings.
fhem -> enthält die Rückgabe von fhem
status -> wird immer gesetzt.
Somit lässt sich auf "status: done" triggern und eine Standart Rückantwort senden.
Werde morgen mal ein update fahren...
Gruß
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

Update gefahren siehe erster Beitrag.

Auch wenn die Aufmerksamkeit leider etwas abhanden gekommen ist, sehe ich in dem Modul doch einige Vorteile. Ich habe jetzt mit Hochdruck daran gearbeitet das das Modul soweit stabil läuft und maximal flexibel ist.

Ich würde mich über ein paar Reaktionen freuen. Wiki wird noch ein bisschen ergänzt werden.
Grüße
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

Leider verursacht etwas, was ich installiert habe, Probleme bei der Funktion des Moduls.
Bei einer frisch aufgesetzten Instanz gab es keine Probleme das Modul zu laden. Jetzt sind all meine Pakete installiert und Geräte eingebunden und er gibt mir beim Update des Moduls folgendes aus:
Too many arguments for main::Talk2Fhem_Loadphrase at ./FHEM/39_Talk2Fhem.pm line 227, near ""@def")"
Too many arguments for main::Talk2Fhem_Loadphrase at ./FHEM/39_Talk2Fhem.pm line 299, near "}) "


Momentan hab ich auf der ursprünglichen Instanz noch deine Bastelllösung mit dem 99_User.pm laufen. Die funktioniert zum Glück ganz gut. :)

Phill

Bei der Fehlermeldung ist ein Neustart von FHEM notwendig.
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

Wow bin ich doof. Hatte bei einer älteren Version trotz neustart immer Probleme bei meiner Hauptinstanz. Jetzt bei der Version aber nur mit reload probiert...
Jetzt funktioniert es sogar auf der Hauptinstanz. Vielen Dank!

Phill

#58
Ich bin momentan am überlegen wie ich per Sprachbefehl auf meine Musik Sammlung zugreifen kann.
Womit spielt ihr eure Musik ab? Gibt es eine Art Datenbank für Musik die man absprechen könnte? Oder nur noch Spotify und co?

EDIT: hier mal meine vorläufige QuiknDirty Variante. link
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

Flipper92

Hallo zusammen, ich hab es mir nun auch mal angeschaut.
bin aktuell an dem punkt, dass das Modul alle eingaben bekommt. (Ausgaben muss ich noch machen.)

Ich bekomme jedoch ein fehler in der umwandlung des befehls "TV an."
im log stet dann:
2018.01.06 12:38:38 1: HASH Replacement Failed! set Wohnzimmer.TV.Steckdose ###

was hab ich übersehen?
Internals:
   CFGFN     
   DEF        # Tests
Hallo = ( answer => '["Hallo auch!","Guten Tag!","Ahoi!"]->[rand(3)]' )

# Temperatur abfrage
wie.*(kalt|warm|grad|temperatur).*(@rooms) = ( answer => '"Die Temperatur beträgt ".ReadingsVal("$2[@sens]", "temperature", "unbekannt")." grad"' )

# GoogleCast Commandos
leise$            =  set googlecastdevice volume 14
normale lautstärke =  set googlecastdevice volume 20
laut$             =  set googlecastdevice volume 30
(ein wenig|etwas|viel)? ?(lauter|leiser)  =  { fhem("set googlecastdevice volume ".(ReadingsVal("googlecastdevice","volume", 0)$2[+,-]$1[3,5,10,empty,7])) }

# Abfragen anhand des T2F_alias in den Geräten
(zustand|status) (\S+)* (\S+) = (answer=>'my $s=Value((grep { "$3" =~ /$attr{$_}{T2F_alias}/i } (keys %attr))[0]);; "Der Status ist ".$s if $s')

# Fernseher schalten
(fernseher|tv) (\S+) = set Wohnzimmer.TV.Steckdose $1{ true => on, false => off }
   NAME       talk
   NR         375
   NTFY_ORDER 50-talk
   STATE      Initialized
   TYPE       Talk2Fhem
   READINGS:
     2018-01-06 11:48:52   answers         Ahoi!
     2018-01-06 12:22:00   err             Error on Command: 'ifttt2fhem: schalte den tv an'
     2018-01-06 12:22:00   set             ifttt2fhem: schalte den TV an
     2018-01-06 12:22:00   status          err
Attributes:
   T2F_keywordlist rooms =
haus|überall|wohnung,wohnzimmer,bad\S*,toilette|wc,schlafzimmer,kinderzimmer|büro|arbeitszimmer,
flur|gang|diele,balkon,\S*auße\S*( haus)?|vor der tür,paul
   T2F_language DE
   T2F_modwordlist tempsens = ,Wohnzimmer.Temperatur,,,Schlafzimmer.Temperatur,Jennifer.Temperatur,,,,Paul.Temperatur

   disable    0


direkte eingabe ist das selbe Problem:
   READINGS:
     2018-01-06 11:48:52   answers         Ahoi!
     2018-01-06 12:26:32   err             Error on Command: 'schalte den tv an'
     2018-01-06 12:26:32   set             schalte den TV an
     2018-01-06 12:26:32   status          err



Ps: Könntest du mir kurz dein d_googlespeak erklären?
Und eventuell im Wiki Beitrag im bereich über die Google Home auf die MQTT version der anbindung ergänzen (zumindest Hinweiß).