wake-up-neo.com

Kann Raspberry Pi mit BLE Dongle iBeacons erkennen?

Ich habe ein Developer Kit von Radius Networks Gekauft, das einen ioGear GBU521 BLE 4.0 dongle Und einen Raspberry Pi Enthält. Ich habe auch einen ihrer RadBeacon iBeacons Gekauft. Sie arbeiten beide wie angekündigt, aber ich war etwas überrascht von dem, was ich bekam.

Ich hatte angenommen, dass der RaspPiiBeacons erkennen könnte. Stattdessen wird das Kit so eingerichtet, dass create an iBeacon. Mein Anwendungsfall ist es, zu erkennen, wann ein forklift einen bestimmten Raum betritt, damit ich Arbeit an sie senden kann. Mein Gedanke war, einen iBeacon auf den Gabelstapler zu setzen und dann einen RaspPi zu setzen, der nach iBeacons sucht. Und wenn ein iBeacon (Gabelstapler) entdeckt wurde, konnte man daraus schließen, dass er in der Nähe ist. Ich würde den RaspPi mit dem LAN verbinden und ihm die Informationen über REST or similar Mitteilen lassen. Ich weiß, dass ich einen geeigneten Android or Apple device Eingeben und auf diese Weise ausführen könnte, aber ich verstehe nicht, warum dieser Dongle diese iBeacons nicht erkennen kann, und sage mir, welchen UUID's sind? Was vermisse ich?

38
user1153660

Ja! Mit Ihrem Raspberry Pi können Sie nach iBeacons suchen. Wir haben unten ein Skript zusammengestellt, mit dem Sie dies tun können.

  1. Starten Sie einen Hintergrundprozess, der einen Bluetooth-LE-Scan durchführt:

    Sudo hcitool lescan --duplicates &
    

    Mit dem --duplicates Wenn Sie den Scan festlegen, werden nicht mehrere Pakete von demselben iBeacon ignoriert.

  2. Starten Sie ein hcidump und leiten Sie die Raw-Ausgabe an ein Skript weiter, das nach iBeacon-Paketen filtert:

    Sudo hcidump --raw 
    

Das Filtern ist der heikle Teil, die Rohausgabe von hcidump ist nicht gut formatiert und zeigt auch Pakete an, die keine iBeacon-Übertragungen sind. Um dies zu lösen, haben wir ein Filterskript erstellt, das die Ausgabe zeilenweise einliest und die Rohpakete von der anderen Ausgabe (d. H. MAC-Adressen usw.) trennt. Wir haben bei Radius Networks viel über das iBeacon-Bluetooth-Profil geforscht, mit dem wir iBeacon-Pakete identifiziert und aus Paketen anderer Geräte herausgefiltert haben.

Wir haben das alles zu einem ibeacon_scan Skript, das alles erledigt, einschließlich der Konvertierung der unformatierten Bezeichner in eine für Menschen lesbare Form. Sie können es herunterladen hier . In Kürze werden wir dies in das iBeacon Development Kit aufnehmen, um die Scanfunktion zu erweitern.

Hier ist ein Beispiel für die Ausgabe des Skripts:

$ ./ibeacon_scan
UUID: 74278BDA-B644-4520-8F0C-720EAF059935 MAJOR: 0 MINOR: 73 POWER: -50
UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 6 POWER: -59
UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 MAJOR: 6 MINOR: 9 POWER: -55

Wir haben auch ein -b Option für reine Ausgabe, die leicht in andere Skripte zu zerlegen ist, hier ein Beispiel:

$ ./ibeacon_scan -b
2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 6 -59
E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 6 9 -55
74278BDA-B644-4520-8F0C-720EAF059935 0 73 -50

Mit dieser Option können Sie die Ausgabe des Skripts an Ihr Skript weiterleiten, um Aktionen auszulösen, wenn iBeacons mit bestimmten Bezeichnern erkannt werden.

EDIT: Wir haben dieses Skript überarbeitet, um es reaktionsfähiger und robuster zu machen, und es in die neueste Version des Entwicklungskits integriert =. Das Update kann heruntergeladen werden hier .

EDIT2: Wie von @ sai-ramachandran hervorgehoben, können Sie dieses Skript erweitern, um die RSSI jedes iBeacon-Pakets in zu erfassen Neben POWER. Fügen Sie dazu dem Skript die folgenden Zeilen hinzu:

 RSSI=`echo $packet | sed 's/^.\{132\}\(.\{2\}\).*$/\1/'`
 RSSI=`echo "ibase=16; $RSSI" | bc`
 RSSI=$[RSSI - 256]

und achten Sie darauf, RSSI zur Ausgabe hinzuzufügen:

 echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER RSSI: $RSSI"
71
jjnebeker

Sie haben Recht, dass das iBeacon Development Kit nicht zur Erkennung von iBeacons entwickelt wurde - es wurde zur Übertragung als iBeacon entwickelt.

Das heißt, es ist möglich, iBeacons mit einem Raspberry Pi zu erkennen, indem man eine Variation dessen verwendet, was @ ChrisStratton in seinem Kommentar vorschlägt. Siehe die Antwort von meinem Kollegen @ jjnebeker der ein Skript erstellt hat, um zu wollen, dass Sie wollen.

2
davidgyoung