FHEM Forum

FHEM => Automatisierung => Thema gestartet von: iCure am 27 November 2015, 21:27:54

Titel: Zeitmessung bei Zustandsänderung
Beitrag von: iCure am 27 November 2015, 21:27:54
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!
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: Puschel74 am 27 November 2015, 22:22:59
notify mit dem passenden regexp auf das reading und dann die Zeit auswerten und senden.
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: iCure am 27 November 2015, 22:43:02
Wie werte ich die Zeit aus? Hast du ein beispiel?
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: rudolfkoenig am 28 November 2015, 08:33:59
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.
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag 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) )}
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: rudolfkoenig am 29 November 2015, 10:49:51
Vermutlich hast du kein aktuelles FHEM (5.7) oder featurelevel wurde explizit auf 5.6 gesetzt.
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: iCure am 29 November 2015, 13:07:02
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
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: inesa394 am 29 November 2015, 18:20:43
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
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: Damian am 29 November 2015, 20:34:51
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
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: inesa394 am 30 November 2015, 07:09:27
Hallo Damian du meinst man sollte das ganze mal mit set definieren statt mit setreading??
Titel: Antw:Zeitmessung bei Zustandsänderung
Beitrag von: rudolfkoenig am 30 November 2015, 07:38:37
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}