Hallo,
Ich hab eine Rule wenn der Bewegungsmelder von On auf Off geht und die Zeit zwischen 17:00 und 7:00 Uhr ist schaltet er das Licht aus.
Ich schaffe es nicht eine Verzögerung von 5 Minuten hinzuzufügen. Das erst nach 5 Minuten nach dem Off das Licht ausschaltet. Wie kann ich das hinzufügen.
Bitte um Hilfe.
Bewegungmelder Rule mit Verzögerung
Moderator: seppy
-
- Beiträge: 25
- Registriert: 4. Mai 2021 07:57
Bewegungmelder Rule mit Verzögerung
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 14032
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Bewegungmelder Rule mit Verzögerung
So halt leider gar nicht.
Wobei Du es mit einem Proxy Item versuchen könntest Das heißt, Deine Rule setzt das Proxy Item auf ON. Das Proxy Item hat in den Metadaten eine Expiration Time eingetragen und sendet nach Ablauf ein OFF.
Dann brauchst Du noch eine zweite Rule, welche das OFF dieses Proxy Items auswertet und das Licht ausschaltet.
Da Problem dabei: Du müsstest den laufenden Expiration Timer auch abschalten können, falls der Bewegungsmelder innerhalb des Zeitfensters von fünf Minuten wieder ein ON meldet. Dafür muss das Proxy Item dann das OFF als command senden, aber nur, wenn es noch den Zustand ON hat. Außerdem brauchst Du eine Rule, welceh bei Bewegung ON ein ProxyItem.postUpdate(OFF) sendet, damit das sendCommand unterdrückt wird.
Alles in Allem brauchst Du also mindestens drei Rules und ein Proxy Item, um ohne Code auszukommen
Wobei Du es mit einem Proxy Item versuchen könntest Das heißt, Deine Rule setzt das Proxy Item auf ON. Das Proxy Item hat in den Metadaten eine Expiration Time eingetragen und sendet nach Ablauf ein OFF.
Dann brauchst Du noch eine zweite Rule, welche das OFF dieses Proxy Items auswertet und das Licht ausschaltet.
Da Problem dabei: Du müsstest den laufenden Expiration Timer auch abschalten können, falls der Bewegungsmelder innerhalb des Zeitfensters von fünf Minuten wieder ein ON meldet. Dafür muss das Proxy Item dann das OFF als command senden, aber nur, wenn es noch den Zustand ON hat. Außerdem brauchst Du eine Rule, welceh bei Bewegung ON ein ProxyItem.postUpdate(OFF) sendet, damit das sendCommand unterdrückt wird.
Alles in Allem brauchst Du also mindestens drei Rules und ein Proxy Item, um ohne Code auszukommen
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 25
- Registriert: 4. Mai 2021 07:57
Re: Bewegungmelder Rule mit Verzögerung
Hättest du einen Vorschlag wie es einfacher ginge ?.
- udo1toni
- Beiträge: 14032
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Bewegungmelder Rule mit Verzögerung
Na ja, mit einer Rule in Form von Code.
Die Rule muss in dieser Form (d.h. mit einer globalen Timer variablen, die ist zwingend) über eine Textdatei definiert werden, die mit dem Namen meine.rules im Verzeichnis $OPENHAB_CONF/rules/ abgespeichert wird (wobei der Name der Datei natürlich auch anders lauten kann, die Endung muss aber .rules lauten)
Die Rule wird jedes Mal ausgelöst, wenn sich der Zustand des Items ändert (Item ... changed)
Ist der Zustand ON, so muss ein eventuell laufender Timer abgebrochen werden (tPoolhaus?.cancel) Danach wird die Rule verlassen (return;)
Läuft die Rule noch weiter, so ist der Status nicht ON, also ist der Status OFF
Nun muss geprüft werden, ob der Zeitraum stimmt. .getHour() liefert die Stunde als Integerwert (entspricht exakt der Stunde auf einer Digitaluhr). Ist die Stunde also größer als 6 und kleiner als 17, so wird die Rule beendet.
Läuft die Rule noch, so muss nun ein Timer angelegt werden (createTimer), der nach fünf Minuten ausgelöst wird (now.plusMinutes(5)). createTimer bekommt als zweiten Parameter den gesamten auszuführenden Code übergeben, das ist alles zwischen [ und ].
Damit ist die Rule beendet.
Wurde der Timer angelegt, so wird ein Zeiger auf diesen Timer in der globalen Variablen tPoolhaus gespeichert. Deshalb ist es überhaupt möglich, den Timer abzubrechen.
Wird der Timer nicht abgebrochen, so startet der Scheduler zum geforderten Zeitpunkt die Ausführung des übergebenen Codes. Der Code prüft, ob das Item MyLight den Status OFF hat. Ist das nicht der Fall, so sendet er den Befehl OFF an das Item.
Kommentare können entfernt werden, ebenso wie Leerzeilen oder Einrückungen. Ich bemühe mich aber immer, die Rules so zu formatieren, dass man eine Chance hat, zu erkennen, was wo passiert
Code: Alles auswählen
// Globale Variablen zu Beginn der Datei definieren
var Timer tPoolhaus = null // Timer für Licht ausschalten
rule "Licht aus"
when
Item BewegungssensorPoolhaus_Bewegung changed
then
if(BewegungssensorPoolhaus_Bewegung.state == ON) { // Bewegung erkannt
tPoolhaus?.cancel // Timer abbrechen, falls vorhanden
return; // Rule abbrechen
}
// Ab hier keine Bewegung
if(now.getHour <>6 && now.getHour < 17) // falls zwischen 7 Uhr und 17 Uhr
return; // Rule abbrechen
tPoolhaus = createTimer(now.plusMinutes(5),[| // lege Timer an, der nach 5 Minuten auslöst
// Licht ausschalten, so:
if(MyLight.state != OFF) // Falls Licht an
MyLight.sendCommand(OFF) // Licht ausschalten
])
end
Die Rule wird jedes Mal ausgelöst, wenn sich der Zustand des Items ändert (Item ... changed)
Ist der Zustand ON, so muss ein eventuell laufender Timer abgebrochen werden (tPoolhaus?.cancel) Danach wird die Rule verlassen (return;)
Läuft die Rule noch weiter, so ist der Status nicht ON, also ist der Status OFF
Nun muss geprüft werden, ob der Zeitraum stimmt. .getHour() liefert die Stunde als Integerwert (entspricht exakt der Stunde auf einer Digitaluhr). Ist die Stunde also größer als 6 und kleiner als 17, so wird die Rule beendet.
Läuft die Rule noch, so muss nun ein Timer angelegt werden (createTimer), der nach fünf Minuten ausgelöst wird (now.plusMinutes(5)). createTimer bekommt als zweiten Parameter den gesamten auszuführenden Code übergeben, das ist alles zwischen [ und ].
Damit ist die Rule beendet.
Wurde der Timer angelegt, so wird ein Zeiger auf diesen Timer in der globalen Variablen tPoolhaus gespeichert. Deshalb ist es überhaupt möglich, den Timer abzubrechen.
Wird der Timer nicht abgebrochen, so startet der Scheduler zum geforderten Zeitpunkt die Ausführung des übergebenen Codes. Der Code prüft, ob das Item MyLight den Status OFF hat. Ist das nicht der Fall, so sendet er den Befehl OFF an das Item.
Kommentare können entfernt werden, ebenso wie Leerzeilen oder Einrückungen. Ich bemühe mich aber immer, die Rules so zu formatieren, dass man eine Chance hat, zu erkennen, was wo passiert
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet
-
- Beiträge: 25
- Registriert: 4. Mai 2021 07:57
Re: Bewegungmelder Rule mit Verzögerung
Danke für deine Hilfe.