[gelöst]JeeLink resetten wenn sich der Status länger nicht geändert hat

Begonnen von WhyTea, 10 Juni 2017, 00:44:44

Vorheriges Thema - Nächstes Thema

WhyTea

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

mahowi

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.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Devender

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
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

mahowi

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.
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee