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
}