Neues Modul: Text2Speech

Begonnen von Tobias, 07 Januar 2014, 12:57:23

Vorheriges Thema - Nächstes Thema

Ellert

TTS_TimeOut, gibt an nach welcher Zeit eine Ansage abgebrochen wird, default ist 30s.

Von-XS1-Nach-FHEM

Ok danke, mit Aktor meine ich ein Sensor zum Beispiel vom Türklingel die dann die Stimme und Stereoanlage anschaltet. Da da Text2speech schneller ist als meine Stereoanlage mit anschalten haben ich das jetzt hinbekommen durch folgendes einzugeben bei Attributes , TTS_MplayerCall

sleep 3; AUDIODEV={device} /usr/bin/play -q -v $(({volume}*{volumeadjust}/10000)).$(({volume}*{volumeadjust}%10000)) {file} -t alsa

Ob das richtig ist weiß ich nicht aber es bringt mir die gewünschte Verzögerung von der Ausgabe. 8)


Otto123

kann man so machen.  ;)

Ich hätte es bei notify (oder was immer) was den Befehl anstößt gemacht.

BTW Aktor und Sensor sind getrennte Dinge: ein Sensor ermittelt - ein Aktor führt aus. Du hast jetzt scheinbar beides im Spiel  ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

PNinBB

#1113
Guten Morgen,
Ich habe gestern 'Text2Speech' installiert und nach einigen kleinen Problemchen läuft es auch wie erwartet.
Nun bin ich gerade - mehr zufällig und unabsichtlich - auf die Schaltfläche 'Set ... tts' gekommen und das Eingabefeld für den Text war leer.
Ergebnis: FHEM stürzt ab; Meldung im Logfile:

Can't locate object method "name" via package "Empty string, empty guess" (perhaps you forgot to load "Empty string, empty guess"?) at ./FHEM/98_Text2Speech.pm line 610.

Zugegeben, es ist nicht die normale Betriebsweise, aber vielleicht hilft diese Erfahrung, es noch stabiler zu machen.
Mit gefülltem Eingabefeld funktioniert es natürlich.
Die Module, die in https://wiki.fhem.de/wiki/Text2Speech aufgeführt sind, sind installiert und auf dem neuesten Stand.
Aber auf jeden Fall: Danke an die 'Macher'!
Peter
Ergänzung:
Mit 'verbose 5' für diesen Fall kommen keinerlei weitere Einträge !
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

PNinBB

#1114
Guten Morgen,
ich bin mir nicht sicher, ob der Thread noch "lebt"!
Ich habe nun die Sprachausgabe weiter ausgebaut und mit anderen Abläufen verbunden.
Dabei sind mir zwei Probleme aufgefallen:
1. Fehlermeldung: MP3::Info - Module
2021.03.11 08:30:05.400 3: MP3::Info Modul fehlt, konnte MP3 Tags nicht entfernen
Der Meldungstext stimmt so nicht, da der MP3::Info-Modul installiert ist. Ich habe mich etwas im Modul 98_Text2Speech.pm umgeschaut. Ab Zeile 1061 heisst es da:

      if(-e $t){
        Log3 $hash->{NAME}, 4, $hash->{NAME}.": Benenne Datei um von <".$t."> nach <".$Mp3WrapFile.">";
        rename($t, $Mp3WrapFile);
        #falls die Datei existiert den ID3V1 und ID3V2 Tag entfernen
        eval{
          remove_mp3tag($Mp3WrapFile, 2);
          remove_mp3tag($Mp3WrapFile, 1);
          Log3 $hash, 4, $hash->{NAME}.": Die ID3 Tags von $Mp3WrapFile wurden geloescht";
        } or Log3 $hash->{NAME}, 3, "MP3::Info Modul fehlt, konnte MP3 Tags nicht entfernen";
      } else {Log3 $hash->{NAME}, 3, $hash->{NAME}.": MP3WRAP Fehler!, Datei wurde nicht generiert.";}

