MAC Address of RuuviTag

I am trying to get MAC address of Ruuvi Tag on an iPhone. The app is written in React Native and it works fine on Android. But on iOS devices, I am not able to see MAC, only UUID is visible. I have tried updating the Ruuvi Tag to latest FW but it doesn’t help. After updating FW, I was able to see MAC on Ruuvi Station application for iOS but couldn’t find it in the response of my own code.
Is it even possible to get MAC on iOS? Because here it is mentioned that getting MAC on iOS is not supported.

You will be able to get the MAC address from the data packet sent by the tag.

The packet breakdown can be found at:

Hi,
Thanks for your quick response.

Currrently, this mQQFE5I8YL2k/qz/yAPYo/aKPXnKoSJ83Sw= is the format of manufacturer ID I am getting. How can I get MAC from this?

Hello,

You’ll need to parse the MAC from the payload. Please make sure your tag is having firmware version 2.5.9 and broadcasting the data in RAWv2 format: lab.ruuvi.com/dfu.

You can then get the MAC from the payload, not from the UUID as reported by IOS. @theBASTI0N linked the details above.

Hello,

I’ve updated the firmware to version 2.5.9 and I am able to see MAC in the Ruuvi’s official iOS application RuuviStation, that app also shows that I have data format 5 protocol.
But it doesn’t seem to work with the app I have created. I am using ‘react-native-ble-plx’ package to detect beacons using Bluetooth.
A picture of response I am getting is attached. Please guide how to proceed.

On a quick look this might be a limitation of react-native-ble-plx: https://github.com/Polidea/react-native-ble-plx/wiki/=-FAQ:-Beacons

If your library doesn’t support manufacturer data, you should contact Polidea to discuss your options or use some other library.

Hi,

Thanks for the reply. Using react-native-beacons-manager seems to be the solution here. But in the documentation of this package it says to define a region before requesting. What that exactly is?
You can see in the picture below that region is defined with UUID and some identifier. Is this the uuid of the beacon? Why would I provide the uuid of the beacon I am about to scan? image

@Rinat can you help here?

Hi @Rinat / @otso,

Can you please comment on this. We are quite stuck here.

Hello @Ariful_Islam,

It seems that the manufacturer data you’re getting is base64-encoded, I ran it through this base64tohex decoder and got 0x99040513923c60bda4feacffc803d8a3f68a3d79caa1227cdd2c which is Ruuvi data,
9904 -> Ruuvi Innovations
0513923c60bda4feacffc803d8a3f68a3d79caa1227cdd2c -> Ruuvi Data 5.
caa1227cdd2c -> MAC address.

Hi! Why are you using CLBeaconRegion in CoreLocation framework?

Here is additional info about regions: https://stackoverflow.com/questions/20562257/ibeacon-difference-between-proximityuuid-and-region-identifier

If you need just to listen to advertisements, you can use CoreBluetooth framework and parse the data being broadcasted (as Otso suggests
) to get the MAC.

I didn’t implement it in react native, but for native iOS you can try BTKit - https://github.com/rinat-enikeev/BTKit

Please let me know if it helped.