Schleife in Rules ?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Schleife in Rules ?

Beitrag von Steinspiel »

Moin,

Ist es möglich eine Rule (bzw. den "then - Abschnitt" selbiger) x-mal erneut aus zu führen?

Ich habe ein Ereigniss welches nur einmal eintritt (hier der Sonnenuntergang), dann soll "lampe_2" geschaltet werden aber NICHT wenn "lampe_1" eingeschaltet ist.
Irgendwann ist "lampe_1" wieder ausgeschaltet und dann soll sich "lampe_2" einschalten.

Wie bekomme ich die Rule dazu sich solange erneut aus zu führen bis "lampe_1" aus ist?

Ich habe was von "For/While Loops", Timer und Sleep gelesen. Konnte aber nirgends ein simples Beispiel finden was auf mein "Problem" hier passen würde, weiß nicht mal ob das der richtige Ansatz ist...

Code: Alles auswählen

rule "erneut"

when    
        Item sonnenaufgang changed to ON
then
        if(lampe_1.state == ON) {
        return;
        }
        lampe_2.sendCommand(ON)
end
Danke fürs lesen,
bis dann, Steinspiel

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

Re: Schleife in Rules ?

Beitrag von violine21 »

Steinspiel hat geschrieben: 3. Jul 2020 14:56 Wie bekomme ich die Rule dazu sich solange erneut aus zu führen bis "lampe_1" aus ist?
Das raubt dir unheimlich viel Recourcen.
Ohne das Item "Sonnenuntergang" zu kennen (einmalig, kurzer Impuls oder ON bis Sonnenaufgang),
würde ich die Rule auf das Ereignis "Sonnenuntergang" ODER "Lampe 1 aus" triggern.

Code: Alles auswählen

rule "erneut"

when    
        Item sonnenuntergang changed to ON or     //vorrausgesetzt, das Item ist bis Sonnenaufgang ON
        Item lampe_1 changed to OFF
then
        if(sonnenuntergang.state == ON && lampe_1.state == OFF ) {
         lampe_2.sendCommand(ON)
        }
end
Du schreibst allerdings nicht, wie Lampe 1 eingeschaltet werden soll und wie Lampe 2 wieder augeschaltet wird.
Folglich ist das hier nicht berücksichtigt.

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: Schleife in Rules ?

Beitrag von Steinspiel »

Moin,
violine21 hat geschrieben: 3. Jul 2020 16:27 Das raubt dir unheimlich viel Recourcen.
[...]
Danke für die schnelle Antwort. Das mit "ODER" in der when Bedingung kannte ich bis jetzt noch nicht, alleine dafür hat es sich gelohnt! ;-)
Aber das wird bei mir nicht funktionieren.

Das Item für den Sonnenaufgang ist, wie Du schon vermutest ein "ON bis Sonnenaufgang".
wie Lampe 1 eingeschaltet werden soll und wie Lampe 2 wieder augeschaltet wird.
Lampe_1 wird unregelmäßig per Sprachbefehl oder App geschaltet, nicht mit openHAB.
Lampe_2 wird am Ende des Tages duch openHAP ausgeschaltet, wenn das letzte Licht erloschen ist so zu sagen... ;-)

Hintergrund: lampe_1 ist meine gedimmte, farbige "Küchen Nachtbeleuchtung". Nun kann es ja sein das zum Sonnenuntergang noch jemand in der Küche bei voller Beleuchtung arbeitet. Da soll das Nachtlicht natürlich nicht schalten. Wird die Küche verlassen und das Licht (per Sprache) ausgeschaltet dann soll die Nachtbeleuchtung selbstständig anspringen.
bis dann, Steinspiel

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

Re: Schleife in Rules ?

Beitrag von udo1toni »

Falscher Ansatz.

Was Du möchtest, ist eine Rule, die beim Ausschalten von Lampe 1 Lampe 2 einschaltet, aber nur unter der Voraussetzung, dass die Sonne bereits untergegangen ist. (z.B. indem Du auf Elevation < 0° testest oder indem Du in zwei Rules bei Sonnenaufgang bzw. Sonnenuntergang ein Item umschaltest und dann dieses Item in der Rule für die Lampe auswertest.)


Gesendet von iPad mit Tapatalk
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

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

Re: Schleife in Rules ?

Beitrag von violine21 »

Steinspiel hat geschrieben: 3. Jul 2020 19:07 Das Item für den Sonnenaufgang ist, wie Du schon vermutest ein "ON bis Sonnenaufgang".
Hoffe, Du meinst eigentlich das Item für den Sonnenuntergang?
Dann sind wir doch recht nah an der Lösung.
Das Item "Sonnenuntergang" ist praktisch die ganze Nacht ON.

Code: Alles auswählen

rule "erneut"

when    
        Item sonnenuntergang changed to ON or     //vorrausgesetzt, das Item ist bis Sonnenaufgang ON
        Item lampe_1 changed to OFF
        
D.h., die Rule triggert bei Eintreffen des Sonnenuntergangs ODER wenn Lampe 1 ausgeschaltet wird.

Code: Alles auswählen

then
        if(sonnenuntergang.state == ON && lampe_1.state == OFF ) {
         lampe_2.sendCommand(ON)
        }
end
Lampe_1 wird ja per Sprachbefehl geschaltet, hat also mit dieser Rule nicht direkt etwas zu tun (nur ihr Status).
Damit Lampe_2 nur nach SU eingeschaltet wird, ist der SU-Status in der if-Bedingung enthalten UND der Status von Lampe_1.
Wenn SU ON ist und Lampe_1 OFF, wird Lampe_2 eingeschaltet.
Ist Lampe_1 bei SU ON, bleibt Lampe_2 aus.
Erst bei Ausschalten von Lampe_1

Code: Alles auswählen

Item lampe_1 changed to OFF
wird erneut getriggert und Lampe_2 eingeschaltet (wenn SU noch ON ist).
Lampe_2 wird am Ende des Tages duch openHAP ausgeschaltet, wenn das letzte Licht erloschen ist so zu sagen...
Das passiert dann wohl in einer anderen Rule?

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: Schleife in Rules ?

Beitrag von Steinspiel »

udo1toni hat geschrieben: 3. Jul 2020 19:37 Was Du möchtest, ist eine Rule, die beim Ausschalten von Lampe 1 Lampe 2 einschaltet, aber nur unter der Voraussetzung,
[...]
Naja fast... Das wäre für mich dann Schritt 2:

der "Normalfall" ist ja das "lampe_1" ausgeschaltet ist und der Sonnenuntergang "lampe_2" einschaltet.
Wie jetzt im Sommer: der Sonnenuntergang ist nach 21:00 Uhr und man kann z.B: schon um 17:00 Uhr ohne Licht in der Küche arbeiten.

Im Winter ist der SU entsprechend früher, d.h. es könnte auch jemand um 17:00 Uhr in der Küche sein und "lampe_1" eingeschaltet haben während der SU eintritt. Für diesen Fall wollte ich das, wenn z.B. um 17:30 "lampe_1" ausgeschaltet wird, weil das Essen fertig ist ;-) (der SU aber schon eingetreten ist) dann "lampe_2" sich trotzdem einschaltet.

War das jetzt zu wirr ? ;-)
bis dann, Steinspiel

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: Schleife in Rules ?

Beitrag von Steinspiel »

Moin,
violine21 hat geschrieben: 3. Jul 2020 21:29 Hoffe, Du meinst eigentlich das Item für den Sonnenuntergang?
[...]
Sorry, klar meine ich den Sonnenuntergang.
Dann sind wir doch recht nah an der Lösung.
[...]
Genial! Ich glaube das war es, und so einfach!
Ich werde Deine Lösung nachher in meine wahre Rule mit allen Parametern einpflegen und morgen, nach eintreten des Ernstfalles, berichten.

Danke erst einaml für die Mühe!
bis dann, Steinspiel

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: Schleife in Rules ?

Beitrag von Steinspiel »

Ich habe es eingerichtet und es funktioniert! :D :D

