FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tyraldur am 29 Dezember 2018, 17:38:25

Titel: 99_myUtils.pm - warten bis fhem befehl fertig ist
Beitrag von: Tyraldur am 29 Dezember 2018, 17:38:25
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?
Titel: Antw:99_myUtils.pm - warten bis fhem befehl fertig ist
Beitrag von: Jamo am 29 Dezember 2018, 17:42:21
Ja,
Zeile 3,4,5 in eine eigene sub , dann diese sub mit einem sleep davor aufrufen.
Titel: Antw:99_myUtils.pm - warten bis fhem befehl fertig ist
Beitrag von: KernSani am 29 Dezember 2018, 17:43:37
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.



Titel: Antw:99_myUtils.pm - warten bis fhem befehl fertig ist
Beitrag von: CoolTux am 29 Dezember 2018, 17:48:11
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.
Titel: Antw:99_myUtils.pm - warten bis fhem befehl fertig ist
Beitrag von: Jamo am 29 Dezember 2018, 18:11:48
Wenn man die sub innerhalb eines fhem befehls aufruft, steht fhem nicht, also :
fhem("sleep 1; {subxyz()}")