Mal wieder sleep, diesmal im Perl-Code

Begonnen von olwaldi, 12 September 2026, 09:10:05

Vorheriges Thema - Nächstes Thema

olwaldi

Ich muß eine Perl-Funktion zeitlich verzögert auslösen. Um fhem nicht zu blockieren, nutze ich fhem() zusammen mit {} - hier als minimales perl-Skript:
  ...;
  fhem("sleep 3; {qx(date)}");
  ...;
Das qx wird scheinbar nie aufgerufen. Mit doppelten ;; friert fhem komplett ein (nicht nur 3s). Eigentlich brauche ich nicht diese komplexe Verschachtelung. Oder muß ich den Perl InternalTimer nutzen?

Grüßle, Michael
 

Guybrush

wenn du eine Ausgabe sehen willst, das erfolgt bei qx() nicht. Das ;; funktioniert nicht, weil das sleep den nachfolgenden Befehl dann nicht mehr "sieht".
so ists richtig:
  fhem('sleep 3; { meineFunktion() }');

Wenn du eine eigene Funktion aufrufen willst, wäre aber die Nutzung von InternalTimer vorzuziehen:
  InternalTimer(gettimeofday() + 3, \&meineFunktion, $hash, 0);

olwaldi

Danke für die schnelle Antwort - bin mittlerweile bei InternalTimer
      my $nextTime = Time::HiRes::gettimeofday() + $wait;
      InternalTimer($nextTime, "EpsonPowerToggle", "", 0);
      $nextTime = Time::HiRes::gettimeofday() + $wait + 0.1;
      InternalTimer($nextTime, "EpsonPowerToggle", "", 0);

Bzgl. Rückgabe: qx(date) schreibt den Output entweder ins Log-Fenster oder in die Logdatei, hab' ich ausprobiert.

Grüßle, Michael