Fhem Timer kleiner 1 Sekunde

Begonnen von laserbacke, 07 April 2017, 19:09:36

Vorheriges Thema - Nächstes Thema

laserbacke

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

CoolTux

Schaue Dir mal den FHEM Befehl sleep an.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

laserbacke

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.


igami

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 ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Thorsten Pferdekaemper

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
FUIP

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

laserbacke

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.




Thorsten Pferdekaemper

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
FUIP

laserbacke

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

RadioJames

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

There are 10 kind of people. Those who understand binary and those who don't.

Thorsten Pferdekaemper

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
FUIP

RadioJames

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 :-(
There are 10 kind of people. Those who understand binary and those who don't.

Thorsten Pferdekaemper

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
FUIP

RadioJames

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
There are 10 kind of people. Those who understand binary and those who don't.