Die Funktion 'remove_mp3tag()' liefert für IDV3V1 '460' und für IDV3V2 '-1', also kein Tag entfernt, zurück. Die Schlussfolgerung, dass somit der Modul nicht installiert ist, ist falsch. Das dürfte wohl insgesamt kein Problem sein.
2. Keine saubere Trennung seitens 'Text2Speech' beim Füllen der 'tts'-Zeichenkette in einem Perl-Programm zwischen ASCII-Zeichenkette und mp3.Datei, vor allem, wenn man einen Mix hat.
So wird beispielsweise:
fhem ("set SprachAusgabe tts :DieHeizungIn.mp3::$Raum.mp3::GehtAuf.mp3:$TempWert:GradCelsius.mp3:");
manchmal fehlerfrei und manchmal einfach vorgelesen, also als 'plain'-Text interpretiert mit 'Doppelpunkt etc.!
Mit verbose=5 erkennt man, dass die Erkennung fehlerbehaftet ist.

.....
2021.03.09 10:02:38.157 4: SprachAusgabe: Angabe einer direkten MP3-Datei gefunden:  DieHeizungIn.mp3 => FileTpl_#0_0
2021.03.09 10:02:38.157 4: SprachAusgabe: Angabe einer direkten MP3-Datei gefunden:  GradCelsius.mp3 => FileTpl_#0_1
2021.03.09 10:02:38.158 4: SprachAusgabe: MaxChar = 100, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2021.03.09 10:02:38.158 4: SprachAusgabe: Auflistung der Textbausteine nach Aufbereitung:
2021.03.09 10:02:38.158 4: SprachAusgabe: 0 => TTSFiles/DieHeizungIn.mp3
2021.03.09 10:02:38.158 4: SprachAusgabe: 1 => GehtAuf.mp3
2021.03.09 10:02:38.159 4: SprachAusgabe: 2 => 21
2021.03.09 10:02:38.159 4: SprachAusgabe: 3 => FileTpl_#0_1:
2021.03.09 10:02:38.317 4: SprachAusgabe: Verwende TTS Spracheinstellung: Deutsch
2021.03.09 10:02:38.318 4: SprachAusgabe: TTSFiles/DieHeizungIn.mp3 als direkte MP3 Datei erkannt!
2021.03.09 10:02:38.318 4: SprachAusgabe: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: cf821dc257bd0d74cf1e55c430fa316f.mp3
2021.03.09 10:02:38.318 4: SprachAusgabe: Verwende Google Resource zur TTS-Generierung
....

Es zeigt sich, dass
1. die Datei 'DieHeizungIn.mp3' richtig erkannt und auch ausgegeben wird.
2. die Datei 'GradCelsius.mp3' nicht als mp3-Datei erkannt wird.
Zusatzbemerkung: die mp3-Dateien sind ausnahmslos mit dem Modul selbst (und natürlich dem Google-Hintergrund) aufgenommen worden.
Für ein paar Hilfen zum Weiterkommen wäre ich sehr dankbar.
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

Prof. Dr. Peter Henning

#1115
Natürlich lebt der Thread noch. Allerdings hat das Modul in der Tat ein paar Mängel - ich habe inzwischen eine komplette Überarbeitung am Laufen, die allerdings noch nicht reif zur Verteilung ist.

LG

pah

PNinBB

Danke ! Ich habe Geduld.
Falls ich irgendwann mit testen kann, gern!
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

Tobias

Hi,
das Modul entwickle ich immer in meinem Github, bin deswegen auch für kleiner Patches als Fehlerbehebungen offen :)

Ich habe es nicht sooo exxessiv im Einsatz wie manch andere hier, deswegen beobachte ich auch nicht alles ;)

Am besten Fehler hier posten und als im Github Issue einstellen, noch besser gleich mit PullRequest ;)
https://github.com/tobiasfaust/MyFHEM
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

mgmino

#1118
I am not able to get the module to perform. I may have a more fundamental beginner problem. Here is the log:
2021.03.28 21:28:26 1: PERL WARNING: Use of uninitialized value within %ttsAPIKey in numeric gt (>) at ./FHEM/98_Text2Speech.pm line 505.
2021.03.28 21:28:26 1: PERL WARNING: Use of uninitialized value within %ttsUser in numeric gt (>) at ./FHEM/98_Text2Speech.pm line 506.


