Timer rules

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Timer rules

Beitrag von Innocent »

Hallo zusammen.

Ich habe mich die letzten Tage mit rules beschäftigt.
Unter anderem damit, als Beispiel, eine Shelly Plug S per Ereignis ( Sonnenuntergang) einzuschalten und nach Ablauf einer gewissen Zeit wieder auszuschalten.

Die Sache funktioniert bei mir.

Bei meiner Suche bin ich unter anderem über dieses Beispiel gestolpert, welches ich nicht ganz verstehe, aber viele so machen...

Mir stellen sich die Fragen:

Zeile 1, warum var timer = null ?
Zeile 6, warum if(timer == null) ?
Zeile 11, warum timer = null ? Ich vermute ein Zurücksetzen, aber warum ?
Zeile 15 , warum timer.rescheduled ?

Code: Alles auswählen

var timer = null

rule "TSM02 Motion OFF"
when
    Item ZW_AnaKapi_Hareket received update ON
then
    if(timer == null) {
        logInfo("FILE", "Setting to ON and creating timer")
        timer = createTimer(now.plusMinutes(2), [|
            logInfo("FILE", "Timer expired and setting to OFF")
            ZW_AnaKapi_Hareket.postUpdate(OFF)
            timer = null
        ])
    } else {
        logInfo("FILE", "Timer rescheduled")
        timer.reschedule(now.plusMinutes(2))
    }
end
Meine simple Rule sieht so aus und funktioniert auch...

Code: Alles auswählen

rule "Sonnenuntergang Plug S 2 an"
when  
    Channel "astro:sun:home:set#event" triggered START
then
    SpsDgk2RelayOutput.sendCommand(ON)
    createTimer(now.plusMinutes(90)) [| SpsDgk2RelayOutput.sendCommand(OFF)]
end
Wer kann mir das verständlich machen bzw den Unterschied erklären ?

Als nächstes möchte ich eine Meldung meiner Waschmaschine bekommen, wenn diese fertig ist...
Daran setze ich mich mal.

Schönen Mittag !
Openhab 2 auf RaspberryPi 4

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Timer rules

Beitrag von violine21 »

Schau mal hier. Da hat mir der Udo das schon einmal ausgiebig erklärt:
viewtopic.php?f=15&t=3353

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

Re: Timer rules

Beitrag von udo1toni »

Also, erstmal machen die beiden Codes unterschiedliche Dinge :)
Deine Rule schaltet beim Ereignis sunset das Item SpsDgk2RelayOutput auf ON. danach wird ein freier Timer gestartet, der nach 90 Minuten SpsDgk2RelayOutput auf OFF setzt. Allerdings ist dieses Ereignis im Moment des Triggers unabänderlich festgelegt. Du kannst es nicht mehr beeinflussen.

Die andere Rule hat hier ein paar hässliche Makel. Es geht mit der Benennung des Timer Objekts los. Man sollte keine Schlüsselwörter als Objektnamen verwenden, also besser tMotion als timer.
Außerhalb der Rule wird das Objekt definiert, es handelt sich um einen Handle für den Timer. Damit kann man nun den Timer steuern, auch wenn er bereits angelegt wurde.
Der nächste Makel ist die Prüfung auf null. null ist eine besondere Konstante, eine Prüfung auf Gleichheit ist hier nicht korrekt. Die Codeprüfung meldet das auch :) Korrekt muss hier geprüft werden, ob das Objekt identisch mit null ist, das sieht dann so aus: if(tMotion === null)
Es wird hier nicht der Inhalt der Speicherzelle geprüft, sondern der Zeiger, mit dem auf die Speicherzelle verwiesen wird.
Innerhalb des Timers wird das Objekt mit null initialisiert, damit die Abfrage auf null außerhalb des Timers nach der ersten Ausführung auch ein Chance hat. ;) Bei der Initialisierung passiert die Wertzuweisung ebenfalls, die ist aber nur gültig, bis ein Timer angelegt wurde.
.reschedule() setzt den Timer auf einen neuen Wert, solange der Code noch nicht aus dem Scheduler gelöscht wurde. .reschedule funktioniert also innerhalb des Timercodes oder außerhalb, wenn sichergestellt ist, dass der Timer existiert. (Prüfung auf ungleich null)
Diese Rule legt also einen Timer an, der immer wieder auf einen neuen Ablaufzeitpunkt gesetzt wird, wenn die Rule neu getriggert wird. Der Timer hat somit einen variablen Ablaufzeitpunkt (und zwar über die Laufzeit des Timers)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Timer rules

Beitrag von Innocent »

Dann kann ich meine rule so lassen?
Oder macht die irgendwann Ärger?
Openhab 2 auf RaspberryPi 4

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

Re: Timer rules

Beitrag von udo1toni »

Es kommt ja nur darauf an, was Du erreichen willst. Solange Dir ein starrer 90 Minuten Timer reicht, spricht nichts gegen Deine Rule :)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Timer rules

Beitrag von Innocent »

Vorerst reicht mir der timer starr. Hauptsache es gibt keine Konflikte, wenn ein anderer solcher timer startet.

Aktuell habe ich glaub beobachtet, daß wenn Dose eins per trigger an geht und nach 90 Minuten abschalten soll dies nicht tut wenn ich zwischenzeitlich eine Dose von Hand einschalte, die auch per rule nach 90 Minuten dann ausschalten soll....

Die von Hand eingeschaltete ging nach timer Ablauf aus.
Die andere nicht.
Openhab 2 auf RaspberryPi 4

Innocent
Beiträge: 238
Registriert: 29. Jul 2020 12:40
Answers: 0

Re: Timer rules

Beitrag von Innocent »

Update.
Meine Timer kommen sich gegenseitig nicht ins Gehege.
Das war von mir falsch beobachtet.

An der Fertigmeldung der Waschmaschine komme ich nicht weiter.
Habe einige umsetzungen angesehen, verstehe aber das meißte daran nicht.
Wer hat mir ein Beispiel, anhand dessen er/ihr mir erklären könnt was dort steht und passiert.

Schönen Mittag 😊
Openhab 2 auf RaspberryPi 4

Antworten