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?
Was ist denn $cmd ? Wenn es auch ein FHEM Befehl ist nimm die { } weg.
$cmd ist ein perl befehl, daher die Klammern..
InternalTimer statt sleep verwenden.
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.
InternalTimer findest du in der DevelooerGuide
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.
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);
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!
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.
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.
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.