Go Haystack lets you track personal Bluetooth devices via Apple's massive "Find My" network.
It uses OpenHaystack together with Macless-Haystack to help you setup a custom FindMy network with tools written in Go/TinyGo.
This package provides firmware written using TinyGo and the TinyGo Bluetooth package.
As a result, any of the following hardware devices should work:
- Adafruit Bluefruit boards using nRF SoftDevice - https://github.com/tinygo-org/bluetooth?tab=readme-ov-file#adafruit-bluefruit-boards
- BBC Microbit using nRF SoftDevice - https://github.com/tinygo-org/bluetooth?tab=readme-ov-file#bbc-microbit
- Other Nordic Semi SoftDevice boards - https://github.com/tinygo-org/bluetooth?tab=readme-ov-file#flashing-the-softdevice-on-other-boards
- Boards using the NINA-FW with an ESP32 co-processor - https://github.com/tinygo-org/bluetooth?tab=readme-ov-file#esp32-nina
- Boards such as the RP2040 Pico-W using the CYW43439 co-processor - https://github.com/tinygo-org/bluetooth?tab=readme-ov-file#cyw43439-rp2040-w
You can also run the beacon code on any Linux that has Bluetooth hardware, such as a Raspberry Pi or other embedded system.
The beacon code is located in the firmware directory.
You must have an Apple-ID with 2FA enabled. Only sms/text message as second factor is supported!
Start anisette-v3-server
docker network create mh-network
docker run -d --restart always --name anisette -p 6969:6969 --volume anisette-v3_data:/home/Alcoholic/.config/anisette-v3 --network mh-network dadoum/anisette-v3-server
- Start and set up your Macless Haystack endpoint in interactive mode:
docker run -it --restart unless-stopped --name macless-haystack -p 6176:6176 --volume mh_data:/app/endpoint/data --network mh-network christld/macless-haystack
You will be asked for your Apple-ID, password and your 2FA. If you see serving at port 6176 over HTTP
you have all set up correctly
Hit ctrl-C to exit the process once it has been configured.
- Restart the macless-haystack server
docker restart macless-haystack
See https://github.com/dchristl/macless-haystack/blob/main/README.md#server-setup for the original instructions.
Install the go-haystack command line tool
go install github.com/hybridgroup/go-haystack
go-haystack scan
Should return any local devices within range:
$ go-haystack scan
FE:B0:67:9B:9A:5C -67 10 feb0679b9a5c55b1141c5cc6c8f65224ae9bc6bc2d998ccf5c56a02d
CE:8B:AD:5F:8A:02 -85 10 ce8bad5f8a0271538ff5afda87498cb067e9a020d6e4167801d55d83
F6:32:5F:52:00:75 -49 10 f6325f520075e27edc03c925823a10222ec68cb7752554056b1072f7
FE:B0:67:9B:9A:5C -66 10 feb0679b9a5c55b1141c5cc6c8f65224ae9bc6bc2d998ccf5c56a02d
CE:8B:AD:5F:8A:02 -81 10 ce8bad5f8a0271538ff5afda87498cb067e9a020d6e4167801d55d83
F6:32:5F:52:00:75 -55 10 f6325f520075e27edc03c925823a10222ec68cb7752554056b1072f7
FE:B0:67:9B:9A:5C -63 10 feb0679b9a5c55b1141c5cc6c8f65224ae9bc6bc2d998ccf5c56a02d
CE:8B:AD:5F:8A:02 -90 10 ce8bad5f8a0271538ff5afda87498cb067e9a020d6e4167801d55d83
F6:32:5F:52:00:75 -50 10 f6325f520075e27edc03c925823a10222ec68cb7752554056b1072f7
FE:B0:67:9B:9A:5C -66 10 feb0679b9a5c55b1141c5cc6c8f65224ae9bc6bc2d998ccf5c56a02d
CE:8B:AD:5F:8A:02 -80 10 ce8bad5f8a0271538ff5afda87498cb067e9a020d6e4167801d55d83
F6:32:5F:52:00:75 -54 10 f6325f520075e27edc03c925823a10222ec68cb7752554056b1072f7
- Generate keys for a device
go-haystack keys DEVICENAME
The keys will be saved in a file named DEVICENAME.keys
and the configuration file for Haystack will be saved in DEVICENAME.json
. Replace "DEVICENAME" with whatever you want to name the actual device.
- Flash the hardware with the TinyGo target and the name of your device.
For example:
go-haystack flash nano-rp2040 DEVICENAME
This will use TinyGo to compile the firmware using your keys, and then flash it to the device. See https://tinygo.org/getting-started/overview/ for more information about TinyGo.
- Upload the JSON file for that device to your running instance of
macless-haystack
using the web UI.
Point your web browser to https://dchristl.github.io/macless-haystack/
which is a single-page web application that only reads/writes local data. Click on the link for "Accessories", then on the "+" button. Choose the DEVICENAME.json
file for your device.
That's it, your device is now setup.
Eventually, if your device is in range of any iPhone, they will appear in your Macless-Haystack data in the web UI.
Note that it might take a while for the first data to show up.
Have fun, be good!