Accessing Minor & Major from iBeacon scan
Using ADV_MANUFACTUER_DATA I can cleary see the UUID of the iBeacon I am scanning for. However I cannot view the Major, although I believe I can see the Minor. Obviously to gain the full use of Ibeacon I need to see the minor and major identifiers.
This is the output of the below code -> 4c0002152f234454cf6d4a0fadf2f4911ba9ffa600610003b4
The uuid is 2f234454-cf6d-4a0f-adf2-f4911ba9ffa6 and you can clearly see that in the payload. The Minor is 3 and the major is 977. What am I missing here??
d_in=bluetooth.resolve_adv_data(adv.data, Bluetooth.ADV_MANUFACTURER_DATA) if d_in: print(ubinascii.hexlify(d_in))
Just an update, this project got parked for a while, but have tried it this morning and your code did work. Appreciate the assistance!
Many thanks, implementing that now, will get back to you
This post is deleted!
Meriç SARIIŞIK last edited by
When you divide the manufacturer_data into fields, you will see the other data. I prepared some lines as follows.
d_in = bt.resolve_adv_data(adv.data, Bluetooth.ADV_MANUFACTURER_DATA) manuf_data = ubinascii.hexlify(d_in[0:4]) if manuf_data == b'4c000215': uuid = ubinascii.hexlify(d_in[4:20]) major = ubinascii.hexlify(d_in[20:22]) minor = ubinascii.hexlify(d_in[22:24]) tx_power = ubinascii.hexlify(d_in[24:25]) tx_power_real = twoscmp(int(tx_power, 16)) major_int = int(major, 16) minor_int = int(minor,16) print(read_adv,manuf,manuf_data, uuid, major, minor, tx_power_real, major_int)
Can you try this code?
Also, you can use this function for 2's complement.
def twoscmp(value): if value > 128: value = value - 256 return value