FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: WhyTea am 10 Juni 2017, 00:44:44

Titel: [gelöst]JeeLink resetten wenn sich der Status länger nicht geändert hat
Beitrag von: WhyTea am 10 Juni 2017, 00:44:44
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
Titel: Antw:JeeLink resetten wenn sich der Status länger nicht geändert hat
Beitrag von: mahowi am 10 Juni 2017, 09:48:25
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.
Titel: Antw:JeeLink resetten wenn sich der Status länger nicht geändert hat
Beitrag von: Devender am 10 Juni 2017, 09:49:50
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
Titel: Antw:JeeLink resetten wenn sich der Status länger nicht geändert hat
Beitrag von: mahowi am 10 Juni 2017, 09:53:13
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.