Seite 2 von 2

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 17. Jan 2020 14:45
von udo1toni
Also grundsätzlich wäre es das einfachste, den Timer nicht zu löschen...

Code: Alles auswählen

var Timer WindowTimer = null

rule "Balkontür Büro Status"
when
    Item OF_CD_01_STATE changed
then
    if(OF_CD_01_STATE.state != CLOSED) {
        WindowTimer = createTimer(now.plusMinutes(10), [ |
            sendBroadcastNotification("Balkontür im Büro seit 10 min offen!")
        ])
    } else { 
        if(WindowTimer !== null) {
            WindowTimer.cancel 
            WindowTimer = null 
            sendBroadcastNotification("Balkontür im Büro wurde geschlossen!")
        }
    }
end
Da die Rule auf changed triggert, kann man (zumindest nachdem das System eine Weile läuft) davon ausgehen, dass der Status entweder CLOSED oder OPEN ist, damit ist dann sicher, dass der Timer schon gelöscht wurde, wenn der Status auf OPEN wechselt. Umgekehrt falls der Status auf CLOSED wechselt und der Timer nicht null war, muss er vorher gelaufen sein, egal ob nun bis zur Ausführung oder nicht.
Es ist halt die Frage, welches Verhalten erwünscht ist.

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 17. Jan 2020 21:17
von Jens
Vielen Dank für die Antworten.
@ EiGelbGeek
auch mitt der Hilfsvariable war der Effekt der gleiche das ich auch beim schließen die Geöffnet Meldung bekomme.

@ udo1toni
der Neustart und das nicht löschen des Timers haben auch kein Erfolg gebracht

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 18. Jan 2020 05:58
von udo1toni
Und die Meldung, dass die Balkontür geschlossen wurde, kommt vorher?

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 18. Jan 2020 09:13
von Jens
Nein ich bekomme zweimal die Meldung, dass das Fenster geöffnet ist

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 18. Jan 2020 09:31
von udo1toni
Was bedeutet, dass der else-Teil gar nicht erst ausgeführt wird. Welcher Itemtyp ist OF_CD_01_STATE?

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 18. Jan 2020 10:58
von Jens

Code: Alles auswählen

String                  OF_CD_01_STATE                  "Balkontür Büro [MAP(HmIP-SWDM.map):%s]"            <door>          (OF_CD_01,Contacts)                 {channel=...}

Code: Alles auswählen

// HmIP-SWDM Fenster- und Türkontakt mit Magnet

// WINDOW_STATE
CLOSED=Geschlossen
OPEN=Offen

// UNSET
NULL=unbekannt
-=unbekannt

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 18. Jan 2020 19:47
von udo1toni
Das erklärt es sofort. Ein String ist ein String. Ein Status ist ein Status. Ich behaupte mal, (ohne homematic selbst zu nutzen), dass Du den Channel mit einem Contact Item verlinken müsstest. Falls das nicht funktionieren sollte (und nur dann!) kannst Du auch weiterhin das String Item verwenden und nun aber die Abfrage anpassen:

Code: Alles auswählen

if(OF_CD_01_STATE.state != "CLOSED") {
Begründung: Das Contact Item ist der korrekte Itemtyp für einen Boolean Wert (vor allem, wenn er sich auf einen Tür- oder Fensterkontakt bezieht).
Ansonsten ist ein Status normalerweise ein Status und kein String, aber in diesem Fall beinhaltet das String Item tatsächlich einen String als Status und eben kein Datum vom Typ OpenClosedType, also muss man auch mit einem String vergleichen.
Dass die Meldung zweimal ausgegeben wird, rührt daher, dass ein zweiter Timer angelegt wird, dabei wird der Zeiger auf den ersten Timer mit dem neuen Timer überschrieben, der erste Timer wird dabei nicht gelöscht!.

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 18. Jan 2020 22:10
von Jens
Vielen Dank @udo1toni, das war die Lösung.

Bei den Kontakten von HmIP wird beim Einlesen über die PaperUI ein String erstellt, da der Wert auf der CCU als ENUM abgegriffen wird. Für die HmIP-SWDO Kontakte gibt es anscheinend im Binding einen virtual datapoint, den es für die von mir verwendeten HmIP-SWDM Kontakte nicht gibt.
Aber wenn ich es als String vergleiche geht es.

Re: Warnung bei zu lange geöffneten Fenster

Verfasst: 19. Jan 2020 10:13
von udo1toni
Prima!