Hi,
ich beiße mir schon wieder die Zähne aus.
Ich möchte feststellen, vor wie viel Sekunden ein Reading aktualisiert wurde.
In {TIME} steht ein für Anwender lesbares Format.
Meine Versuche diesen Text in Sekunden seit 1970 um zu rechnen und mit timeNow() zu vergleuchen waren bislang nicht sehr vielversprechend.
Ich habe es auch schon mit den internen bezeichnern .lastUpdate<Reading> versucht. Die scheinen aber nicht gesetzt zu sein.
Da ich es nicht schaffe, melde ich mich hier mal wieder.
Wie bekomme ich heraus, wieviel Sekunden das letzte Update zurück liegt?
Sidey
{time_str2num(ReadingsTimestamp(device,reading,''))}
liefert Dir den timestamp in Sekunden. Du musst nur noch von "jetzt" subrahieren, das kriegst Du hoffentlich selbst hin :)
Und poste mal bitte Dein Ergebnis
Der Mensch ist so ein faules Tier ;D
Danke
sub ReadingsAge($$$)
{
my ($device,$reading,$default) = @_;
return time() - time_str2num(ReadingsTimestamp($device,$reading,$default));
}
Könnte Rudi ja mal als Standardfunktion implementieren :)
Ich bedanke mich ganz herzlich.
Grüße
Habs eingecheckt, obwohl ich mit dem default Parameter nicht gluecklich bin:
- man muss sich exakt an dem Format YYYY-MM-DD HH:MM:SS halten. Weiss nicht so recht, was passiert, wenn nicht.
- ich kann mir kein default vorstellen, was mir auswertbare Werte zurueckliefert.
Ich hätte folgendes vorgeschlagen:
sub ReadingsAge($$$)
{
my ($device,$reading,$default) = @_;
my $ts = ReadingsTimestamp($device,$reading,undef)
return time() - time_str2num($ts) if(defined($ts));
return $default;
}
Gruß
Markus
Gefaellt mir besser. Hab ein Strichpunkt noch spendiert, kurz getestet und eingecheckt.
Hey,
danke euch.
Da ich in letzter Zeit nur noch sehr selten ins Forum komme (bin ich da blockiert?), dauert es leider etwas, bis ich antworte.
Im Grunde habe ich die Funktion time_str2num gesucht.
Dass diese in 99_Utils ist, naja da habe ich nicht gesucht :(
ReadingsAge ist natürlich eine noch viel bessere Lösung.
Bei meinen ganzen Untersuchungen ist mir aufgefallen, dass bei UserReadings in {t} die Zeit in Sekunden gespeichert wird und bei Readings als String.
Hat das eigentlich einen besonderen Grund, weshalb die Zeit im Reading nicht in Sekunden hinterlegt ist?
Grüße Sidey
Es ist für Menschen besser lesbar.