FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Sidey am 13 März 2016, 14:57:20

Titel: Zeitstempel von Readings
Beitrag von: Sidey am 13 März 2016, 14:57:20
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
Titel: Antw:Zeitstempel von Readings
Beitrag von: betateilchen am 13 März 2016, 15:17:57
{time_str2num(ReadingsTimestamp(device,reading,''))}

liefert Dir den timestamp in Sekunden. Du musst nur noch von "jetzt" subrahieren, das kriegst Du hoffentlich selbst hin :)
Titel: Antw:Zeitstempel von Readings
Beitrag von: CoolTux am 13 März 2016, 15:25:13
Und poste mal bitte Dein Ergebnis
Der Mensch ist so ein faules Tier  ;D


Danke
Titel: Antw:Zeitstempel von Readings
Beitrag von: betateilchen am 13 März 2016, 16:10:29

sub ReadingsAge($$$)
{
  my ($device,$reading,$default) = @_;
  return time() - time_str2num(ReadingsTimestamp($device,$reading,$default));
}


Könnte Rudi ja mal als Standardfunktion implementieren :)
Titel: Antw:Zeitstempel von Readings
Beitrag von: CoolTux am 13 März 2016, 16:24:40
Ich bedanke mich ganz herzlich.


Grüße
Titel: Antw:Zeitstempel von Readings
Beitrag von: rudolfkoenig am 13 März 2016, 21:09:34
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.
Titel: Antw:Zeitstempel von Readings
Beitrag von: Markus Bloch am 13 März 2016, 21:16:26
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
Titel: Antw:Zeitstempel von Readings
Beitrag von: rudolfkoenig am 13 März 2016, 21:20:52
Gefaellt mir besser. Hab ein Strichpunkt noch spendiert, kurz getestet und eingecheckt.
Titel: Antw:Zeitstempel von Readings
Beitrag von: Sidey am 14 März 2016, 21:41:53
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
Titel: Antw:Zeitstempel von Readings
Beitrag von: betateilchen am 14 März 2016, 22:07:12
Es ist für Menschen besser lesbar.