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.