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
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.
Nimm um deine ReadingsVal mal die {} weg.