Alternative zu InternalTimer

Begonnen von neumann, 02 Juni 2017, 18:21:25

Vorheriges Thema - Nächstes Thema

neumann

Hallo zusammen!

Ich brauche Hilfe dabei, wie ich am besten eine Funktion zeitversetzt ausführen kann, zeitversetzt um etwa 100 ms mit einer gewünschten Genauigkeit von +- 20 ms.
Wenn ich den InternalTimer verwende, funktioniert dies leider sehr unzuverlässig und wird teilweise erst nach mehreren Sekunden ausgeführt.
Der normale sleep funktioniert natürlich, ist jedoch blockierend und deshalb sehr suboptimal.

Habt ihr eine Idee? Danke!

LG
Oskar
Modulentwickler
- Spotify #72490
- Nello #75127

zap

Ein so exaktes Timing dürfte m.E. nicht realisierbar sein. In FHEM läuft ja alles in einer großen Schleife. Daher auch die von Dir beobachtete Unschärfe bei Internal Timer.

Du könntest natürlich alles in einen separaten Prozess / Thread auslagern. Allerdings benötigt das Starten eines Prozesses / Threads auch wieder Zeit.

Mit usleep kannst Du natürlich exakt 100ms warten. Das Blockieren für diese Zeit dürfte eigentlich kaum bemerkbar sein.

2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

herrmannj

Hallo Oskar,

dazu musst Du die Funktionen in einen eigenen Prozess auslagern der wiederum eigene timer einsetzt. Das addiert allerdings Komplexität da Du mit dem Hauptprozess kommunizieren musst. FHEM bietet ein klein wenig Support (subprozess.pm etc)

Mit dem Einsatz von sleep wirst Du Teil des Problems.

Wenn Du jetzt schon Verzögerungen von mehreren Sekunden feststellst hast Du ohnehin schon massiv Probleme, sprich Du setzt irgendwas ein was schon massiv stört. Test: Nimm Dir ein jungfräuliches fhem in einer dev Umgebung und lasse internal timer laufen. Du wirst sehen das Du bei +/- ganz wenig Millisekunden landest.

vg
joerg