Bis auf einen ganz kleinen Schönheitsfehler, aber das konntest Du nicht ahnen:
Weiter oben hatte ich im Bezug aufs Ausschalten geschrieben
violine21 hat geschrieben: 3. Jul 2020 21:29
Lampe_2 wird am Ende des Tages duch openHAP ausgeschaltet, wenn das letzte Licht erloschen ist so zu sagen...
Das passiert dann wohl in einer anderen Rule?
Diese "anderen Rule" wird getriggert wenn ich "lampe_3" per App ausschalte und schaltet dann u.a. auch "lampe_2" aus. Und dann geht es los:

"lampe_1" ist ja aus
"lampe_2" wird ausgeschaltet
"sonnenuntergang" ist die ganze Nacht an

"unsere" neue Rule triggert dann sofort los:

"sonnenuntergang" ist an
"lampe_1" ist aus
"lampe_2" wird eingeschaltet

Und wenn sie nicht gestorben sind... ;-)

Zur Abhilfe habe ich erst mal in der Abschaltrule für "lampe_3" ein

Code: Alles auswählen

sonnenuntergang.sendCommand(OFF)
gesetzt. Damit ist die Nacht beendet und es funktioniert erst mal und ich denke es spricht auch nichts dagegen das so zu lassen.

Also, nochmals Danke für die Hilfe.
bis dann, Steinspiel

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

Re: Schleife in Rules ?

Beitrag von violine21 »

Dann versuch mal im when-Teil das

Code: Alles auswählen

Item lampe_1 changed to OFF
durch

Code: Alles auswählen

Item  lampe_1 changed from ON to OFF
Ich bin mir jetzt nicht sicher, ob das so funktioniert.

Wenn das keinen Erfolg bringt, könnte ich mir noch vorstellen, das du in der "Gute-Nacht-Rule" ein Proxy-Item integrierst, das den Generalausschaltbefehl "beeinhaltet". Das Proxy-Item kannst Du ja bei Sonnenaufgang wieder zurück setzen.
z.B.

Code: Alles auswählen

GuteNacht.sendCommand(ON)
In "unserer" Rule schreibst Du dann:

Code: Alles auswählen

rule "erneut"

when    
        Item sonnenuntergang changed to ON or     //vorrausgesetzt, das Item ist bis Sonnenaufgang ON
        Item lampe_1 changed to OFF
then
        if(sonnenuntergang.state == ON && lampe_1.state == OFF && GuteNacht.state == OFF) {
         lampe_2.sendCommand(ON)
        }
end
        
        
Damit schaltet Lampe_2 nur ein, wenn Du noch nicht "Gute Nacht gesagt hast".

Grundsätzlich finde ich die Steuerung eines Items aus verschiedenen Rules heraus nicht so optimal.
Da können dann mal ganz schnell die Zusammenhänge durcheinander geraten (wie Du ja gesehen hast).

Benutzeravatar
Steinspiel
Beiträge: 394
Registriert: 28. Dez 2019 08:49
Answers: 2

Re: Schleife in Rules ?

Beitrag von Steinspiel »

Moin,
violine21 hat geschrieben: 4. Jul 2020 09:16 Dann versuch mal im when-Teil das

Code: Alles auswählen

Item lampe_1 changed to OFF
durch

Code: Alles auswählen

Item  lampe_1 changed from ON to OFF
Das hat keinen Unterschied gemacht bei mir.
könnte ich mir noch vorstellen, das du in der "Gute-Nacht-Rule" ein Proxy-Item integrierst,
Die Idee ist auch gut, ich habe es probiert und es funktioniert auch. Allerdings hast Du IMO Recht was die verschiedenen Rules und Zusammenhänge betrifft. Dadurch habe ich auch nur ein Item mehr am Start...

Ich belasse es jetzt dabei mit der "Gute-Nacht-Rule" einfach den Sonnenuntergang mit aus zu schalten denn "gute Nacht" ist "gute Nacht" und ich brauche den SU erst am nächsten Tag wieder!

Danke und Dir ein schönes WE
bis dann, Steinspiel

Antworten