FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: chem am 05 Juni 2017, 21:52:28

Titel: fhem "sleep $sleepTime; { $cmd }"; (gelöst)
Beitrag von: chem am 05 Juni 2017, 21:52:28
Ich möchte ein Perl command mit sleep verzögern, damit es mit anderen FHEM commands die auch über sleep verzögert sind synchron ausgeführt wird.

Dabei möchte ich FHEM ungern blockieren, allerdings gibt die im Betreff gegebene Anweisung

fhem "sleep $sleepTime; { $cmd }";
die Fehlermeldung:
WARNING: sleep without additional commands is deprecated and blocks FHEM

Das funktioniert zwar, aber ich fürchte FHEM ist da blockiert?

Welche andere Lösung gibt es das $cmd um genau $sleepTime verzögert zu starten?
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: CoolTux am 05 Juni 2017, 22:01:59
Was ist denn $cmd ? Wenn es auch ein FHEM Befehl ist nimm die { } weg.
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: chem am 06 Juni 2017, 12:47:39
$cmd ist ein perl befehl, daher die Klammern..
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: dev0 am 06 Juni 2017, 13:23:23
InternalTimer statt sleep verwenden.
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: chem am 06 Juni 2017, 13:48:11
Ich habe gerade das Forum nach InternalTimer durchsucht, ausser diesem Thread nichts gefunden. :(

Ich denke mitlerweile das ich für die Perl commands ein at nehmen sollte. Muss dann meine SleepTime entsprechend umrechnen.
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: CoolTux am 06 Juni 2017, 14:04:15
InternalTimer findest du in der DevelooerGuide
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: CQuadrat am 06 Juni 2017, 14:12:46
Ich habe so etwas mit variabler Sleep-Time auch bei mir eingebaut. Bis zum letzten (oder vorletztem) Update bekam ich auch immer die Logmeldung
WARNING: sleep without additional commands is deprecated and blocks FHEM
wenn meine Sleep-Zeit 0 war.

Mittlerweile habe ich diese Log-Meldung nicht mehr.


PS: Ob Dein Fhem blockiert, kannst Du prüfen, wenn Du eine hinreichend lange (aber nicht zu lange!!)  $sleepTime wählst und Du dann das Verhalten Deines Fhem beobachtest.
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: dev0 am 06 Juni 2017, 14:44:12
Zitat
Ich habe gerade das Forum nach InternalTimer durchsucht, ausser diesem Thread nichts gefunden.
Dann hast Du nicht auf der obersten Forumsebene gesucht oder Dich vertippt.

ungetestet:

InternalTimer($sleepTimer, sub(){eval $cmd}, undef);
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: chem am 06 Juni 2017, 21:33:03
Zitat von: CQuadrat am 06 Juni 2017, 14:12:46
Ich habe so etwas mit variabler Sleep-Time auch bei mir eingebaut. Bis zum letzten (oder vorletztem) Update bekam ich auch immer die Logmeldung
WARNING: sleep without additional commands is deprecated and blocks FHEM
wenn meine Sleep-Zeit 0 war.

Mittlerweile habe ich diese Log-Meldung nicht mehr.

Das war es, hatte initial ein sleep 0, jetzt starte ich mit 0.1 und keine Fehlermeldung mehr.

Vielen Dank für die Hilfe!
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: chem am 06 Juni 2017, 21:35:08
Zitat von: dev0 am 06 Juni 2017, 14:44:12
Dann hast Du nicht auf der obersten Forumsebene gesucht oder Dich vertippt.

ungetestet:

InternalTimer($sleepTimer, sub(){eval $cmd}, undef);


Ja, ich habs vergessen dass ich nach oben gehen muss für die Suche. Habe den InternalTimer auspropiert, funktioniert aber so nicht. Trotzdem vielen Dank für die Hilfe.
Titel: Antw:fhem "sleep $sleepTime; { $cmd }"; (gelöst)
Beitrag von: dev0 am 06 Juni 2017, 22:21:44
Du mußt zu $sleepTimer die aktuelle Zeit in Sekunden hinzu addieren, wenn Du das noch nicht gemacht hast: +gettimeofday()
Für detailiertere Hilfe müßtest Du mehr Code oder eine Fehlermeldung posten. Ich bin mir ziemlich sicher das das so funktioniert, auch ohne es getestet zu haben.
Titel: Antw:fhem "sleep $sleepTime; { $cmd }";
Beitrag von: CQuadrat am 07 Juni 2017, 12:37:00
Zitat von: chem am 06 Juni 2017, 21:33:03
Das war es, hatte initial ein sleep 0, jetzt starte ich mit 0.1 und keine Fehlermeldung mehr.

Wann hast Du denn das letzte Update gemacht? Ich habe die Fehler-/Log-Meldung nämlich nicht mehr.
Und dass bei
sleep 0; <irgendein Fhem-Befehl>
die Warnmeldung kommt und bei
sleep 1; <irgendein Fhem-Befehl>
nicht, war ja eher ein Bug (mit dem man leben konnte) in Fhem. Und dieser Bug ist - so wie ich es sehe - gefixt.