2021.03.28 21:30:55 4: Txt2Talk: ermittelte CodePage: ascii , konvertiere nach UTF-8
2021.03.28 21:30:55 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Text2Speech.pm line 661.
2021.03.28 21:30:55 4: Txt2Talk: MaxChar = , Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2021.03.28 21:30:55 1: PERL WARNING: Use of uninitialized value $MaxChar in numeric le (<=) at ./FHEM/98_Text2Speech.pm line 709.
2021.03.28 21:30:55 1: PERL WARNING: Use of uninitialized value $MaxChar in numeric le (<=) at ./FHEM/98_Text2Speech.pm line 725.
2021.03.28 21:30:55 4: Txt2Talk: Auflistung der Textbausteine nach Aufbereitung:
2021.03.28 21:30:55 4: Txt2Talk: 0 => Hello
2021.03.28 21:30:55 4: Txt2Talk: 1 => World
2021.03.28 21:30:55 4: Txt2Talk: Verwende TTS Spracheinstellung: English-US
2021.03.28 21:30:55 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Text2Speech.pm line 996.
2021.03.28 21:30:55 4: Txt2Talk: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 2504345dd27296d1fee09dd85e7d89db.mp3
2021.03.28 21:30:55 4: Txt2Talk: Verwende ESpeak Resource zur TTS-Generierung
2021.03.28 21:30:55 4: Txt2Talk:sudo espeak -vde+f3 -k5 -s150 "Hello" -w "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav"
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
2021.03.28 21:30:55 4: Txt2Talk:lame "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav" "cache/2504345dd27296d1fee09dd85e7d89db.mp3"
System error.
Could not open sound file "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav".
Could not find "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav".
Can't init infile 'cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav'
2021.03.28 21:30:55 4: Txt2Talk: Bearbeite jetzt den Text: Hello
2021.03.28 21:30:55 4: Txt2Talk: Verwende ESpeak Resource zur TTS-Generierung
2021.03.28 21:30:55 4: Txt2Talk:sudo espeak -vde+f3 -k5 -s150 "Hello" -w "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav"
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
2021.03.28 21:30:55 4: Txt2Talk:lame "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav" "cache/2504345dd27296d1fee09dd85e7d89db.mp3"
System error.
Could not open sound file "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav".
Could not find "cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav".
Can't init infile 'cache/2504345dd27296d1fee09dd85e7d89db.mp3.wav'
2021.03.28 21:30:55 4: Txt2Talk: Es wurde nur ein Teil ausgegeben und weitere Teile folgen!
2021.03.28 21:30:55 4: Txt2Talk: Verwende TTS Spracheinstellung: English-US
2021.03.28 21:30:55 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Text2Speech.pm line 996.
2021.03.28 21:30:55 3: eval: {Text2Speech_Done('Txt2Talk|1|cache/2504345dd27296d1fee09dd85e7d89db.mp3')}
2021.03.28 21:30:55 4: Txt2Talk: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 9e5361ec6eaee7c10b86f9b5d3e82253.mp3
2021.03.28 21:30:55 4: Txt2Talk: Verwende ESpeak Resource zur TTS-Generierung
2021.03.28 21:30:55 4: Txt2Talk:sudo espeak -vde+f3 -k5 -s150 "World" -w "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav"
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
2021.03.28 21:30:55 4: Txt2Talk:lame "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav" "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3"
System error.
Could not open sound file "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav".
Could not find "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav".
Can't init infile 'cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav'
2021.03.28 21:30:55 4: Txt2Talk: Bearbeite jetzt den Text: World
2021.03.28 21:30:55 4: Txt2Talk: Verwende ESpeak Resource zur TTS-Generierung
2021.03.28 21:30:55 4: Txt2Talk:sudo espeak -vde+f3 -k5 -s150 "World" -w "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav"
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
2021.03.28 21:30:55 4: Txt2Talk:lame "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav" "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3"
System error.
Could not open sound file "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav".
Could not find "cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav".
Can't init infile 'cache/9e5361ec6eaee7c10b86f9b5d3e82253.mp3.wav'
2021.03.28 21:30:55 4: Txt2Talk: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.

