Zeit - Genauigkeit in fhem - Wie besser als 1 Sekunde?

Begonnen von Elektrolurch, 16 Juni 2014, 10:07:18

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo,

habe folgendes Problem:
Ich benutze manche fs20 - Schalter, in dem sie nicht direkt das/die Geräte ansteuern, sondern das der request über fhem läuft. Da ich zwei Antennen habe, kommt das event des Schalters auch zweimal an.
Das wäre nun kein so großes Problem:

my $dt = time() - time_str2num(OldTimestamp('device'));
return undef if($dt <= 1);

Somit wird das zweite Funksignal der Antennen ignoriert.
Nun möchte ich aber auch, bzw. habe das auch schon so im Betrieb, den "Doppelklick" am Schalter zulassen, d.h. kurzes zweimaliges Drücken des Schalters tut dann was anderes, als einfaches Drücken.
Mit der obigen Abfrage darf das zweite Drücken aber erst nach mind. 2 Sekunden kommen, sonst wird es ignoriert. 2 Sekunden ist aber für einen "Doppelklick" zu lang.
Der zeitliche Abstand der beiden Funksignale ist aber nur (sicher) im Millisekunden-Bereich.
fhem kennt aber als kleinste Zeiteinheit nur 1 Sekunde.

Nun meine Frage:
Ich meine, dass ich irgendwo vor einiger Zeit mal gelesen habe, dass man fhem so umstellen kann, dass es auch 0.1 Sekunden als minimale Zeit kann.
Aber ich kann es beim besten Suchen (bevor ich gleich hier wieder den Verweis auf "Such mal schön" bekomme), nicht finden.
Wenn dies möglich ist, auf welche Funktionen wirkt sich dies dann aus?
Alle Timestamps, auch time()?

Gruß


Elektrolurch


configDB und Windows befreite Zone!

der-Lolo

es gibt das attribut mseclog - ich glaube das wirkt sich aber nur auf filelog aus...

Elektrolurch

Wahrscheinlich hatte ich das auch irgendwo gesehen...
...daraus folgt aber, dass es intern wohl Millisekunden gibt. Nur wie kommt man da ran?
configDB und Windows befreite Zone!

betateilchen

Zitat von: Elektrolurch am 16 Juni 2014, 10:07:18
Wenn dies möglich ist, auf welche Funktionen wirkt sich dies dann aus?
Alle Timestamps, auch time()?

time liefert doch timestamps (in Sekunden!) ohnehin mit 5 Nachkommastellen, das sollte normalerweise ausreichen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

ob time() nachkomma stellen liefert hängt von der plattform (und der perl version?) ab. auf dem mac liefert es z.b. keine nackomma stellen. dokumentiert ist nur das es die anzahl der sekunden liefert.

eine höhere auflösung bekommst du z.b. mit:
my ($seconds, $microseconds) = gettimeofday();das ist auch was mseclog verwendet.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Elektrolurch

Okay:
my ($seconds, $microseconds) = gettimeofday();
das ist auch was mseclog verwendet.

aber was ist mit ReadingsTimestamp und OldTimestamp?

Ich müsste dann ja eigene Zeitstempel als Readings hinterlegen, wenn die o.g. Funktionen weiterhin nur Sekunden liefern.
configDB und Windows befreite Zone!

betateilchen

Zitat von: Elektrolurch am 16 Juni 2014, 13:28:13
Ich müsste dann ja eigene Zeitstempel als Readings hinterlegen, wenn die o.g. Funktionen weiterhin nur Sekunden liefern.

so siehts aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

schau dir mal sequence an. das kommt auch mit timeouts von < 1 sekunde zurecht.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

P.A.Trick

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

epsrw1

use Time::HiRes; ?
man müßte mal in den code reinschauen in welchem kontext time aufgerufen wird, ob die nachkommastellen nicht ohnehin ignoriert werden.
habe leider weder ahnung vom fraglichen modul noch testhardware zur verfügung. beim code helfe ich gerne ;)
florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel