Moin,
bin ein wenig am spielen. Per Telegram sende ich mir eine Nachricht an den Bot, diese soll von Text2Speech umgewandelt werden und vom Telegrambot zurückgesendet werden. (Ja, kein wirklicher usecase, aber müsste doch machbar sein)
Log(0,"Nachricht: $Nachricht");
fhem("set myT2Speech tts $Nachricht");
my $file = ReadingsVal("myT2Speech","lastFilename",0);
Log(0, "File: $file");
fhem("set $TelegramDevice sendVoice $file");
Das Problem ist, dass die 2te Zeile (ReadingVal) zu schnell abgearbeitet wird, sprich mir noch das File von der vorherigen Nachricht zurückgegeben wird. Passiert so leider auch, wenn ich ein sleep oder ein fhem sleep dazwischen lege.
Im Log sieht es dann so aus:
2018.12.29 17:14:06 0: Nachricht: einer noch
2018.12.29 17:14:06 4: myT2Speech: Auflistung der Textbausteine nach Aufbereitung:
2018.12.29 17:14:06 4: myT2Speech: 0 => einer noch
2018.12.29 17:14:06 0: File: cache/8d32f5bd071bb249669868238bd1a147.mp3
2018.12.29 17:14:06 4: Verwende TTS Spracheinstellung: Deutsch
2018.12.29 17:14:06 4: Text2Speech: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: ae6a3cd04323cc4b45bc7132746228db.mp3
Hat da jemand ne Idee für mich?
Ja,
Zeile 3,4,5 in eine eigene sub , dann diese sub mit einem sleep davor aufrufen.
Spontan würde ich sagen: Teile es auf. T2Speech erzeugt vermutlich ein Event, wenn der neue Filename zur Verfügung steht. Auf dieses kannst du reagieren um es zurück zu senden.
Zitat von: inoma am 29 Dezember 2018, 17:42:21
Ja,
Zeile 3,4,5 in eine eigene sub , dann diese sub mit einem sleep davor aufrufen.
Und schon steht das FHEM so lange das sleep geht.
Wie bereits korrekt erwähnt lieber auf ein Event reagieren oder zur Not die Idee mit der Sub welche dann aber über die Funktion InternalTimer aufgerufen werden sollte.
Wenn man die sub innerhalb eines fhem befehls aufruft, steht fhem nicht, also :
fhem("sleep 1; {subxyz()}")