Hauptmenü

Zeitstempel eines Events

Begonnen von OliWee, 21 Juli 2018, 10:22:26

Vorheriges Thema - Nächstes Thema

OliWee

Hi!

Ich überprüfe den state meines HM-SEC-SCo. Alle 15 Minuten soll per Telegram ausgegeben werden, wenn das Fenster noch offen ist:

defmod OG.Bad.Fenster CUL_HM 5F5D8D
attr OG.Bad.Fenster IODev CUL_0
attr OG.Bad.Fenster actCycle 002:50
attr OG.Bad.Fenster actStatus alive
attr OG.Bad.Fenster alias Fenster Bad oben
attr OG.Bad.Fenster autoReadReg 4_reqStatus
attr OG.Bad.Fenster devStateIcon closed:fts_window_1w@green open:fts_window_1w_open@red
attr OG.Bad.Fenster event-on-change-reading state, battery, alive
attr OG.Bad.Fenster event-on-update-reading alive
attr OG.Bad.Fenster expert 2_raw
attr OG.Bad.Fenster firmware 1.0
attr OG.Bad.Fenster model HM-SEC-SCo
attr OG.Bad.Fenster mqttName Fenster
attr OG.Bad.Fenster mqttRoom BadOben
attr OG.Bad.Fenster room 30_Bad,93_Homematic
attr OG.Bad.Fenster serialNr OEQ1430688
attr OG.Bad.Fenster subType threeStateSensor



defmod OG.Bad.Fenster.Msg DOIF ([OG.Bad.Fenster] eq "open") (set telebot message Das Fenster im oberen Bad ist seit mehr als {(int([OG.Bad.Fenster:state:sec] / 60))} Minuten offen)
attr OG.Bad.Fenster.Msg repeatcmd 900
attr OG.Bad.Fenster.Msg wait 900


Das Funktioniert auch soweit prächtig. Aber die Zeit, die per EG.Bad.Fenster:state:sec zurückgegeben wird, stimmt nicht.
Das Problem dürfte was mit dem zu tun haben:

attr OG.Bad.Fenster event-on-update-reading alive

Denn jedesmal, wenn ein "alive"-Event kommt, dann wird auch beim state eine neue Uhrzeit geschrieben, obwohl hier nichts passiert. In meinem Log ist folgendes zu sehen:
2018-07-21_09:52:41 OG.Bad.Fenster open
2018-07-21_10:04:52 OG.Bad.Fenster alive: yes


Und trotzdem steht in den rawDefinitions:
setstate OG.Bad.Fenster 2018-07-21 10:04:52 state open

Offensichtlich wird einfach das letzte Event des Geräts genommen und der Zeitstempel überall reingeschrieben. Ich kann mir nicht vorstellen, dass das so gewollt ist, oder??

Oli

CoolTux

Doch das ist es. Du kannst aber für state gerne
timestamp-on-change-reading setzen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

OliWee

Oh, das kannte ich noch gar nicht. Ist das neu?

Vielen Dank  :)

CoolTux

Ein bisschen, so 2 Jahre alt  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Ich würde sowas vielleicht ohnehin eher über ReadingsAge() lösen.

Aber das gesamte Vorhaben ist für mich ohnehin unlogisch.

Angenommen:

10:10 Prüfung mit Ergebnis: Fenster ist offen = Meldung wird verschickt
10:15 Irgendjemand macht das Fenster zu
10:20 Irgendjemand macht das Fenster wieder auf
10:25 Prüfung mit Ergebnis: Fenster ist offen = Meldung wird verschickt

In diesem Fall ist es aber so, dass das Fenster nicht "immer noch" offen ist, sondern "wieder". Und das kann ja durchaus gewollt sein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!