Seite 1 von 1

Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 23. Sep 2021 17:48
von Boris099
Hallo,

Ich bastele gerade an einem rule und das will einfach nicht wie ich will:-)
Das ist sicherlich meiner Unwissenheit geschuldet, ich denke ihr könnt mir sicher helfen?
Ich verwende in einer Zeile im rule && um somit Zeit und Sensorstatus mit "und" zu verknüpfen.
Das funktioniert nicht, der Status interessiert ihn nicht!
Momentan tut er einfach bei jeder Sensorstatus-Änderung die Lampe schalten.
Was mache ich falsch, verwende ich && falsch?

Code: Alles auswählen

rule "ZPIR_DieleOG_Luminance changed"
when
        Item zwave_device_6c898019_node2_sensor_luminance changed
then
        val nState = if(newState instanceof Number) newState else 0     // falls ein ungültiger Wert geliefert wird, wird 0 genommen
        if(now.getMinuteOfDay >= (16 * 60 + 00) || now.getMinuteOfDay <= (08 * 60 + 30) && nState <= 3) {
                if(zwave_device_6c898019_node13_switch_binary.state != ON)
                        zwave_device_6c898019_node13_switch_binary.sendCommand(ON)
        }
        if(nState >= 5) {
            if(zwave_device_6c898019_node13_switch_binary.state != OFF)
                zwave_device_6c898019_node13_switch_binary.sendCommand(OFF)
        }
end

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 23. Sep 2021 19:06
von KellerK1nd
Du musst dabei mehr Klammern.

Code: Alles auswählen

 if(((now.getMinuteOfDay >= (16 * 60 + 00)) || (now.getMinuteOfDay <= (08 * 60 + 30))) && (nState <= 3)) {
Hab das jetzt nur fix vom Handy aus geschrieben. Bitte nochmal genau prüfen.

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 23. Sep 2021 19:26
von Boris099
Diese doof... Klammern 😀
Ich bin jetzt auch nicht Zuhause, teste es und gebe Feedback

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 24. Sep 2021 10:20
von Boris099
Also das funktioniert, Vielen Dank!

Nun versuche ich das gerade ähnlich in einem anderen rule und schon wieder kapier ich das nicht wirklich.
Im OH Log zwingt er mich eine dritte Klammer am Ende zu setzen - ist das denn richtig?

Code: Alles auswählen

if((now.getMinuteOfDay >= (16 * 60 + 00) && (nState <= 10))) {

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 24. Sep 2021 10:38
von KellerK1nd
Bist du mit openHAB3 unterwegs? Mit openHAB3 gibt es das minuteOfDay nicht mehr, das muss man sich errechnen.

openHAB3 Regel:

Code: Alles auswählen

rule "ZPIR_DieleOG_Luminance changed"
when
    Item zwave_device_6c898019_node2_sensor_luminance changed
then
    val nState = if(newState instanceof Number) newState else 0     // falls ein ungültiger Wert geliefert wird, wird 0 genommen
    val Number getMinuteOfDay = (now.getHour * 60 + now.getMinute)

    if((((getMinuteOfDay) >= (16 * 60 + 00)) || ((getMinuteOfDay) <= (08 * 60 + 30))) && (nState <= 3)) {
        if(zwave_device_6c898019_node13_switch_binary.state != ON)
            zwave_device_6c898019_node13_switch_binary.sendCommand(ON)
    }
    if(nState >= 5) {
        if(zwave_device_6c898019_node13_switch_binary.state != OFF)
            zwave_device_6c898019_node13_switch_binary.sendCommand(OFF)
        }
end

Falls du noch mit openHAB2 unterwegs bist dann diese:

Code: Alles auswählen

rule "ZPIR_DieleOG_Luminance changed"
when
    Item zwave_device_6c898019_node2_sensor_luminance changed
then
    val nState = if(newState instanceof Number) newState else 0     // falls ein ungültiger Wert geliefert wird, wird 0 genommen

    if(((now.getMinuteOfDay >= (16 * 60 + 00)) || (now.getMinuteOfDay <= (08 * 60 + 30))) && (nState <= 3)) {
        if(zwave_device_6c898019_node13_switch_binary.state != ON)
            zwave_device_6c898019_node13_switch_binary.sendCommand(ON)
    }
    if(nState >= 5) {
        if(zwave_device_6c898019_node13_switch_binary.state != OFF)
            zwave_device_6c898019_node13_switch_binary.sendCommand(OFF)
        }
end
Kann sein das ich zu viel Klammern setze, nur so behalte ich leichter den Überblick, da ich jedes Item mit seinem Wert bei solchen Verschachtelungen klammere.

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 24. Sep 2021 11:07
von Boris099
Du hast da was verwechselt.
Ich bin noch auf 2.5

Das erste Beispiel das du mir gestern gegeben hast, war richtig.
Meine zweite Frage ist eine leicht abgeänderte rule. Da benötige ich die zweite Zeitregel nicht.
Und dann sieht das auch mit den Klammern wieder anders aus.
OH Log will dann eine dritte Klammer am Ende.
Verstehe nicht genau wieso, ist die den notwendig?

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 24. Sep 2021 11:12
von int5749
Boris099 hat geschrieben: 24. Sep 2021 11:07 Verstehe nicht genau wieso, ist die den notwendig?
Zähl doch mal die Klammern

Code: Alles auswählen

if((now.getMinuteOfDay >= (16 * 60 + 00)) && (nState <= 10)) {
Hatte aber Kellerkind schon richtig geschrieben!!

4x Klammer auf, dann muss auch 4x Klammer zu ;-)

[falsches entfernt unf korrigiert]

Viele Grüße

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 24. Sep 2021 11:24
von KellerK1nd
Du hast da was verwechselt.
Ich bin noch auf 2.5
Darum habe ich ja zwei Fassungen geschrieben. ;) So hast du schonmal die Regel für openHAB3.

So sollte es gehen:

Code: Alles auswählen

if((now.getMinuteOfDay >= (16 * 60 + 00)) && (nState <= 10))

Re: Kleine Hilfestellung - Rule ignoriert &&

Verfasst: 24. Sep 2021 23:51
von udo1toni
Also, um ehrlich zu sein, sind viele der Klammern unnötig. Das wichtigste ist aber, dass für jede öffnende Klammer auch eine schließende Klammer gesetzt werden muss.
Klammern haben die höchste Priorität, ansonsten muss man schauen... ich bin mir nicht sicher, inwieweit diese Rangfolge korrekt ist, im Zweifel ist klammern sicher sinnvoll.