Neues Modul: Text2Speech

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

Vorheriges Thema - Nächstes Thema

td

Hallo zusammen,

für gesprochenen Text funktioniert text2speech bei mir einwandfrei, nur werden mp3-Dateien nicht abgespielt.
Ich habe ein Template "whistle" definiert und die entsprechende Datei unter "cache/templates" angelegt.


olymp:/opt/fhem # ll /opt/fhem/cache/templates/
total 56
-rw-r--r-- 1 root root 56673 Aug  9  2011 tos_intercom_whistle.mp3


whistle" ist wie folgt definiert:

define wstts Text2Speech none
attr wstts TTS_UseMP3Wrap 1
set wstts volume 100
attr wstts TTS_FileMapping whistle:tos_intercom_whistle.mp3


Bei Aufruf mittels "set wstts tts :whistle:" wird gesprochen: "templates whistle".

Das log ergibt:

2015.03.12 18:17:05 4: wstts: Angabe einer direkten MP3-Datei gefunden:  whistle => FileTpl_1426180625_#0
2015.03.12 18:17:05 4: wstts: Auflistung der Textbausteine nach Aufbereitung:
2015.03.12 18:17:05 4: wstts: 0 => templates/whistle
2015.03.12 18:17:05 4: Text2Speech: Bearbeite jetzt den Text: templates/whistle
2015.03.12 18:17:05 4: Text2Speech: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: fdd04ad42c1a70d3516c5e370ad6f27c.mp3
2015.03.12 18:17:05 4: Text2Speech: 'cache/fdd04ad42c1a70d3516c5e370ad6f27c.mp3' gefunden, kein Download
2015.03.12 18:17:05 4: Text2Speech_CalcMP3Duration: cache/fdd04ad42c1a70d3516c5e370ad6f27c.mp3 hat eine Länge von 2 Sekunden.
2015.03.12 18:17:05 4: Text2Speech_readingsSingleUpdateByName: Dev:wstts Reading:duration Val:2
2015.03.12 18:17:05 4: Text2Speech:sudo /usr/bin/mplayer  -really-quiet -nolirc -noconsolecontrols -softvol -softvol-max 100 -volume 100 cache/fdd04ad42c1a70d3516c5e370ad6f27c.mp3
2015.03.12 18:17:05 4: Text2Speech_readingsSingleUpdateByName: Dev:wstts Reading:endTime Val:00:00:00


Rufe ich mit "set wstts tts :tos_intercom_whistle.mp3:" auf, wird die Datei abgespielt.

Das Template wird also als solches gar nicht erkannt.

Wer weiß Rat?

Vielen Dank im Voraus!
td

Tobias

wie vermutet, deine Rechte passen nicht.
Siehe ersten Code: root:root
Dein FHEM hat keine Zugriffsrechte darauf....
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

td

Hallo Tobias,

vielen Dank für Deine Rückmeldung.
fhem läuft bei mir unter root.
Auch arbeitet ja ein direkter Aufruf per "set wstts tts :tos_intercom_whistle.mp3:" wie gewünscht.

Gruß
td

Tobias

hab es nachvollziehen können. Irgendetwas ist bei den letzten Änderungen kaputt gegangen.....

Was aber geht, als workarround:
set Mytts tts whistle

Also Angabe des Shortcuts ohne Doppelpunkte
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

mrbreil

Hallo zusammen,

erstmal erkläre ich was ich vorhabe.
Ich setze in einem anderen Modul immer das Volumen herunter bevor Text2Speech eine "Durchsage" macht, funktioniert einwandfrei.
Das setzen der ursprünglichen Lautstärke funktioniert auch mit einem at Befehl. Leider ist der Zeitversatz  fix eingestellt und manchmal ist die Ansage einfach zu lang.
Jetzt gibt es doch die zwei Readings duration und endTime.

endTime bleibt immer auf 00:00:00 stehen.
duration ändert sich mehrmals, ich denke durch das eigenständige splitten der Dateien bei Punkten, Kommas und den Wort "und".

Kann ich die Länge der einzelnen Dateien vorher irgendwie zusammen rechnen lassen, um die Gesamtzeit nutzen zu können?

Hoffe ich habe verständlich beschrieben warum es mir geht.

Invers

