If you want non-standard states (e.g. your “partial” if mixed) you need to use a Rule. However, if you put your Rollershutters into a group it is a really simple Rule.
rule "Shutters State"
when
Item gAllShutters received update
then
val numUp = gAllShutters.members.filter[s|s.state == UP].size
val total = gAllShutters.members.size
switch numUp {
case total: AllShutters.postUpdate("up")
case 0: AllShutters.postUpdate("down")
default: AllShutters.postUpdate("partial")
}
end