Zeitmessung bei Zustandsänderung

Begonnen von iCure, 27 November 2015, 21:27:54

Vorheriges Thema - Nächstes Thema

iCure

Hallo zusammen,

ich habe folgendes Vorhaben:

Ich möchte die Dauer messen, welche mein Dummy vom Zustand 1 auf Zustand 2 benötigt.
Diesen Wert möchte ich mir anschließend als Pushmsg senden.

Detail:
Sobald "3D_Drucker.Betrieb:on" dann Zeitmessung starten, wenn "3D_Drucker.Betrieb.standby" Zeitmessung stoppen und die Dauer ins reading "Dauer" von "3D_Drucker.Betrieb" schreiben.
Anschließend sende ich mir das reading "Dauer" sowie ein paar mehr readings an Pushover.

Wichtig ist mir das Starten, Stoppen sowie wegsichern der Dauer in ein Reading, bestenfalls im Format HH:MM.


Würde mich über Hilfe freuen!

Puschel74

notify mit dem passenden regexp auf das reading und dann die Zeit auswerten und senden.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

iCure

Wie werte ich die Zeit aus? Hast du ein beispiel?

rudolfkoenig

Variante 1, verwendet das 5.7 feature {()}:
define n_on 3D_Drucker.Betrieb:on setreading 3D_Drucker.Betrieb an {( time() )}
define n_off 3D_Drucker.Betrieb:standby setreading 3D_Drucker.Betrieb dauer {( time()-ReadingsVal("3D_Drucker.Betrieb", "an", 0) )}


Variante 2, mit dummy
define 3dZaehler dummy
define n_on 3D_Drucker.Betrieb:on 3dZaehler on
define n_off 3D_Drucker.Betrieb:standby { readingsSingleUpdate($defs{3dZaehler}, "onTime", time()-time_str2num(OldTimestamp("3dZaehler")), 1}


Es gibt bestimmt noch viele andere Varianten.

inesa394

Variante 1 erzeugt bei mir nur das {( time()-ReadingsVal("lgtv", "an", 0) )} aber keine Zeit
Wo liegt mein Fehler ???
define tv_off_zeit notify lgtv:absent setreading lgtv dauer {( time()-ReadingsVal("lgtv", "an", 0) )}

rudolfkoenig

Vermutlich hast du kein aktuelles FHEM (5.7) oder featurelevel wurde explizit auf 5.6 gesetzt.

iCure

Danke Rudolf, leider kommt bei mir das selbe wie bei inesa394. Habe jetzt extra testweise ein update durchgeführt, allerdings keine Besserung!
Gebe ich in der console {time()} ein, gibt dies mir eine Rückmeldung

inesa394

Mein fhem ist auch aktuell und  featurelevel wurde bei mir nicht gesetzt habe es testweise mal 5.7 gesetzt das selbe Problem
Wenn ich  {( time() )} eingebe  erhalte ich das hier 1448817521.39517

Damian

Zitat von: inesa394 am 28 November 2015, 20:46:26
Variante 1 erzeugt bei mir nur das {( time()-ReadingsVal("lgtv", "an", 0) )} aber keine Zeit
Wo liegt mein Fehler ???
define tv_off_zeit notify lgtv:absent setreading lgtv dauer {( time()-ReadingsVal("lgtv", "an", 0) )}

Funktioniert diese Syntax auch mit setreading? Ich finde sie in der Commandref nur beim set-Befehl.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

inesa394

Hallo Damian du meinst man sollte das ganze mal mit set definieren statt mit setreading??

rudolfkoenig

Sorry, mein Fehler, das hat natuerlich nur bei set funktioniert. Ab sofort ist es auch fuer setreading aktiv.
In den Beispielen habe ich die Typangabe auch vergessen, und ReadingsVal kann man ab 5.7 abkuerzen, deswegen beide hier nochmal:

Variante 1:
define n_on notify 3D_Drucker.Betrieb:on setreading 3D_Drucker.Betrieb an {( time() )}
define n_off notify 3D_Drucker.Betrieb:standby setreading 3D_Drucker.Betrieb dauer {( time()-[3D_Drucker.Betrieb:an] )}


Variante 2:
define 3dZaehler dummy
define n_on notify 3D_Drucker.Betrieb:on 3dZaehler on
define n_off notify 3D_Drucker.Betrieb:standby { readingsSingleUpdate($defs{3dZaehler}, "onTime", time()-time_str2num(OldTimestamp("3dZaehler")), 1}