Ich möchte gerne bequem die Lautstärke auslesen können. Dafür fehlt jedoch das Reading volume. Somit muss es bei Internals abgefragt werden, was sehr umständlich ist.

Wäre es machbar, das Reading zur Verfügung zur stellen?
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Tobias

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

TeeVau

Zitat von: mrbreil am 15 März 2015, 15:40:58
Hallo zusammen,

erstmal erkläre ich was ich vorhabe.
Ich setze in einem anderen Modul immer das Volumen herunter bevor Text2Speech eine "Durchsage" macht, funktioniert einwandfrei.
Das setzen der ursprünglichen Lautstärke funktioniert auch mit einem at Befehl. Leider ist der Zeitversatz  fix eingestellt und manchmal ist die Ansage einfach zu lang.
Jetzt gibt es doch die zwei Readings duration und endTime.

endTime bleibt immer auf 00:00:00 stehen.
duration ändert sich mehrmals, ich denke durch das eigenständige splitten der Dateien bei Punkten, Kommas und den Wort "und".

Kann ich die Länge der einzelnen Dateien vorher irgendwie zusammen rechnen lassen, um die Gesamtzeit nutzen zu können?

Hoffe ich habe verständlich beschrieben warum es mir geht.

Hallo,
genau dafür habe ich den Patch gemacht und die Readings zusätzlich eingebaut. endTime ist gar nicht wirklich eingebaut, fällt mir gerade ein :-) Das ist immer 00:00:00
Wie du schon festgestellt hast, wird das Reading Duration öfter neu gesetzt, nämlich für jede MP3 die abgespielt wird. Und aus diversen Gründen teilt das Modul den Text in mehrere Anfragen auf, die dann auch mehrere MP3s ergeben. Diese werden nacheinander abgespielt, was also auch mehrere Readings erzeugt.
Wenn du MP3Wrap verwendest wird beim 2. mal abspielen des selben Text nur eine MP3 Datei erzeugt. Das hilft aber nicht immer.

Ich habe das bei mir so gelöst:

  • Notify auf Duration = etwas wird per tts abgespielt
  • Ein at wird erstellt mit Zeit aus duration plus 2 Sekunden
  • Ist schon ein at vorhanden, wird dieses einfach it der neuen duration plus 2 sekunden aktualisiert
  • Das at schaltet den Player wieder ein

Funktioniert bei mir im Bad wunderbar:
MyTTS:duration:.* {
  my $devMPD = "myMPD";
  my $stateMPD = Value("$devMPD");
  my $atTimestamp = time_num2str($EVTPART1+2);
  my $atName = "at_" . $devMPD . "_play";

  if (!$defs{$atName}) {
    fhem("define $atName at +" . $atTimestamp . " set $devMPD play");
  } else {
    fhem("modify $atName +" . $atTimestamp);
  }
 
}


Pausieren erledige ich mit folgendem notify:
MyTTS:tts.* {
  my $devMPD = "myMPD";
  my $stateMPD = Value("$devMPD");

  if ($stateMPD eq "play") {
    fhem("set $devMPD stop");
  }
}


Kann man auch alles in einem notify erledigen, ich bin aber faul und bleibe bei dem gestückelten Werk :-)
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

setis66

Hallo,
Ich bin so ziemlich neu Was Fhem An Geht Ich habe seit Kurzem Alle von der Fritz box wo ich ein CLU Hatte auf einen Raspberry Pi installiert und jetzt wollte mich mal fragen wie ich mein Lampen und Steckdosen Zum Reden Bekomme ich habe soweit alles installiert und ich bekomme bei fem. auch eine sprachausgebe aus dem Raspberry . Wie ich was in der fehm config schreiben muss? Das wenn ich die Lampe anschalte und es mir antwortet.
Es wäre nett wenn mir mal einer was schreiben Könnte was und wo ich was reinschreiben soll.
Am besten ein kompletten Code So Wie define Spiegel FS20 05a0 00
attr Spiegel IODev CUL_0 wo die tts rein muss und alles andere.
Danke

Pfriemler

Ich glaube DU brauchst einfach noch ein bisschen Einarbeitungszeit, dann wird sich alles klären...

