Below is some code to make a Puck.js (or Pixl.js or MDBT42) act as a beacon to be tracked via Apple's massive Find My network ...act as an Apple AirTag equivalent if you will. Thus you can find your Puck.js if you lose it.
An Apple Mac computer is required though.
It is some Espruino code to mimic the beacon code of the OpenHaystack framework. It is based on Eric Betts original code.
The code:
/*
OPENHAYSTACK
A framework for tracking personal Bluetooth devices via Apple's massive Find My network
2021-07-15 SK
*/
print("OpenHaystack Beacon\n===================\n");
const key_b64 = "Fy5SNl1ehMqUe49PJ4sxgrvTJLj/hlNjVYy5q1=="; // replace with your public (advertisement) key
function b64ToArray(str) {
let bstr = atob(str);
let arr = [];
for (let i = 0; i < bstr.length; i++) {
arr[i] = bstr.charCodeAt(i);
}
return arr;
}
const key = b64ToArray(key_b64); // public key
print("Public key:");
print("- base64:\n" + key_b64);
print("- hexadecimal:\n" + key.map(x => x.toString(16).padStart(2, '0')).join(' '));
const mac = [ key[0] | 0b11000000, key[1], key[2], key[3], key[4], key[5] ].map(x => x.toString(16).padStart(2, '0')).join(':'); // mac address
print("\nMAC address:\n" + mac);
const adv = [ 0x1e, 0xff, 0x4c, 0x00, 0x12, 0x19, 0x00, key[6], key[7], key[8], key[9], key[10], key[11], key[12], key[13], key[14], key[15], key[16], key[17], key[18], key[19], key[20], key[21], key[22], key[23], key[24], key[25], key[26], key[27], key[0] >> 6, 0x00 ]; // advertising packet
print("\nAdvertising packet:\n" + adv.map(x => x.toString(16).padStart(2, '0')).join(' ') + "\n");
NRF.setAddress(mac);
NRF.setAdvertising(adv, {interval:5000});
print("\nTo start beacon click on IDE upper-left icon to disconnect board. BLE stack will restart");
print("Then reset (if code saved in RAM) / hard-reset (if code in Flash) board to reconnect IDE");
print("To hard-reset hold BTN1 for >5s while repowering the board. Type reset(1) to erase Flash");
...yields:
____ _
| __|___ ___ ___ _ _|_|___ ___
| __|_ -| . | _| | | | | . |
|____|___| _|_| |___|_|_|_|___|
|_| espruino.com
2v09 (c) 2021 G.Williams
>
OpenHaystack Beacon
===================
Public key:
- base64:
Fy5SNl1ehMqUe49PJ4sxgrvTJLj/hlNjVYy5q1==
- hexadecimal:
17 2e 52 36 5d 5e 84 ca 94 7b 8f 4f 27 8b 31 82 bb d3 24 b8 ff 86 53 63 55 8c b9 ab
MAC address:
d7:2e:52:36:5d:5e
Advertising packet:
1e ff 4c 00 12 19 00 84 ca 94 7b 8f 4f 27 8b 31 82 bb d3 24 b8 ff 86 53 63 55 8c b9 ab 00 00
BLE Connected, queueing BLE restart for later
To start beacon click on IDE upper-left icon to disconnect board. BLE stack will restart
Then reset (if code saved in RAM) / hard-reset (if code in Flash) board to reconnect IDE
To hard-reset hold BTN1 for >5s while repowering the board. Type reset(1) to erase Flash
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Below is some code to make a Puck.js (or Pixl.js or MDBT42) act as a beacon to be tracked via Apple's massive Find My network ...act as an Apple AirTag equivalent if you will. Thus you can find your Puck.js if you lose it.
An Apple Mac computer is required though.
It is some Espruino code to mimic the beacon code of the OpenHaystack framework. It is based on Eric Betts original code.
The code:
...yields: