FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hmtec99 am 31 Januar 2016, 17:31:32

Titel: Subtraktion von 2 UserReadings mit time() > Ergebnis Schrott
Beitrag von: hmtec99 am 31 Januar 2016, 17:31:32
Hallo Leute,

bin am Ende mit meiner Weisheit. Ich vermute ein grundsätzliches Verständnisproblem meinerseits was die Trennzeichen der Zeitfunktion betrifft.

Folgende Definition von UserReadings eines Devices

start_pulse:reading:.on { sprintf("%.6f", time())},
stop_pulse:reading:.off { sprintf("%.6f", time())},
pulse_distance:reading:.off { sprintf("%.6f" , {ReadingsVal("US1_Echo","stop_pulse",0)} - {ReadingsVal("US1_Echo","start_pulse",0)})}  << gekürzt

ergibt beispielsweise folgende Werte:

start_pulse = 1454256039.128834
stop_pulse = 1454256039.295958

Als Ergebnis pulse_distance (Name macht Sinn wenn man die ganze Formel betrachtet) hätte ich nun gerne den Wert 0.167124 (oder 0,167124).
Erhalten tue ich irgendwelche Werte, die sich bei jeder Ausführung auch noch ändern (teilweise sogar negativ sind) obwohl die Ausgangswerte gleich
bleiben. Was muß ich anstellen um das gewünschte Ergebnis zu erhalten?

Und noch eine Frage zu time(): Der Wert entspricht einer Zeit seit Zeitpunkt X (in Sekunden?), den das System zurückliefert. Was bedeuten die Stellen
nach den Punkt? Millisekunden? Also z.B. 9.295958 wären dann 9 Sekunden und ein paar zerquetschte? Und wieviele Stellen hat der Rückgabewert der
Funktion von Haus aus, wenn er nicht durch %.Xf begrenzt wird?

Gruß und Danke,

Oli
Titel: Antw:Subtraktion von 2 UserReadings mit time() > Ergebnis Schrott
Beitrag von: betateilchen am 31 Januar 2016, 17:45:26
Das Ergebnis von time() sind normalerweise Sekunden seit 1970 

http://perldoc.perl.org/functions/time.html

Die Nachkommastellen sind wirklich welche.

Aber: ob die Funktion time() überhaupt Nachkommastellen zurückliefert, ist plattform-/betriebssystemabhängig! Du solltest Dich nicht einfach darauf verlassen, dass Du diese Information wirklich immer bekommst. Es sei denn, Du stellst sicher, dass immer Time::HiRes verwendet wird.
Titel: Antw:Subtraktion von 2 UserReadings mit time() > Ergebnis Schrott
Beitrag von: stromer-12 am 31 Januar 2016, 17:58:54
Nimm um deine ReadingsVal mal die {} weg.