mjaakko / NeoStumbler

New stumbler application for contributing data to Mozilla Location Services
MIT License
101 stars 8 forks source link

Collect more data from Bluetooth Beacons #100

Closed mjaakko closed 1 month ago

mjaakko commented 2 months ago

Currently only the MAC address of a Bluetooth beacon is included in the beacon data. It would be useful to collect more data from beacons, such as beacon type (e.g. iBeacon, Eddystone etc.) and its identifiers (e.g. UUID, major and minor in case of iBeacons)

DylanVanAssche commented 1 month ago

This would be really nice so support for collecting Waze Beacons inside tunnels could be added :) In that case you don't have a GPS signal though, but you can still collect them at regular intervals. Based on the time between losing and re-acquiring the GPS signal, you can estimate the beacon locations as they are spread among the tunnel at a fixed distance from each other. These beacons have a special UID namespace: 0xEDE5A7B1986E2BE4CA5A

Currently, NeoStumbler does not collect them if there is no GPS signal I think?

Some specification information:

mjaakko commented 1 month ago

Looking at the documentation it seems that Waze beacons transmit data either as a iBeacon or as an Eddystone? Those are already supported, unless there is something special in the data format they use.

Currently, NeoStumbler does not collect them if there is no GPS signal I think?

No. Reports are only created when both wireless devices are detected and a recent location is available. You might be able to get location in a tunnel, if using the fused location provider with Google Play Services, but that's not going to be very reliable

I'll have to think how it would be possible to estimate the location inside a tunnel. Simple cases such as short straight tunnels should be doable by interpolating between two locations

DylanVanAssche commented 1 month ago

I'll have to think how it would be possible to estimate the location inside a tunnel. Simple cases such as short straight tunnels should be doable by interpolating between two locations

After some research, I know how Waze collects them:

  1. Wait for GPS to be lost
  2. Collect the beacon IDs + signal strengths and keep the order of appearance
  3. GPS signal back? Calculate distance
  4. Spread the beacons among the distance, same spacing between them.
mjaakko commented 1 month ago

After some research, I know how Waze collects them:

Any source for this? I would be interested in how Waze handles more complex cases, e.g. https://www.openstreetmap.org/#map=14/62.4893/6.1936

DylanVanAssche commented 1 month ago

No source unfortunately, I talked to some Waze community members who told me how they have to collect them when new beacons are placed. They do collect them for each tunnel manually, so Waze will probably handle them also manually I guess...