This topic comes up several times a year so here’s a post we can link to in answer.
The source of the confusion for why we can’t use
and in Rule triggers is that Rules are triggered based on events, not state.
At it’s core openHAB is an event driven system. Devices generate an event which gets put on an Event Bus. Parts of openHAB listen on this Event Bus and perform actions on those events. One of the actions that can be performed on those events is triggering Rules.
Thus, Rules are completely event driven. The events that trigger a Rule are defined in the
when section of the Rule. It makes no sense to have an
and between triggers because two events are unlikely to ever occur at exactly the same time.
In Rules DSL, if you only want a Rule to run when an event occurs and some other Item is also some desired state, then you must use an
if statement in the Rule. For example:
rule "Do something only when two Items are ON" when Item MyItem1 changed to ON or Item MyItem2 changed to ON then if(MyItem1.state != ON || MyItem2.state != ON) return; // rule code end
If you are using the PaperUI Experimental Next Gen Rules Engine, you would put the conditions in the “But only if…” section.