I have the below rule to change a virtual contact sensor to open/closed but the virtual sensor never closes. Any help appreciated.
The rule looks ok to me... Perhaps turn on some of the logging options and see what is happening...?
To add to the above, does something else ever "open" this virtual sensor? If not, you won't get a state change (even if you send another
closed() command), so apps or rules that "trigger" based on it will not see those (non-)events for the virtual sensor.
Obviously, this isn't an explanation for anything if the sensor itself never closes by way of your rule (which it sounds like your problem might be? and it should be noted that as-is, your sensor won't close as a result of this rule since one of your "real" sensors isn't--but I agree with the above that nothing looks wrong, as long as you were aware of the current states), just something else to consider if it never opens. But it's a consideration if you plan to use it in any case.
I have a separate rule for open and it works. I’ll turn on logging and test some more tomorrow.
You might also look at the Device Groups app. With it you can make a group of contacts all get treated as one device. Maybe that would help with what you are wanting the virtual sensor for to begin with?
To follow up, this rule does work. The garage door was in an error state in the Aladdin connect app. Once o cleared that up everything is working as expected.