Hallo
Ich habe sporadisch das Problem das sich mein JeeLink scheinbar aufhängt und somit die LaCrosse Thermostate nicht mehr ausliest.
Ein einfaches "set myJeeLink reset" behebt dann das Problem.
Nun habe ich mir gedacht das ich dies mithilfe von einem DOIF der das Alter des Zeitstempel des Readings "state" abfragt abfangen könnte. Laut Commandref soll das dann so aussehen:
ZitatZeitspanne eines Readings seit der letzten Änderung back
Bei Readingangaben kann die Zeitspanne mit [<Device>:<Reading>:sec] in Sekunden seit der letzten Änderung bestimmt werden.
Anwendungsbeispiel: Licht soll angehen, wenn der Status des Bewegungsmelders in den letzten fünf Sekunden upgedatet wurde.
define di_lamp DOIF ([BM:state:sec] < 5) (set lamp on-for-timer 300)
attr di_lamp do always
Ich habe das nun wie folgt versucht umzusetzen leider ohne erfolg.
define myJeeLink_alive DOIF ([myJeeLink:state:sec] > 300) (set myJeeLink reset)
attr myJeeLink_alive do always
attr myJeeLink_alive room Zentralsysteme
Leider funktioniert das nicht wie erwartet. Auch wenn der Zeitstemplel von dem reading "state" älter als 300 Sekunden ist wird der Befehl nicht ausgelöst.
Ich hoffe mir kann jemand sagen wo der Fehler liegt.
Gruß
Daniel
Es gibt das Attribut timeout.
timeout
format: <timeout, checkInterval> Checks every 'checkInterval' seconds if the last data reception is longer than 'timout' seconds ago.
If this is the case, a reset is done for the IO-Device.
Guten Morgen,
Schau dir mal die Funktion time_str2num an. Damit kannst du den Timestamp eines Readings auslesen und prüfen.
Etwas so:
Fehler { return "fehler" if ( (time_str2num(ReadingsTimestamp($NAME,"power","0")) - time_str2num(OldTimestamp($NAME))) >30 );; return "ok" }
Ich uebepruefe so den Timestamp meines Lesekopfes per Userreading. auf Fehler oder OK reagiere ich dann mit einem notify. Geht natürlich ich auch mit DoIF.
Alternativ (nutze ich aber selbst nicht) ReadingsAge
https://forum.fhem.de/index.php?topic=51686.0
Gruesse,
Dirk
Warum kompliziert, wenn es einfach geht? ;)
S.o. Mit dem Attribut timeout resettet sich der JeeLink von selbst, wenn eine Zeitlang keine Daten empfangen wurden.