Doif Problem mit der Auswertung von TimeStamps

Begonnen von slor, 25 Januar 2021, 15:50:29

Vorheriges Thema - Nächstes Thema

slor

Hallo zusammen,

ich habe mir eine Fenster-Auf Warnung gebaut, die nach 10 Minuten eine Telegram Nachricht senden und das für 3 mal wiederholt.
In der Nachricht wird auch die Zeit seit dem Setzen des state TimeStamps (Öffnen des Fensters) gesendet.
Es kommt relativ häufig vor, dass der Timestamp sich verändert, bzw. während der Laufzeit aktualisiert wird. Dann bekomme ich nach 20 Minuten eine Meldung "Das Fenster ist seit 3 Minuten offen"

Das sieht so aus und funktioniert bis auf das Time Stamp Problem sehr gut:
di_tg_KG_Z1_FK_Fenster_auf_Zeit DOIF ([KG_Z1_FK:state] eq "open" and [dm_tg_notification:state] eq "on") (set Telegram_Bot message @xxxx Das Fenster in der Waschküche ist seit {(int([KG_Z1_FK:state:sec] / 60))} Minuten offen)
DOELSE ()
attr di_tg_KG_Z1_FK_Fenster_auf_Zeit repeatcmd 600
attr di_tg_KG_Z1_FK_Fenster_auf_Zeit repeatsame 3
attr di_tg_KG_Z1_FK_Fenster_auf_Zeit wait 601


Da ich das nicht abstellen kann, habe ich mir überlegt, beim Starten des Doif ein Reading zu schreiben und diesen Timestamp auszuwerten.
Allerdings scheitere ich damit aktuell.
Auch bin ich mir nicht sicher, ob ich repeatcmd und repeatsame richtig gesetzt habe.

So habe ich es ohne Erfolg umgebaut:

([KG_Z1_FK:state] eq "open" and [dm_tg_notification:state] eq "on")
(setreading $SELF state_timestamp 1)
(set Telegram_Bot message @xxx Das Fenster in der Waschküche ist seit {(int([$self:state_timestamp:sec] / 60))} Minuten offen)

DOELSEIF ([KG_Z1_FK:state] eq "closed")
(setreading $SELF state_timestamp 0)

DOELSE ()

attr di_tg_KG_Z1_FK_Fenster_auf_Zeit_test repeatcmd 0:600
attr di_tg_KG_Z1_FK_Fenster_auf_Zeit_test repeatsame 1:3
attr di_tg_KG_Z1_FK_Fenster_auf_Zeit_test wait 0:601


Ich möchte, dass das der Zeitstempel des Reading state_timestamp einmalig beim Öffnen des Fensters (triggern des doif) gesetzt wird. Dazu schreibe ich einfach eine 1 in das Reading.
Der zweite Befehl soll dann alle 10 Minuten getriggert werden, max 3 mal und immer den Zeitstempel von state_timestamp zur Berechnung hernehmen.

Sobald das Fenster geschlossen wird, soll der DOELSEIF loslegen und das state_timestamp auf 0 setzen und den Timer stoppen.

Aktuell ist es so, dass state_timestamp auf 1 steht, aber kein Timer gestartet wird. Wird das Fenster geschlossen ist state_timestamp 1 wie es sein soll.

Was habe ich übersehen?
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

rabehd

ZitatEs kommt relativ häufig vor, dass der Timestamp sich verändert, bzw. während der Laufzeit aktualisiert wird.
Wieso?
ist das nicht ein Fall für event-on-update-reading und event-on-change-reading am Fenstersensor?
Auch funktionierende Lösungen kann man hinterfragen.

Damian

Wenn sich ein Timestamp ändert, dann ändert sich normalerweise auch der Inhalt, dieses Ereignis sollte auch ein Event liefern.

Dann brauchst du an deinem DOIF gar nichts ändern, denn dann wechselt das DOIF den Zustand in cmd2 und die Benachrichtigung wird unterbrochen.

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

slor

EventOnChange Reading ist zu einfach 😉
Scheinbar aktualisiert der Kontakt ab und an den state mit dem gleichen Wert. Das scheint das doif nicht dazu zu bringen den Timer abzubrechen. Habe das Phänomen bei allen 21 Kontakten im Haus.
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

Damian

Zitat von: slor am 25 Januar 2021, 20:15:50
EventOnChange Reading ist zu einfach 😉
Scheinbar aktualisiert der Kontakt ab und an den state mit dem gleichen Wert. Das scheint das doif nicht dazu zu bringen den Timer abzubrechen. Habe das Phänomen bei allen 21 Kontakten im Haus.

Ich dachte, dass er bei closed abbrechen soll.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

slor

Tut er ja auch.
Lediglich die Berechnung der Fenster auf Zeit vom Time Stamp des Kontakt führt zu schrägen Meldungen. Wenn der Time Stamp nur bei Änderungen aktualisiert wird, sollte das passen. Ich teste das mal.
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

rallye

@slor
bist du an dieser Stelle weitergekommen ? Ich habe ein ähnliches Problem mit der Zeitberechnung. Bei den Shellies aktualisiert sich das auch alle 30 Sekunden, sodass eine Dauer seit power-on nicht wirklich berechnet werden kann.
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

slor

Noch nicht wirklich. Habe auch nach setzen der event-on-xxx Attribute auf den Geräten das Problem. Scheint nur bei hmccu Geräten aufzutreten.
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

slor

Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect