Bewegungmelder Rule mit Verzögerung

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Antworten
schlagi1
Beiträge: 25
Registriert: 4. Mai 2021 07:57
Answers: 0

Bewegungmelder Rule mit Verzögerung

Beitrag von schlagi1 »

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Bewegungmelder Rule mit Verzögerung

Beitrag von udo1toni »

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

schlagi1
Beiträge: 25
Registriert: 4. Mai 2021 07:57
Answers: 0

Re: Bewegungmelder Rule mit Verzögerung

Beitrag von schlagi1 »

Hättest du einen Vorschlag wie es einfacher ginge ?.

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

Re: Bewegungmelder Rule mit Verzögerung

Beitrag von udo1toni »

Na ja, mit einer Rule in Form von Code.

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

schlagi1
Beiträge: 25
Registriert: 4. Mai 2021 07:57
Answers: 0

Re: Bewegungmelder Rule mit Verzögerung

Beitrag von schlagi1 »

Danke für deine Hilfe.

Antworten