Hallo,
ich verwende folgende Möglichkeit um eine Wartezeit zwischen 2 Befehlen zu realisieren:
... define tmp_time at +00:00:01...
Die kleinste Wartezeit beträgt somit 1 Sekunde. Ich benötige jedoch kleinere Zeiten (200ms).
Gibt es eine Möglichkeit in Fhem einen Timer mit kürzeren Wartezeiten zu realisieren?
Ich glaube irgend wo gelesen zu haben dass es möglich ist, finde den Betrag aber nicht mehr.
Danke,
Laserbacke
Schaue Dir mal den FHEM Befehl sleep an.
Hallo CoolTux,
danke, werde ich mir anschauen. Ich war bisher der Meinung dass der Sleep Befehl Fhem ausbremst, ist aber wohl nur als Pearl Befehl der Fall.
Zitat von: laserbacke am 08 April 2017, 09:28:24
Hallo CoolTux,
danke, werde ich mir anschauen. Ich war bisher der Meinung dass der Sleep Befehl Fhem ausbremst, ist aber wohl nur als Pearl Befehl der Fall.
Pearl ist ein Elektronik Versand und Perl ist eine Programmiersprache ;)
Zitat von: laserbacke am 08 April 2017, 09:28:24
dass der Sleep Befehl Fhem ausbremst, ist aber wohl nur als Pearl Befehl der Fall.
- der Befehl in FHEM heißt sleep, nicht Sleep
- FHEM heißt FHEM, nicht Fhem
- Pearl heißt Perl, nicht Pearl (ok, hatten wir schon...)
- in Perl ist sleep gar kein Befehl, sondern eine Funktion
8)
Hi,
was man bei solchen Anforderungen auch immer wieder erwähnen muss: FHEM ist single-threaded und hat keine Interrupts oder so etwas. D.h. ein Timer (egal ob at, sleep oder InternalTimer) wartet immer mindestens die angegebene Zeit. Wenn irgend etwas anderes dazwischenkommt, dann wartet der Timer entsprechend länger. Das bedeutet, dass man sich auf die Genauigkeit auf keinen Fall verlassen kann. Deshalb ist ein at oder sleep unter einer Sekunde selten sinnvoll.
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 08 April 2017, 10:01:34
Hi,
was man bei solchen Anforderungen auch immer wieder erwähnen muss: FHEM ist single-threaded und hat keine Interrupts oder so etwas. D.h. ein Timer (egal ob at, sleep oder InternalTimer) wartet immer mindestens die angegebene Zeit. Wenn irgend etwas anderes dazwischenkommt, dann wartet der Timer entsprechend länger. Das bedeutet, dass man sich auf die Genauigkeit auf keinen Fall verlassen kann. Deshalb ist ein at oder sleep unter einer Sekunde selten sinnvoll.
Gruß,
Thorsten
Das habe ich gestern auch gelernt :)
@laserbacke: verrätst du uns was das für eine Anwendung ist? es errinert mich daran, dass ich mal versuch hat mit einem itach eine harmony nachzubilden :D
Hallo,
ok ich hab's kapiert hier wird Wert auf richtige Schreibweise gelegt. :)
Igami,
ich möchte in Tablet-Ui mittels IRSEND Befehle an FHEM schicken. Hier sind Wartezeiten von 1s oft zu lange, da würden Zeiten von ca. 200ms ausreichen.
Ob das genau 200ms sind spielt dabei keine Rolle.
Mit folgendem 'Befehl' in Tablet-UI funktioniert das
data-fhem-cmd='"irsend SEND_ONCE sky KEY_1"; define tmp_time1 at +00:00:01 "irsend SEND_ONCE sky KEY_2" ; define tmp_time2 at +00:00:02 "irsend SEND_ONCE sky KEY_3" ; define tmp_time3 at +00:00:03 "irsend SEND_ONCE sky KEY_4"' class="top-space-2x">Send Pin</div>
Mit sleep habe ich folgendes versucht:
data-fhem-cmd= '"irsend SEND_ONCE sky KEY_6" ; sleep 0.2; "irsend SEND_ONCE sky KEY_6"; sleep 0.4; "irsend SEND_ONCE sky KEY_OK"'></div>
Es wird hiermit 'manchmal' richtig ausgeführt (66). Sporadisch aber sehr oft 6666 oder 666 oder auch nur 6...
Ich denke, so wie ich das geschrieben habe passt etwas nicht. Sobald ich Zeit habe werde ich das 'Problem' noch mal angehen.
Hi,
FHEM schickt Systembefehle, die mit "" abgeschickt werden in den Hintergrund. Es könnte sein, dass Dir das Probleme bereitet, da dann die Reihenfolge nicht wirklich garantiert ist. Vielleicht versuchst Du mal, das ganze als Linux-Kommando abzusetzen.
data-fhem-cmd= '"irsend SEND_ONCE sky KEY_6; sleep 0.2; irsend SEND_ONCE sky KEY_6; sleep 0.4; irsend SEND_ONCE sky KEY_OK"'
Je nach Linux (oder shell) Version kann das funktionieren. Ich bin mir nicht ganz sicher, ob alle Linuxe das sleep mit Kommazahlen können, aber ein Versuch ist es wert.
Gruß,
Thorsten
Hallo Thorsten,
danke für den Tipp. Wenn ich das so eingebe erhalte ich im FHEM Logfile folgenden Eintrag:
After sleep: Unknown command irsend, try help.
Ich verwende das Modul remotecontrol in FHEM nicht.
Gruß
Elmar
Hallo
Zitat von: Thorsten Pferdekaemper am 08 April 2017, 10:01:34
... FHEM ist single-threaded und hat keine Interrupts oder so etwas. ...
Dazu habe ich Frage:
Wenn ich innerhalb einer Perl Funktion, die durch ein "at" getriggert wurde beispielsweise ein Dummy setzte, das seinerseits ein "notify" triggert, dann stelle ich fest, dass sofort nach Setzen des Dummy die at-Handler Funktion unterbrochen wird und die Handlerfunktion des "notifys" ausgeführt wird. Danach wird der at-Handler weiter abgearbeitet.
Ich habe das als Interrupt interpretiert. Ist dem nicht so?
Grüße
James
Zitat von: laserbacke am 08 April 2017, 15:34:12After sleep: Unknown command irsend, try help.
Jetzt kann ich auch nur mehr oder weniger raten. Mach mal doppelte ";", also so:
data-fhem-cmd= '"irsend SEND_ONCE sky KEY_6;; sleep 0.2;; irsend SEND_ONCE sky KEY_6;; sleep 0.4;; irsend SEND_ONCE sky KEY_OK"'
Zitat von: RadioJames am 08 April 2017, 16:34:52Wenn ich innerhalb einer Perl Funktion, die durch ein "at" getriggert wurde beispielsweise ein Dummy setzte, das seinerseits ein "notify" triggert, dann stelle ich fest, dass sofort nach Setzen des Dummy die at-Handler Funktion unterbrochen wird und die Handlerfunktion des "notifys" ausgeführt wird. Danach wird der at-Handler weiter abgearbeitet.
Ich habe das als Interrupt interpretiert. Ist dem nicht so?
Nein, dem ist nicht so. Es ist einfach so, dass das Triggern des notify direkt beim Setzen des Readings (einen "Dummy setzen" setzt auch ein Reading) passiert. Was soll daran ein Interrupt sein?
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 08 April 2017, 18:56:11
... Was soll daran ein Interrupt sein?
Danke.
Ist ja gut, ich glaube dir ja. Wie sollte ich allerdings ohne Kenntnis über den genauen Aufbau von FHEM beurteilen können, ob der Aufruf eine Sub-Funktion des Setzens des Dummys ist oder durch einen Interrupt ausgelöst wird? Daher habe ich ja auch nachgefragt.
Ich habe jetzt ja schon fast Angst, du willst mir für die "dumme Frage" auch noch eine reinhauen :-(
Zitat von: RadioJames am 08 April 2017, 19:37:25
Ich habe jetzt ja schon fast Angst, du willst mir für die "dumme Frage" auch noch eine reinhauen :-(
Das tut mir leid, war absolut nicht so gemeint. Ich selbst wäre nur nie auf die Idee gekommen, dass das etwas mit Interrupts zu tun haben könnte und wollte eben meinerseits nachfragen, wo jetzt hier genau unsere unterschiedlichen Auffassungen herkommen. Wenn einem so gar nicht klar ist, was sich der andere dabei denken könnte, dann ist es schwierig, dazu etwas zu erklären.
Gruß,
Thorsten
War jetzt auch nicht so von mir gemeint, hab vielleicht etwas empfindlich reagiert.
Würde mir FHEM gerne näher anschauen, bekomme es aber leider zeitlich nicht hin.
Grüße
James
Hallo RadioJames
Zum Thema Readings und Events. Was Thorsten gesagt hat ist nicht falsch und für den Anfängerbereich völlig ausreichend. Wenn Du Dich etwas für Interna von FHEM interessierst dann lass es mich etwas genauer erklären.
Nicht ein Reading löst ein Notify aus, sondern ein Event. Das setzen eines Readings kann ein Event erzeugen und ein Notify kann auf dieses Event triggern.
Readings können auch gesetzt werden ohne ein Event zu erzeugen, oder es kann Events geben ohne das setzen eines Notifys.
Grüße
Hallo Thorsten,
gut geraten. Der Tipp mit dem doppelten ';' passt. :)
Vielen Dank.
Gruß
Elmar