Otto123

Zitatsudo espeak
It seems, that you will use the espeak and the Modul is'nt properly configured.
Could you provide the output from:
list Txt2Talk
without any personal informations like Keys and passwords ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

pldemon

Zitat von: PNinBB am 07 März 2021, 10:02:16
Guten Morgen,
Ich habe gestern 'Text2Speech' installiert und nach einigen kleinen Problemchen läuft es auch wie erwartet.
Nun bin ich gerade - mehr zufällig und unabsichtlich - auf die Schaltfläche 'Set ... tts' gekommen und das Eingabefeld für den Text war leer.
Ergebnis: FHEM stürzt ab; Meldung im Logfile:

Can't locate object method "name" via package "Empty string, empty guess" (perhaps you forgot to load "Empty string, empty guess"?) at ./FHEM/98_Text2Speech.pm line 610.

Zugegeben, es ist nicht die normale Betriebsweise, aber vielleicht hilft diese Erfahrung, es noch stabiler zu machen.
Mit gefülltem Eingabefeld funktioniert es natürlich.
Die Module, die in https://wiki.fhem.de/wiki/Text2Speech aufgeführt sind, sind installiert und auf dem neuesten Stand.
Aber auf jeden Fall: Danke an die 'Macher'!
Peter
Ergänzung:
Mit 'verbose 5' für diesen Fall kommen keinerlei weitere Einträge !

Hallo,

siehe: https://forum.fhem.de/index.php/topic,119236.msg1136542.html
bzw: https://forum.fhem.de/index.php/topic,119272.msg1136988.html

Cheers,
Mirko

mgmino

I can run espeak and mplayer from the Ubuntu command line successfully. Neither command will run within fhem e.g. "espeak 'Hello World' ". I am inclined to wrap this espeak function in a separate script and call it via httpmod. If I can help debug the module I will continue to provide feedback. The results of the list command:

Internals:
   ALSADEVICE default
   CFGFN     
   DEF        default
   FUUID      60610c0d-f33f-13e5-b8c8-e5a87fea45154293
   MODE       DIRECT
   NAME       Txt2Talk
   NR         44
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     100
   READINGS:
     2021-03-28 21:26:30   duration        1
     2021-03-28 21:26:30   endTime         00:00:00
     2021-03-28 22:17:52   lastFilename    cache/9142fd5238e818e089933765eb6be41e.mp3
     2021-03-28 22:17:52   playing         0
   helper:
     Text2Speech:
Attributes:
   TTS_Language English-US
   TTS_MplayerCall /usr/bin/mplayer
   TTS_Ressource ESpeak
   room       admin
   verbose    4

Otto123

#1122
Sorry I am not familiar with espeak.
But some basics:
You have tried with "standard" google voice?
fhem is member of audio?
test FHEM commandline
{qx(groups fhem)}
set the group
sudo gpasswd -a fhem audio
If you want to make a simple test of google voice: delete this attribute
   TTS_Ressource ESpeak
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mgmino

Thank you Otto123  :) Works great with Google Voice!

Phiolin

#1124
Zitat von: Ingo298 am 24 Januar 2020, 10:24:28
Wollte gern auf Amazon Polly umstellen. beim Einstellen stürtzt Fhem jedoch ab. Im Log

Can't locate object method "my_home" via package "File::HomeDir" at ./FHEM/98_Text2Speech.pm line 326

das Modul "File::HomeDir" ist bereits in der neusten Version installiert.

pi@raspberrypi:~ $ sudo apt-get install libfile-homedir-perl
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
libfile-homedir-perl ist schon die neueste Version (1.004-1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.


was mache ich falsch ??

Hat das mittlerweile mal jemand zuverlässig gelöst? Habe gerade mal wieder Polly ausprobiert und FHEM stürzt leider immer noch mit der o.g. Meldung ab.

Und ist bei noch jemandem neuerdings die Google Translate Stimme "anders"? Die haben da doch was verstellt... die neue? Stimme klingt grausam...