You would have to do this anyway if you use a proxy item. No matter your approach, you have to have code somewhere that determines whether the rollershutters need to be down or not.
However, if you use Design Pattern: Separation of Behaviors (Design Pattern: Simple State Machine (e.g. Time Of Day) is a specific implementation of this) you can, and should centralize the calculation of whether or not the shutters should be down and set a flag Item. Then in the original rule and in the second rule you just need to check the flag.
So it becomes:
rule "Calculate the desired shutter state"
when
// whatever events indicate that the rollershutters should change state
System started
then
// Calculate whether the rollershutters should be open or not
DesiredRollerShutterState.sendCommand(newState)
end
rule "Control rollershutters"
when
Item DesiredRollerShutterState changes
then
gRollershutters.members.forEach[ rs |
val sensor = gRollershutterContacts.members.findFirst[ s | s.name = rs.name+"_Sensor" ]
if(sensor == null || sensor.state == CLOSED) rs.sendCommand(DesiredRollerShutterState.state)
]
end
rule "Close rollershutters when doors close if necessary"
when
Member of gRollershutterContacts changes to CLOSED
then
if(DesiredRollerShutterState.state != triggeringItem.state)
sendCommand(triggeringItem.name.replace("_Contact",""), DOWN)
end