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
Doch das ist es. Du kannst aber für state gerne
timestamp-on-change-reading setzen.
Oh, das kannte ich noch gar nicht. Ist das neu?
Vielen Dank :)
Ein bisschen, so 2 Jahre alt ;D
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.