FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: olwaldi am 12 September 2026, 09:10:05

Titel: Mal wieder sleep, diesmal im Perl-Code
Beitrag von: olwaldi am 12 September 2026, 09:10:05
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
 
Titel: Aw: Mal wieder sleep, diesmal im Perl-Code
Beitrag von: Guybrush am 12 September 2026, 09:35:59
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);
Titel: Aw: Mal wieder sleep, diesmal im Perl-Code
Beitrag von: olwaldi am 12 September 2026, 09:59:42
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