The cache was not cleared if a char was missing or service resolution failed (there are BleakError guards that may make this ineffective for some chars that might need to be removed, but I don't know which devices this is safe to do for)
asyncio.wait_for creates a task and is not recommended for use because its changes cancellation semantics
To reduce battery drain, once device info has been read, don't read it again except for the sw_version
Note the battery drain reduction change is only effective with this change in HA
2 linter errors, but other than that this PR seems to be working. I've tested this the last few days and I have had zero errors (except my previous comment).
asyncio.wait_for
creates a task and is not recommended for use because its changes cancellation semanticsNote the battery drain reduction change is only effective with this change in HA