Versuche genau zu sein - wenn Du in Deinen Geräten genausoviel Bechstaben verwuchselst wie in Deinen Beiträgen, wird es auch für uns schwierig...
Weiterhin werfe ich mich in die Riege derer, die meinen, dass man in die fhem.cfg niemals etwas hineinschreiben soll, sondern stattdessen alles sauber über die Kommandozeile und das Webinterface definieren und DANN speichern.

Wenn Du eine Lampe schaltest, sich also deren Zustand ändert, musst Du das z.B. mit einem notify abfangen und darin die Sprachausgabe definieren. Das hat bei der Definition des Gerätes nichts verloren, bzw. es funktioniert nicht.
Im Einsteiger-Doc und sicher auch im Wiki ist Notify ausreichend beschrieben, als Aktionscode setzt Du den passenden Sprechbefehl hinein. Für jedes Ereignis ein eigenes Notify zu kreieren wird aber aufwändig und schwer zu warten. Wie geschickt man viele Lampen und Steckdosen mit einem Notify "aussprechen" lassen kann, hängt nicht zuletzt von Deiner Namensgebung ab: ein gemeinsamer Präfix für alle "auszusprechenden" Geräte wäre etwa sehr hilfreich. So ließen sich Zustandsänderungen von "lampSpiegel" und "lampBadezimmer" mit einem gemeinsamen Filter "lamp.*" abfangen. Welches Gerät dann welchen Zustand einnimmt, wird dem Notify übermittelt und kann entsprechend "ausgesprochen" werden.
Soviel als Grundidee. Wir könnten Dir hier auch perfekte Lösungen bringen, aber glaub mir: Wenn Du es allein schaffst, lernst Du mehr. Fang klein an. Viel Erfolg!



"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

setis66

Hallo,
Danke für die Antwort bin schon ein wenig weiter gekommen.
Es wäre mir ja lieb du könnte mir wenigstens mal ein Code schreiben.
So wie Spiegel On habe ich ja schon alles hinbekommen, Mit taske Und AutoVoice Und 4 Tablets und 3 Handys Kann ich auch schon alles Super mit Sprache steuern, es wäre natürlich gut wenn ich Spiegel on sage das ich eine Antwort bekomme.
Ein kleiner Code wie man dat macht wäre nicht schlecht.
Danke

Pfriemler

@setis66: Deine Fragestellung wird hier offtopic, der Thread dreht sich um die Feinheiten des tts-Sprachmoduls auf höherer Ebene. Ich schlage Dir vor, Du beginnst einen neuen Thread in "Anfängerfragen" (denn um sowas geht es bei der erstmaligen "Inbetriebnahme" eines Notifys derart schon). Poste dort bitte relativ genau, WAS Du erreichen möchtest, und benenne konkret zumindest Beispiele der zu steuernden und/oder zu überwachenden Geräte. Ob Du eine akustische Quittung nur bei einen Sprachbefehl haben möchtest (dann würde ich die Sprachausgabe bei der Sprachauswertung und der Steuerung des Schaltempfängers ansiedeln) oder ob es bei jeder Schalthandlung, auch durch Fernbedienungen etc., eine Ansage geben soll (dann per Notify auf den Schaltzustand), sind nämlich zwei verschiedene Sachen.
Ich werde hier nicht mehr weiter antworten, um den Thread nicht unnötig in die falsche Richtung aufzublähen. Wenn tts schließlich nicht genau das macht, was es sprechen soll, sind wir hier wieder richtig...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Invers

Zitat von: Invers am 15 März 2015, 18:44:06
Ich möchte gerne bequem die Lautstärke auslesen können. Dafür fehlt jedoch das Reading volume. Somit muss es bei Internals abgefragt werden, was sehr umständlich ist.

Wäre es machbar, das Reading zur Verfügung zur stellen?


Ich habe leider noch gar keine Antwort bekommen.
Ist das wirklich so aufwändig zu machen? Das Intrernal VOLUME existiert doch bereits, volume kann ja auch gesetzt werden.
Wäre für eine Antwort bzw. Änderung des Moduls dankbar.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Tobias

Zitat von: Invers am 19 März 2015, 00:15:13

Ich habe leider noch gar keine Antwort bekommen.
Ist das wirklich so aufwändig zu machen? Das Intrernal VOLUME existiert doch bereits, volume kann ja auch gesetzt werden.
Wäre für eine Antwort bzw. Änderung des Moduls dankbar.

Kommt noch mit rein! :)
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

Invers

Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2