I just replaced a battery in a zigbee motion sensor. The brand new battery is showing in HA as only 70% and a zigbee leak sensor that has been showing 0% for a week still works and keeps reporting the temperature. My one battery powered zwave device does not show a battery level at all. Other zigbee devices are reporting “unavailable” for battery level.
Sometimes it takes a while for the device to start reporting the battery change.
Do you have a multimeter that you can measure the voltage and/or does it report its voltage? It might just be on it a last legs.
I’ve found that some zwave devices show the battery level as a attribute of another sensor, rather than a dedicated battery sensor. You can either create one manually or there are some examples of battery notification scripts that can generate one automatically for you
Is this consistently? Generally following a restart of HA (In my case via Zigbee2MQTT) zigbee devices all report unavailable until it sends an update poll. Can you manually trigger the device and see if it updates and/or check the logs and see if it is actually reporting a value?