rule openhab 2.5

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

Antworten
dane
Beiträge: 4
Registriert: 4. Feb 2019 00:23

rule openhab 2.5

Beitrag von dane »

Hallo zusammen,

bin absoluter Neuling hier, und finde Openhab richtig interesant.

vielleicht kann mir jemand aus dem Forum weiterhelfen.
Habe mir eine Regel für mein Bad Lüfter erstellt wenn er eingeschaltet wird soll er nach 70 Minuten wieder aus gehen funktioniert 1a.

var Timer LichtTimer = null
rule Bad_Luefter
when
Item Bad_Luefter changed
then
if (Bad_Luefter.state==ON) {
createTimer(now.plusMinutes(60)) [|
sendCommand(Bad_Luefter,OFF)
]
}
end

ich hätte es gerne etwas anders komme aber irgendwie nicht weiter.
1. ich schalte das Bad_Licht an
2. ein Timer von 10 Minuten läuft los, wenn ich bis dahin des Licht_Bad nicht wieder aus mache geht mein Bad_Lüfter an sollte ich das Bad_Licht in wenniger als 10 Minuten wieder aus machen soll nichts passieren.

Habt ihr evtl. eine Idee wie ich sowas realisieren kann?
Openhab Version 2.5

Vielen Dank in voraus
Dane

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

Re: rule openhab 2.5

Beitrag von udo1toni »

Herzlich willkommen :) im aktiven Teil des Forums...

Die einfachste Variante:

Code: Alles auswählen

// globale Variablen vor der ersten Rule definieren!
var Timer tBadLuefter = null                                // Timer für Bad Lüfter

rule "Bad Lüfter"
when
    Item Bad_Licht changed                                  // Licht wurde geschaltet
then 
    if(Bad_Luefter.state == ON)                             // Falls Lüfter an
        return;                                             // Rule abbrechen
    tBadLuefter?.cancel                                     // eventell laufenden Timer canceln
    if(Bad_Licht == ON)                                     // Falls Licht an
        tBadLuefter = createTimer(now.plusMinutes(10), [|   // Timer anlegen mit folgendem Code
            if(Bad_Luefter.state != ON) {                   // Falls Lüfter nicht an
                Bad_Luefter.sendCommand(ON)                 // Lüfter einschalten
                tBadLuefter.reschedule(now.plusMinutes(60)) // und Timer erneut planen
            } else                                          // falls Lüfter an
                Bad_Luefter.sendCommand(OFF)                // schlate Lüfter aus
        ])
end
Die Rule triggert auf den Lichtschalter, nicht auf den Lüfter.
Falls beim Trggern der Rule der Lüfter an ist, wird die Rule abgebrochen. Nach dieser Bedingung ist also klar, dass der Lüfter gerade nicht läuft.

Ein eventuell laufender Timer wird zunächst abgebrochen (dieser Timer kann nur der 10-Minuten-Timer sein, da ja der Lüfter aus ist).
Falls der Status von Bad_Licht ON ist, wurde das Licht gerade eingeschaltet. daraus folgt, dass ein 10-Minuten-Timer gestartet werden muss. danach ist die Rule beendet.

Wird das Licht nun innerhalb der 10 Minuten ausgeschaltet, so triggert die Rule und der Timer wird gecancelt.
Wird das Licht nicht innerhalb der 10 Minuten ausgeschaltet, so wird der Timercode ausgeführt.

Im Timercode wird geprüft, ob der Lüfter läuft. Ist das nicht der Fall, so muss der Lüfter eingeschaltet werden. Außerdem muss ein Ausschalttimer geplant werden. Dazu wird der Timer recycelt, er wird einfach erneut nach 60 Minuten eingeplant. :)
Läuft der Lüfter wenn der Timercode ausgeführt wird, so ist gerade die 60-Minuten-Frist abgelaufen, also wird der Lüfter abgeschaltet.

der Code fängt nicht alle Möglichkeiten ab. es könnte sein, dass das Licht zwischendurch wieder für 10 Minuten eingeschaltet wird, da der Lüfter aber bereits läuft, wird der Lüfter- Timer nicht erneut gestellt. Es könnte auch sein, dass das Licht erst nach 69 Minuten ausgeschaltet wird. In diesem fall wird der Lüfter eine Minute nach Abschalten des Lichts ausgeschaltet. Ob diese Grenzfälle bei Dir zum Problem werden können, musst Du selbst wissen :)

Ich habe bei mir eine ähnliche Rule programmiert, die allerdings etwas mehr Möglichkeiten abdeckt, 10 Sekunden nach Einschalten des Lichts wird der Lüfter gestartet, wird das Licht innerhalb 2 Minuten ausgeschaltet, wird der Lüfter unmittelbar ausgeschaltet. Leuchtet das Licht länger als 2 aber weniger als 5 Minuten, so läuft der Lüfter zwei Minuten nach (also 2 Minuten nach Licht Ausschalten wird der Lüfter ausgeschaltet). Wird das Licht nach mehr als 5 Minuten aber weniger als 15 Minuten ausgeschaltet, so läuft der Lüfter 5 Minuten nach. Ist das Licht länger als 15 Minuten eingeschaltet, so läuft der Lüfter 15 Minuten nach. Der Witz dabei: Sollte der Lüfter bereits laufen, so berücksichtigt die Rule die alte Ausschaltzeit, es wird jeweils die spätere Ausschaltzeit angewendet. Wenn ich also nach dem Duschen das Bad verlasse und jemand kurz die Hände wäscht, so läuft der Lüfter dennoch die 15 Minuten nachdem ich das Bad verlassen habe, obwohl das Licht zwischendurch nur weniger als 2 Minuten an war.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

dane
Beiträge: 4
Registriert: 4. Feb 2019 00:23

Re: rule openhab 2.5

Beitrag von dane »

Weltklasse vielen Dank für die schnelle Hilfe Udo, genau sowas habe ich gesucht.

Antworten