Bewegungsmelder in Reihe

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
JPH
Beiträge: 34
Registriert: 20. Jun 2019 23:38
Answers: 0

Bewegungsmelder in Reihe

Beitrag 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?

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Bewegungsmelder in Reihe

Beitrag 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
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

JPH
Beiträge: 34
Registriert: 20. Jun 2019 23:38
Answers: 0

Re: Bewegungsmelder in Reihe

Beitrag 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.

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Bewegungsmelder in Reihe

Beitrag 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
        }
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten