99_myUtils.pm - warten bis fhem befehl fertig ist

Begonnen von Tyraldur, 29 Dezember 2018, 17:38:25

Vorheriges Thema - Nächstes Thema

Tyraldur

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?

Jamo

Ja,
Zeile 3,4,5 in eine eigene sub , dann diese sub mit einem sleep davor aufrufen.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

KernSani

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.



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Jamo

Wenn man die sub innerhalb eines fhem befehls aufruft, steht fhem nicht, also :
fhem("sleep 1; {subxyz()}")
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence