I've used a GoControl contact sensor (WADWAZ-1) to monitor my garage door for the last 3-4 years. It was working fine. About a week ago, the contact state wouldn't change occasionally when door was raised/lowered (so when the contact was open, it would report as closed and vice-versa).
The device page in Hubitat reported the battery level as 100%. But I changed the battery anyway yesterday. The old battery was 3.04V while the new battery was 3.28V.
In any event, the issue seems to have disappeared. It seems reasonable to have to replace a battery every 3-4 years. OTOH, 3.04V doesn't seem that far away from 3.28V and Hubitat did report it as being 100%, and maybe just removing the sensor and replacing the battery fixed the reed switch for a bit.
So I have a general question - how low can the voltage be on a CR123A battery without compromising the function of a contact sensor?
In my experience, my multimeter reads new lithum batteries at a bit above 3.2V when new. By the time they get close to 3.0V, they're practically dead in my experience, and if I find one that's around 2.7-2.8 V (as I do on occasion), it's usually been dead for a while before I noticed. Lithium battery life is harder to estimate because the decline isn't linear: it stays at a fairly high voltage most of its life, then sharply declines when it's near the end. I imagine this complicates percentage-based reporting due to both the non-linearity but also the fact that if battery checkins aren't frequent enough and the battery drains quickly, it might not even have time to catch this happening.
Your actual readings might vary--I'm not sure how calibrated mutlimeters are and I've certainly never compared mine to anything. This is just what I see on mine, but it sounds similar to you.
I used to use a GoControl Z-Wave Motion Detector. It reported it battery level to Hubitat as 100%, and it never changed over the course of a year. I am not sure those devices report their battery levels very accurately. I believe @krlaframboise has had some experience with these devices, as I am pretty sure he wrote some of the original drivers for them. Perhaps he could chime in with his experience?
The control/linear contact sensors only report good/bad for the battery level so if you wake the device up and it's still showing 100% then the battery should be fine.
I installed some of mine 2+ years ago and they're still working fine with the original batteries so I'll check the voltage of one of them tonight.
I have at least 20 different devices that use CR123A batteries and I usually use old batteries while testing the handlers I write. I'm pretty sure I've never had a problem with a battery that was above 2.95V, but most of my testing is done within 15' of the hub...
Temperature will also play a role in how well a battery performs at certain charge levels where extreme cold will cause the device to quite working prematurely or if it still works show a lower charge then it may work again or the charge will show higher when the temperature rises above freezing, even heat will effect the performance just not as drastically as freezing temps.