I got a pile of these BLE beepers. They're advertised as GPS trackers, but they have no GPS functionality as far as I can tell, but I knew that before buying them. Their only function is to beep when another Bluetooth device pokes them in the right way.
They turned out to be too quiet for that purpose, so I can't recommend them, but I did put effort into figuring out how to trigger them from a Linux machine instead of a sketchy phone app. That's poorly documented, so here's some documentation.
Using bluetoothctl
, scan for BLE devices, and grab the MAC address of the tag when it appears:
~ $ bluetoothctl Agent registered [bluetooth]# scan le Discovery started [CHG] Controller 50:2F:9B:15:BB:24 Discovering: yes [...] [NEW] Device FF:23:08:16:81:70 Smart Tag
The tags seem to disappear shortly after the scan finds them. If a [DEL]
line appears for the same tag, this has happened; restart the scan with scan off
then scan le
.
Connect to the tag. (Not pair
. That also connects to it, but in a different mode where it'll get mad after a few seconds that you haven't authenticated, and disconnect and start beeping at you.)
[bluetooth]# connect FF:23:08:16:81:70 Attempting to connect to FF:23:08:16:81:70 [CHG] Device FF:23:08:16:81:70 Connected: yes Connection successful [Smart Tag ]#
Enter the gatt
submenu, and get the list of attributes the tag exposes. Variables are called "Characteristics". They're grouped under "Primary Services". Some of them have "Descriptors" under them. Sometimes the descriptors are labels for what the corresponding characteristic does. Other times they're empty or useless.
One of them is called "Alert Level", in the "Immediate Alert" service. Note its path. (The UUIDs can conflict, because of course they can.)
[Smart Tag ]# menu gatt [Smart Tag ]# list-attributes [...] Primary Service (Handle 0x0000) /org/bluez/hci0/dev_FF_23_08_16_81_70/service000c 00001802-0000-1000-8000-00805f9b34fb Immediate Alert Characteristic (Handle 0x0000) /org/bluez/hci0/dev_FF_23_08_16_81_70/service000c/char000d 00002a06-0000-1000-8000-00805f9b34fb Alert Level
Select that attribute, and write 1
or 2
to it to make it start beeping quickly (about 4 Hz), 3
for slow beeping (about 1 Hz), or 0
to stop beeping.
[Smart Tag ]# select-attribute /org/bluez/hci0/dev_FF_23_08_16_81_70/service000c/char000d [Smart Tag :/service000c/char000d]# write 1 Attempting to write /org/bluez/hci0/dev_FF_23_08_16_81_70/service000c/char000d [Smart Tag :/service000c/char000d]# write 0 Attempting to write /org/bluez/hci0/dev_FF_23_08_16_81_70/service000c/char000d
You can also read from the Battery Level
characteristic. I believe this is a percentage value (0x64 is 100):
[Smart Tag ]# list-attributes [...] Characteristic (Handle 0x0000) /org/bluez/hci0/dev_FF_23_08_16_81_70/service0001/char0002 00002a19-0000-1000-8000-00805f9b34fb Battery Level [Smart Tag ]# select-attribute /org/bluez/hci0/dev_FF_23_08_16_81_70/service0001/char0002 [Smart Tag :/service0001/char0002]# read Attempting to read /org/bluez/hci0/dev_FF_23_08_16_81_70/service0001/char0002 [CHG] Attribute /org/bluez/hci0/dev_FF_23_08_16_81_70/service0001/char0002 Value: 64 d 64 d
The full list of characteristics my tag has is below. Most of these don't seem to do anything. The read/write column is based solely on whether bluetoothctl
reported an error when reading or writing, not whether anything changed.
.../service0001/char0002 | R | Battery level, as a percentage. |
.../service0005/char0006 | R | Tx power. Unsure what units this is in. Defaults to 7. |
.../service0008/char0009 | R/W | Beep mode on signal loss. |
.../service000c/char000d | R/W | Beep right now in this mode. |
.../service0010/char0011 | R | Descriptor says "Button". This device has no buttons. I assume this is for some other device with the same firmware. |
.../service0010/char0015 | W | Descriptor says "Set LinkLost Alert". I don't know what this does. It lets me write numbers to it. They don't affect char0009 . |
.../service0010/char0018 | R | Device's MAC address, as 6 raw bytes. |
.../service0010/char001b | R/W | "reserved", so probably something very exciting. Reads as 20 00 bytes. |
.../service0010/char001e | W | Labeled "Tx Power". Appears not connected to the other one labeled that. |
.../service0010/char0021 | R | Labeled "Modify Device Name", reads as 20 00 bytes, but is read-only. idk. |
.../service0010/char0024 | R/W | "Set Alert" |
.../service002d/char002e | W | ??? |
.../service002d/char0030 | - | ??? Can't read *or* write. |