I feel like this may be a little known secret. I just started my journey with smart locks and one of my other posts @mike.maxwell mentioned using lock mirror to make sure things were all locked up for the night or when leaving.
Originally I had in my goodnight rule a simple lock command being sent to all 4 locks. I think due to the FLiRS beaming it was struggling to lock all 4 at once, and actually causing the entire mesh to slow down for a few seconds. So I decided to see if the Lock Mirror I had heard about had any sort of optimization or metering, and it basically has both. If enabled it only commands locks that need the state changed, and commands them one at a time.
This is part of the system Mirror app, and you add a Lock Mirror child to it.
First you create your Virtual Lock, to sort of use like a state-less group. I used the (no codes) virtual lock driver since I only want to mirror the lock command. Then once setup you just send a lock command to that virtual device to lock all the locks selected in the app.
The announcement via TTS is the icing on the cake, it is perfect.
Here is my setup in Lock Mirror
The Docs explain all the options pretty well so no sense in re-explaining it
For the developer inclined people here, I've resolved similar "sometimes doesn't listen" issues, but with my window shades rather than locks. My locks are all auto-locked, so there's never a time where all the locks get commanded at the same time. But my blinds are almost always commanded at the same time, at least all of them in a specific room, but often all of them in the house. Similarly, tho ZigBee, the blinds occasionally fail to "listen". Probably the same issue with FLiRS, but whatever the ZigBee version of that is.
So what I've done is add a few lines to the driver where any time they get a "setLevel" command they store a state variable for "desiredLevel". 30 seconds after a setLevel command, the driver calls a refresh() on them and checks their level/position. If it matches "desired", it deletes the state variable for desiredLevel. If it doesn't match, it command the blinds to move again to "desired" level. Every now and again it'll catch a failure and 30 seconds after the shade should have move it actually does. But short of a completely dead battery, there's never once been a failure of the shades to move as they're supposed to.
Sadly, the "Mirror" app, while able to create mirrors for shades/blinds in the app, doesn't allow for any sort of "retry" setting on shades. It seems that "custom mirror" doesn't have that functionality.