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 RaspPi
iBeacons
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?
Ja! Mit Ihrem Raspberry Pi können Sie nach iBeacons suchen. Wir haben unten ein Skript zusammengestellt, mit dem Sie dies tun können.
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.
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"
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.