agittins / bermuda

Bermuda Bluetooth/BLE Triangulation / Trilateration for HomeAssistant
MIT License
567 stars 12 forks source link

Apple watch inaccuracy #336

Open UncleClaude opened 1 week ago

UncleClaude commented 1 week ago

Hi,

First off, very cool integration, I've been looking for a while to get into this but never had the time, with your integration it makes it so much easier. I've set-up a few ESP32 I had laying around.

I configured my iPhone, my wife's iPhone and my apple watch. The iPhones seems to be accurate however the apple watch isn't, it often gives a few meters off the actual distance if I compare it to my iPhones or if it's a 1m let's say it will go up to 3m and go back to 1m.

Is anyone has experienced this issue with their apple watch?

Config:

image

Diagnostics: config_entry-bermuda-01JB0JEGC9VT1V9SPB76P9NYZ9.json

agittins commented 2 days ago

This is pretty typical for a watch, I think. We have a tiny device, transmitting a 2.4GHz signal (a frequency well into "dark arts" territory), using a tiny antenna bonded onto a porous material, packed into the smallest possible case with a bunch of other RF-blocking materials and then strapped onto a 50+ litre bag of salty water.

The fact that watches' bluetooth works at all is a legitimate miracle! 😆

Here's the last 90 minutes of my watch, and I've been sitting at my desk typing pretty much the whole time. It's actually (grabs tape...) 0.7m from the nearest proxy, but it's also strapped to my arm. image

agittins commented 2 days ago

I just took a look at your diagnostics, and the intervals between adverts is quite long. Looking at the kitchen proxy, the interval_history (a count of how many seconds passed between each of the last adverts received) show:

"hist_interval": [
              23.734108649001428,
              39.03317832499852,
              7.387033709001116,
              48.943222822999815,
              31.332142225999633,
              7.679034800999943,
              15.358069541000077,
              13.789062365000063,
              157.31970572700084,
              29.082129140999314
            ],

Ideally we'd want to see all values between 1 and 3 seconds, assuming the watch is advertising at least once per second. If you are using the default bluetooth proxy settings this might explain it, and you could improve those by using the suggested settings in the wiki.

That may help a bit with getting more consistent "Area" results, however it won't change the fundamental issue that a signal from a wristwatch is always going to give highly variable signal strengths (and therefore distances) just due to its physical situation.