Seite 1 von 1

Bewegungsmelder in Reihe

Verfasst: 14. Apr 2020 22:51
von JPH
Hallo zusammen,

ich habe folgende Anforderung, die ich gerne in eine Regel übertragen möchte. Ich habe leider überhaupt keine Idee, wie das abgebildet werden kann.

Ich habe 2 Bewegungsmelder. Wenn der erste Bewegungsmelder aktiviert ist erfolgt noch keine Aktivität, erst wenn der zweite Bewegungsmelder aktiviert wird, soll eine Aktivität starten. Das zeitliche Intervall zwischen beiden Bewegungsmeldern liegt bei 30 Sekunden.

Wenn 30 Sekunden nach der Aktivierung des ersten Bewegungsmelders der zweite Bewegungsmelder nicht aktiviert wird, dann wird keine Aktion ausgeführt.

Hat jemand von euch eine Idee?

Re: Bewegungsmelder in Reihe

Verfasst: 15. Apr 2020 03:34
von udo1toni
Geht es um eine explizite Reihenfolge, also Presence_1 triggert, dann innerhalb 30 Sekunden Presence_2 -> Aktion wird ausgeführt. Aber Presence_2 triggert, innerhalb 30 Sekunden Presence_1 führt zu keiner Aktion?
Oder soll es unterschiedliche Aktionen je nach Reihenfolge geben?
Eine mögliche Rule mit Richtungsunterscheidung sähe so aus:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren.
var Timer tPD1 = null                                           // Timer für Presence_1
var Timer tPD2 = null                                           // Timer für Presence_2

rule "detect presence"
when
    Item Presence_1 received command ON or                      // Bewegung 1 erkannt oder
    Item Presence_2 received command ON                         // Bewegung 2 erkannt
then
    if(triggeringItem.name.contains("1")) {                     // Bewegung 1 erkannt
        tPD1?.cancel                                            // falls der 1. Timer läuft, canceln
        tPD1 = createTimer(now.plusSeconds(30), [|              // 1. Timer starten
            tPD1 = null                                         // Wenn Timer abläuft, Variable löschen
        ])
        if(tPD2 !== null) {                                     // falls der 2. Timer noch läuft
            // Bewegungsreihenfolge 2 > 1 erkannt
        }
    } else {                                                    // Bewegung 2 erkannt
        tPD2?.cancel
        tPD2 = createTimer(now.plusSeconds(30), [|              // 2. Timer starten
            tPD2 = null                                         // Wenn Timer abläuft, Variable löschen
        ])
        if(tPD1 !== null) {                                     // falls der 1. Timer noch läuft
            // Bewegungsreihenfolge 1 > 2 erkannt
        }
    }
end
Die zwei Timer machen also nichts, außer sich selbst nach Ablauf wieder zu entfernen. Man könnte das gleiche auch mit dem expire Binding erreichen, dann ist die Rule noch einfacher. Als Items kannst Du einfach die Items der Präsenzmelder nutzen und zusätzlich zum Melder das expire Binding verknüpfen. So:

Code: Alles auswählen

Switch Presence_1 "Bewegung 1 [%s]" {channel="...",expire="30s,state=OFF"}
Switch Presence_2 "Bewegung 2 [%s]" {channel="...",expire="30s,state=OFF"}
Dann reicht dieser Rule:

Code: Alles auswählen

rule "detect presence"
when
    Item Presence_1 received command ON or                      // Bewegung 1 erkannt oder
    Item Presence_2 received command ON                         // Bewegung 2 erkannt
then
    if(triggeringItem.name.contains("1")) {                     // Bewegung 1 erkannt
        if(Presence_2.state == ON) {                            // falls der 2. Timer noch läuft
            // Bewegungsreihenfolge 2 > 1 erkannt
        }
    } else {                                                    // Bewegung 2 erkannt
        if(Presence_1.state == ON) {                            // falls der 1. Timer noch läuft
            // Bewegungsreihenfolge 1 > 2 erkannt
        }
    }
end

Re: Bewegungsmelder in Reihe

Verfasst: 15. Apr 2020 23:20
von JPH
Prima,

ich benötige nur eine Richtung...
Wenn Bewegungsmelder 1 aktiv geschaltet hat und der Bewegungsmelder 2 dann ebenfalls innerhalb von 30 Sekunden nach Bewegungsmelder 1 geschaltet hat, dann erfolgt eine Aktion (Licht an).
Ich werde morgen Abend einmal Deinen Vorschlag 1 austesten und melde dann das Ergebnis.

Re: Bewegungsmelder in Reihe

Verfasst: 16. Apr 2020 00:59
von udo1toni
Wenn die 2. Richtung nichts bewirken soll, kannst Du natürlich im else-Teil den Teil für das Schalten weg lassen (also diesen Code-Teil):

Code: Alles auswählen

        if(tPD1 !== null) {                                     // falls der 1. Timer noch läuft
            // Bewegungsreihenfolge 1 > 2 erkannt
        }