Zeitstempel mitprotokollieren

Schon wieder ich!

Nächstes Projekt:
Mittlerweile lese ich sehr viele Daten aus meinem Netzwerk aus (via http-req, oder MQTT), und schiebe dies in diverse Variablen.
Gelegentlich kann es vorkommen, dass die Gegenseite nicht antwortet (ausgeschalten, nicht erreichbar,…)
Gibt es eine Möglichkeit anzuzeigen, wann das letzte mal ein Wert in die Variable geschrieben wurde?

Danke
Markus

Ich glaube nicht direkt. Hatte ich auch schon mal vermisst.
Ich hatte mir damals geholfen in dem ich den Debug auf „Homegear Flows Log“ eingestellt habe und mir die Datei angesehen habe.

grafik

Aber Micha müsste das genauer wissen, ob es noch einen anderen Weg gibt.
Ich hoffe, wäre nicht schlecht.

Hallo zusammen,

ein Zeitstempel der letzten Aenderung wird nich mit gespeichert.

– Micha

In der Theorie wüsste ich schon wie es geht, aber an meiner Programmierfähigkeit scheitert es!

Theorie:
Der Zeitstempel wird in eine Variable gespeichert.
Kommt ein Wert x über den abgefragten Node wird auch die aktuelle Zeit auf die Variable Y geschrieben.
Kommt wieder ein Wert x über den abgefragten Node. wird die Variable Y mit der aktuellen Zeit überschrieben.

Wie löse ich das??

Ein Geistesblitz!!!
Habe gerade ein wenig in den Nodes gestöbert und bin auf den Node „clock“ gekommen!

Erster Versuch funktioniert schon mal!
Ich lassen den Knoten Clock sekündlich arbeiten.
Über einen PassThrouh kann ich die Zeit( schon mal in eine Variable schieben.
Momentan noch mit debug True/False aber immerhin! Ich arbeite mich nach vor!

Nun öffnen sich 2 weitere Fragen:
Wie bekomme ich den UNIX-Zeitstempel in eine (für mich) lesbare Uhrzeit?
Wie bekomme ich den PassThrough-Node so weit, das er mir auf eine Änderung einer Variablen reagiert?

Nächster Schritt:
Ich verschiebe den UnixZeitstempel jedes mal in eine Variable, sobald sich der Wert der zu überwachenden Variable ändert!!!

Jetzt muss ich nur noch den Zeitstempel umwandeln!
image

Huhu @mexx.111,

das geht mit einem kleinen function-Knoten:

$msg['payload'] = date('d.m.Y H:i:s', $msg['payload']);
return $msg;

Wobei man das $msg['payload'] innerhalb des date eigentlich nur braucht, wenn der Timestamp darin != des Timestamp zur Ausfuehrungszeit des Knotens ist :wink:

– Micha

Sehr genial!!!
Jetzt brauch ich nur mehr ein Virtuell Device das mir den Wert auch in der Steuerung anzeigt, weil bei mir werden die Variablen nicht in der Steuerung mit angezeigt :wink:

Jetzt muss ich nur noch die Zeitzone integrieren :wink:

Auch die Uhrzeit läuft schon richtig! Einfach -7200
Nächster Schritt: Automatische Anpassung zwischen Sommerzeit (-7200) und Winterzeit (-3600)
Aber da hab ich noch Zeit!!

image
Hurra.
Ein Teil meiner Protokollierung von Zeitstempeln läuft.
Keine Ahnung ob ich den sync Knoten benötige, ich denke aber ich minimiere die Gleichzeitigkeit.
Wahrscheinlich geht es auch einfacher…

Schade nur, dass ich die Werte der Variablen in der Smartha nicht angezeigt bekomme!
image

HI @mexx.111,

das ist ein alter Bug den ich die Tage endlich finden & beheben konnte. Evtl. kommt heute noch das Update, ansonsten auf jeden Fall kommende Woche.

– Micha

@mscheffler
Danke! Hab ich euch genug genervt, oder? :wink:

Ist dann der Varialben Fehler (Integer - Float) beim Virtuell Solar auch dabei??

Projekt Zeitstempel ist mal abgeschlossen.
Jetzt geht es wieder weiter!

Wie löse ich am einfachsten eine Alarmmeldung aus??
Wenn sich der Zeitstempel X sec. von der Echtzeit unterscheidet soll einen Meldung kommen.
Gibts eine einfache Lösung?

Hi @mexx.111,

eine „einfache“ Loesung war als function-Knoten :wink:
Mit „X sec. von der Echtzeit unterscheidet“ wirst du denke ich meinen „aelter als X Sekunden ist“? Das waere dann so in etwa (untested:)

$msg['payload'] = false;
$offset = 10; // Offset in Sekunden
if (strtotime($msg['payload']) < (time() - $offset)) {
$msg['payload'] = true;
}
return $msg;

Kurze Erklaerung: wenn der eingehende „Timestamp“ kleiner ist als die aktuelle Zeit - dem Offset (in Sekunden), dann wird true ausgeben. Ansonsten false.

– Micha

Danke @mscheffler,

Ich habe auch schon einen Weg mit den Nodes gelöst.
Den Timestamp schiebe ich in eine Flowvariable.
Von dieser subtrahiere ich die Zeit.
Dann geht alles auf einen Switch. Hier hab ich dann unterschiedliche Auslösezeiten drin.
Danach auf einen offDelay damit ich die Mledung nicht bei jeder überprüfung bekomme.
Damit ich den Zeitstempel auch sauber in einer Variablen habe, schiebe ich die flowvariable noch über den umrechnungsfunction-Node und fertisch!

Deine Lösung ist natürlich einfacher! Meine sieht doch etwas wild aus!!
image
Hier ist aber nur eine Alarmmeldung einprogrammiert!!

„Timtowtdi“, wie wir alten Perler sagen :joy:

– Micha

2 „Gefällt mir“