Zeitstempel von Readings

Begonnen von Sidey, 13 März 2016, 14:57:20

Vorheriges Thema - Nächstes Thema

Sidey

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
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

betateilchen

{time_str2num(ReadingsTimestamp(device,reading,''))}

liefert Dir den timestamp in Sekunden. Du musst nur noch von "jetzt" subrahieren, das kriegst Du hoffentlich selbst hin :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Und poste mal bitte Dein Ergebnis
Der Mensch ist so ein faules Tier  ;D


Danke
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen


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


Könnte Rudi ja mal als Standardfunktion implementieren :)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Ich bedanke mich ganz herzlich.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

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.

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Gefaellt mir besser. Hab ein Strichpunkt noch spendiert, kurz getestet und eingecheckt.

Sidey

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
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

betateilchen

Es ist für Menschen besser lesbar.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!