FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: klausg am 17 Februar 2014, 19:06:55

Titel: OldTimestamp falsch bei Homematic Aktoren
Beitrag von: klausg am 17 Februar 2014, 19:06:55
Hallo allerseits,

ich versuche einen Motorstundenzähler per notify und OldTimestamp() zu bauen. Mit einem Dummy funktioniert das. Aber mit einem echten Aktor (hier HM-LC-SW2-FM) funktioniert es nicht. OldTimestamp(<name>) liefert fast immer die gleiche Zeit wie ReadingsTimestamp(<name>). Maximal ist eine Sekunde Unterschied.  Mache ich was falsch?

define ha notify Sw1:off {Log 1," New Time:".time_str2num(ReadingsTimestamp("Sw2","state",0))." Old:".time_str2num(OldTimestamp("Sw2"))}

Im Log steht wenn nach set Sw1 off:

2014.02.17 19:01:58 1:  New Time:1392660118 Old:1392660118


Danke für Eure Hilfe!
Titel: Antw:OldTimestamp falsch bei Homematic Aktoren
Beitrag von: martinp876 am 18 Februar 2014, 07:05:23
hallo kgottschalk,

zum einen ist dies keine HM frage sondern eine an den"kernal" - hm, leider kein forum dazu. Anfaenderfragen scheint mir passend.

zum anderen habe ich oldvalue noch nie genutzt. Ich habe einmal reingesehen und bin nicht schlau geworden, was es sein soll und wie es funktioniert. Die Beschreibung ist nicht eindeutig, eingentlich kann man sie nur deuten.
Ist old=previous? gibt es old fuer alle Readings? warum wird bei state der aktuelle Zeitstempel in oldstate geschrieben?

Ist mir alles auch unklar, insbesondere da der kernal immer wieder aktuelle Zeitstempel hier verwendet - sieht nicht old aus.

=> Rudi Fragen

Gruss Martin
Titel: Antw:OldTimestamp falsch bei Homematic Aktoren
Beitrag von: klausg am 18 Februar 2014, 12:16:04
Habe Rudolf König kontaktiert. Er gab mit den Tipp, dass auch andere Events z.B. "set_off" den Status aktualisieren. Das ist ein super Hinweis.

Bei Homematic kommt zuerst set_off und dann die Bestätigung status off. In der Regel kommen beide Events direkt hintereinander. Damit zeigt OldTimestamp() die Zeit von "set_off" und ReadingsTimestamp() die von status = off. Kein Wunder, dass die Reading Timestamps gleich sind. Wenn man im notify auf set_off wartet, dann bekommt man als OldTimestamp() den Timestampo von "on".

Das erklärt auch warum es bein Dummy direkt funktioniert hatte. Beim Dummy gibt es den Zwischenschritt mit "set_" nicht. Der gibt es wahrscheinlich nur bei Homematic.

Viele Grüße
Klaus
Titel: Antw:OldTimestamp falsch bei Homematic Aktoren
Beitrag von: klausg am 18 Februar 2014, 19:36:27
Habe jetzt ein userReadings aus dem Betriebstundenzähler gemacht. Ist wahrscheinlich die bessere Lösung. Es sind vier Readings: startTime - die Unix-Zeit beim Einschalten (hängt an Readung "pct", weil "state" von userReadings nicht erfasst wird); runTime ist die Laufzeit in Stunden; opHours ist der eigentliche Betriebstundenzähler. Zuletzt noch opCounter, der die Anzahl der Einschaltvorgänge zählt.

startTime:pct:\s+100 {int(time())},runTime:pct:\s+0 {(int(time)-ReadingsVal("Terrassen.2act.Sw2","startTime",int(time)))/3600},opHours:runTime {ReadingsVal("Terrassen.2act.Sw2","runTime",0)+ReadingsVal("Terrassen.2act.Sw2","opTime",0)},opCounter:pct:\s+100 {ReadingsVal("Terrassen.2act.Sw2","opCounter",0)+1}


Nochmals Danke für den Hinweis.