findphone: Bluetooth-apparaten lokaliseren via signaalsterkte op macOS

Installatie

Je kunt de universele binary downloaden via de 'Releases'-sectie:

tar -xzf findphone-macos-universal.tar.gz
xattr -dr com.apple.quarantine findphone
./findphone --help

Let op: Omdat de binary niet is ondertekend, plaatst macOS deze bij downloaden in quarantaine; de xattr-commando heft dit op. De tool vereist macOS 13 of later.

Zelf compileren

Om de tool zelf te bouwen, heb je de Swift toolchain van de Xcode Command Line Tools nodig. Er zijn geen externe afhankelijkheden.

swift build -c release
cp .build/release/findphone ~/bin/findphone

Voor een universele arm64 + x86_64 binary (zoals geleverd via CI):

./scripts/build-universal.sh dist

Gebruik

De tool kan op verschillende manieren worden aangeroepen:

  • findphone : Survey-modus. Scan alle nabijgelegen Apple handhelds op basis van signaalsterkte.
  • findphone iphone : Hunt-modus. Volg één specifiek apparaat op naam (hoofdletterongevoelig).
  • findphone --list : Toont een overzicht van gekoppelde apparaten en hun adressen.

Extra opties

Geluidsfeedback (--sound) Voeg --sound toe in de hunt-modus voor klikgeluiden die versnellen naarmate je dichterbij komt, vergelijkbaar met een parkeersensor. Het tempo ligt rond de één keer per seconde aan de andere kant van de kamer en stijgt naar een zoemgeluid zodra het signaal ongeveer -50 dBm bereikt (het moment dat een laptop ongeveer bovenop de telefoon ligt). Hiermee kun je een ruimte op gehoor afzoeken in plaats van constant naar het scherm te kijken.

Let op: Dit is geen geigerteller. Waar een geigerteller klikt per gedetecteerd deeltje, wordt het tempo hier berekend op basis van het gesmoothede signaal. Pakketten komen binnen via een vaste polling-timer van 0,3s; de aankomstfrequentie zegt dus vrijwel niets over de afstand.

Privacy (--redact) Voeg --redact toe als je het scherm opneemt. Deze optie maskeert Bluetooth-adressen en vervangt in de survey-modus de namen van ontdekte apparaten door het type apparaat (omdat deze namen niet altijd van jou zijn). Een publiek adres is een stabiele hardware-identifier die, in tegenstelling tot een BLE-advertentieadres, niet roteert; daarom is het verstandig deze uit video's te houden.

Let op: De naam die je zelf invoert in de hunt-modus en de namen in --list blijven zichtbaar, omdat je deze nodig hebt om een doelwit te kiezen. --list is zelfs met --redact niet veilig om te filmen.

Signaalsterkte en afstand

Loop langzaam en let op de balk. De waarde geeft de signaalsterkte weer in dBm; dit is een negatief getal dat dichter bij nul komt naarmate je dichterbij bent:

dBmBetekenis (indicatief)
-45 of hogerBinnen handbereik
-60Op dezelfde tafel
-72In dezelfde kamer
-85Ver weg, of achter een object
Lager dan -85Zeer ver weg, of afgeschermd

Belangrijke kanttekening: Signaalsterkte is slechts een grove benadering van afstand. Metaal, muren en menselijke lichamen dempen het signaal sterk. Een apparaat in een metalen archiefkast op twee meter afstand kan dezelfde waarde geven als een apparaat op vijftien meter afstand in de open lucht. Vertrouw op de trend terwijl je beweegt, niet op één enkel getal.

Hoe het werkt

De tool gebruikt drie bronnen voor de meting, gesorteerd van beste naar slechtste kwaliteit:

  1. GATT-link: Zodra er via BLE verbinding is gemaakt met het apparaat, geeft readRSSI() ongeveer drie keer per seconde een verse meting. Dit is de meest nauwkeurige bron.
  2. BLE-advertenties: Deze worden passief waargenomen. Apple-apparaten roteren hun advertentieadressen ongeveer elke vijftien minuten en voegen alleen incidenteel de apparaatnaam toe aan pakketten, waardoor deze bron schaars is.
  3. Classic link RSSI: Wordt gelezen via system_profiler SPBluetoothDataType, gekoppeld aan het stabiele publieke adres van een gekoppeld apparaat.

Bij bron 3 is er een belangrijke beperking: macOS ververst deze waarde slechts elke drie tot twaalf seconden en serveert daartussenin een gecachte waarde. Sneller pollen levert geen extra informatie op. De tool telt een meting daarom pas wanneer de waarde daadwerkelijk verandert, wat verklaart waarom het aantal gerapporteerde metingen veel lager is dan de poll-rate.

Machtigingen

De tool heeft Bluetooth-toegang nodig voor de terminal waarin deze wordt uitgevoerd. Dit kan worden ingesteld via: Systeeminstellingen > Privacy en beveiliging > Bluetooth. De tool zal een melding geven als deze permissie ontbreekt.

Beperkingen

  • Geen geluid activeren: Het is niet mogelijk om het apparaat te laten rinkelen; dit kan alleen via 'Zoek mijn'.
  • Geen richting: Eén radio-interface geeft alleen afstand aan, geen richting (bearing).
  • Bereik: Alleen apparaten met ingeschakelde Bluetooth binnen bereik kunnen worden gevonden (ongeveer 10-20 meter binnenshuis, aanzienlijk minder door muren heen).