zusätzliche Bedingung in Rule einfügen ?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

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

zusätzliche Bedingung in Rule einfügen ?

Beitrag von Steinspiel »

Moin,

Im Moment komme ich nicht weiter: ich habe folgende Rule, welche meinen "GIGASET G-TAG Schlüsselfinder" beim Nachhause kommen erkennt und wenn ein paar Kriterien erfüllt sind Licht einschaltet sowie Musik streamt. Funktioniert auch alles!

Code: Alles auswählen

var Number gruenCount = 0											// Variable fuer gruenen Counter  wird auf "0" definiert


rule "GTag_2 Nachmittag"

when   
    Item GTag_2 changed to ON										// GTag_2 EIN geloggt

then
    if(UHR_nachmittags.state == ON) {								// und es ist werktags zwischen 13:00 und 19:00 Uhr

            if(Flur1_Brightness.state > 0) {						// Abfrage ob Flur1 schon an ist, wenn ja -> Abbruch
                return;
                }

                    if(GTag_1.state == ON){							//Abfrage: ist GTag_1 eingeloggt? Wenn ja -> Abbruch
                    return;
                    }

                        if(gruenCount > 0){							//Abfrage: ist gruenCount schon hochgezählt? Wenn ja -> Abbruch
                        return;
                        }

                            Flur1_Brightness.sendCommand(80)		// Flurlampe 1 auf 80% Dimmen, Ein
                            Flur2_Brightness.sendCommand(80)		// Flurlampe 2 auf 80% Dimmen, Ein
                            Flur3_Brightness.sendCommand(80)		// Flurlampe 3 auf 80% Dimmen, Ein   

                            Mini_Playuri.sendCommand("https://ndr-ndr2-hamburg.sslcast.addradio.de/ndr/ndr2/hamburg/mp3/128/stream.mp3")            // streamt Radio
                            Mini_Volume.sendCommand(40) 
     
    
                                gruenCount = gruenCount + 1			// Counter wird um "1" hochgezaehlt
    }
end
Nun will ich gerne das das Licht nur einschaltet wenn der Lichtlevel Wert meines HUE Bewegungsmelder unter 3600 ist, also ich dachte:

Code: Alles auswählen

    if(Hue_AmbientLight_Sensor1_LightLevel.state as Number > 3600) {		// Abfrage des Bewegungsmelders   
	return;
Nun meine Frage:
Ich weiß nicht wo ich diese Zeile Einfüge bzw. wie ich sie mit dem Flurlicht verknüpfe damit, egal wie der Lichtlevel ist, die Musik auf jeden Fall gestreamt wird.

Kann mir jemand auf die Sprünge helfen?
bis dann, Steinspiel

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: zusätzliche Bedingung in Rule einfügen ?

Beitrag von Darkwin101 »

Na die Abfrage muss da hin wo du die Lampen Schalten willst

Code: Alles auswählen

......
			if(Hue_AmbientLight_Sensor1_LightLevel.state as Number > 3600) {
                            Flur1_Brightness.sendCommand(80)		// Flurlampe 1 auf 80% Dimmen, Ein
                            Flur2_Brightness.sendCommand(80)		// Flurlampe 2 auf 80% Dimmen, Ein
                            Flur3_Brightness.sendCommand(80)		// Flurlampe 3 auf 80% Dimmen, Ein
                            }
                              Mini_Playuri.sendCommand("https://ndr-ndr2-hamburg.sslcast.addradio.de/ndr/ndr2/hamburg/mp3/128/stream.mp3")            // streamt Radio
                            Mini_Volume.sendCommand(40) 
.....
indem Fall darf das return nicht vorkommen da sonst die Regel abgebrochen wird.
Die Punkte stehen dort im Code für den Rest deiner Rule

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

Re: zusätzliche Bedingung in Rule einfügen ?

Beitrag von violine21 »

Wenn ich Dich richtig verstanden habe, versuch es mal damit:

Code: Alles auswählen

...
if(gruenCount > 0){							//Abfrage: ist gruenCount schon hochgezählt? Wenn ja -> Abbruch
                        return;
                        }
                            if(3600 > Hue_AmbientLight_Sensor1_LightLevel.state as Number) {		// Abfrage des Bewegungsmelders 
                                Flur1_Brightness.sendCommand(80)		// Flurlampe 1 auf 80% Dimmen, Ein
                                Flur2_Brightness.sendCommand(80)		// Flurlampe 2 auf 80% Dimmen, Ein
                                Flur3_Brightness.sendCommand(80)		// Flurlampe 3 auf 80% Dimmen, Ein   
                            }
                            Mini_Playuri.sendCommand("https://ndr-ndr2-hamburg.sslcast.addradio.de/ndr/ndr2/hamburg/mp3/128/stream.mp3")            // streamt Radio
                            Mini_Volume.sendCommand(40) 
     
    
                                gruenCount = gruenCount + 1			// Counter wird um "1" hochgezaehlt
                                ...
                                

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

Re: zusätzliche Bedingung in Rule einfügen ?

Beitrag von violine21 »

Oh, da war einer schneller. ;)

Bei der Schreibweise meckert bei mir immer VSC:

Code: Alles auswählen

if(Hue_AmbientLight_Sensor1_LightLevel.state as Number > 3600)
Ich muss mir dann immer so behelfen:

Code: Alles auswählen

if(3600 > Hue_AmbientLight_Sensor1_LightLevel.state as Number)
Kennt jemand evtl. den Grund dafür?

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

Re: zusätzliche Bedingung in Rule einfügen ?

Beitrag von Steinspiel »

Darkwin101 hat geschrieben: 14. Mai 2020 18:52 [...]
indem Fall darf das return nicht vorkommen da sonst die Regel abgebrochen wird.
Jetzt wo ich es lese, sehe ich es auch: das "return" war mein falscher Ansatz. Danke.

Aber, so wie Du es geschrieben hast, heißt es doch das Licht geht an wenn Lichtlevel größer als 3600, oder?
Ich habe ">" gegen "<" getauscht aber dann meckert VSC bei mir rum!

Schreibe ich wie @violine21 es geschrieben hat, nur mit "<"

Code: Alles auswählen

if(3600 < Hue_AmbientLight_Sensor1_LightLevel.state as Number)
nimmt VSC das auch ohne zu meckern und ich denke das war es,

Wieder was gelernt und Danke!
bis dann, Steinspiel

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: zusätzliche Bedingung in Rule einfügen ?

Beitrag von Darkwin101 »

Ich habe nur deinen Code Kopiert von oben und an die richtige stelle eingefügt ;)
Natürlich ist < richtig warum er das nun nicht annimmt da bin ich überfragt

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

Re: zusätzliche Bedingung in Rule einfügen ?

Beitrag von udo1toni »

Du kannst auch einfach Klammern setzen ;)
as hat eine geringere Priorität als >, also entsprechend einfach so schreiben:

Code: Alles auswählen

if((Hue_AmbientLight_Sensor1_LightLevel.state as Number) > 3600)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten