2014-06-25 31 views
14

Witaj, czy jest jakikolwiek sposób na uzyskanie siły sygnału zbliżonej przez bluetooth le devises w systemie Linux? Albo jakieś dobre biblioteki dla nodejs, PHP lub mono (wiem, trochę C++ lub Python, ale wolałby powiedzieć, z dala od nich), czy narzędzie nie exsist ale byłoby dość łatwe do napisaniaSiła sygnału Bluetooth LE Linux

Dziękuję

Odpowiedz

28

W systemie Linux sposobem na to jest komenda hcitool. Jednak musisz być podłączony, aby uzyskać rssi urządzenia. Jeśli chcesz osiągnąć to z wiersza polecenia, spróbuj:

#hcitool rssi AA:BB:CC:DD:EE:FF 

Jeśli chcesz zobaczyć rzeczywisty kod C do osiągnięcia tego celu, spójrz na bluez tools/hcitool.c pliku, w ramach funkcji cmd_rssi.

static void cmd_rssi(int dev_id, int argc, char **argv) 
{ 
    ... 
} 

Dla Bluetooth Low Energy, wiem tylko jeden sposób, aby to zrobić, i że jest za pomocą polecenia #btmon. Uruchom btmon w tle następnie zeskanować dla urządzeń Bluetooth Low Energy:

#./btmon & 
# hcitool lescan 

Wyniki wyświetlane na monitorze powinien być podobny do tego:

> HCI Event: LE Meta Event (0x3e) plen 12                     
     LE Advertising Report (0x02) 
     Num reports: 1 
     Event type: Scan response - SCAN_RSP (0x04) 
     Address type: Public (0x00) 
     Address: AA:BB:CC:DD:EE:FF (<Vendor Name>) 
     Data length: 0 
     ***RSSI: -34 dBm (0xde)*** 
AA:BB:CC:DD:EE:FF <Device Name> 

Należy pamiętać, że podczas korzystania btmon nie trzeba połączyć aby uzyskać rssi urządzenia BLE.

Mam nadzieję, że to pomoże.

+2

hcitool rssi Wydaje się być tylko dla regularny bluetooth nie bluetoo th le, otrzymuję komunikat "Uzyskaj informacje o połączeniu nie powiodło się: brak takiego pliku lub katalogu", gdy próbuję, nawet gdy jest podłączony (dla połączenia Bluetooth łączy się z hcitool lecc [MAC] a nie zwykłym hcitool cc [MAC], –

+0

Tagged the question with bluetooth -energetgy, ponieważ przegapiłem le part :) Czy próbowałeś #hcidump? Czytałem, że możesz go użyć do odczytu wartości rssi urządzeń Low Energy, ale nie mam urządzeń, aby przetestować to. –

+1

Edytował pytanie, aby dołączyć część Bluetooth Low Energy. Próbowałem #hcidump i nie działało to dla mnie, ale #btmon działało dobrze. –

4

Można użyć kombinacji: sudo hcitool Lescan --duplicates &; sudo hcidump --raw

które dostarczy ci surowego zrzutu wszystkich pakietów bluetooth, które zawierają wszystkie istotne informacje, które musisz zainteresować, takie jak: UUID, Major, Minor, RSSI, TxPower. Będziesz musiał uruchomić jakiś skrypt, aby przeanalizować i przefiltrować pakiety LE i przekształcić je w czytelną formę.

Jednym ze skryptów napisanych w bash i S edytor został dostarczony przez jjnebaker here problemu i rozwiązanie omówione here

Inną opcją jest użycie PyBluez na przykładzie kodu here Ale może znaleźć rozwiązanie pod warunkiem, przez laboratoria Switchdoc przydatne również w zależności od potrzeb. here

2

Ok przepraszam za innym rozwiązaniem ...

Działa to dla języka C, ale wystąpił błąd podczas rzucania bajtów, które mają informacje na temat de sygnału RSSI. https://github.com/glock45/intel-edison-playground/blob/master/scan.c

linia 121: printf ("% s - RSSI% d \ n", adres (znak) INFO-> danych [konwergencję nanotechnologii> Długość]);

należy: printf ("% s - RSSI% d \ n", adres (int8_t) konwergencję nanotechnologii> Dane [konwergencję nanotechnologii> Długość]);

znalazłem je, patrząc w bluez-version/monitor/* .c, gdzie jest program btmon. Widać typy danych i konstrukcjom, hcidump.c jest bardzo przydatne i packets.c i main.c też, ale istnieje wiele nauczyć o HCI gniazd

0

try:

$ bluez test -discovery

wyjściowa:

[ 18:7A:93:05:E4:B1 ] 
    Name = AMIYJ_E4B1 
    Paired = 0 
    LegacyPairing = 0 
    Alias = AMIYJ_E4B1 
    Broadcaster = 0 
    UUIDs = dbus.Array([dbus.String(u'0000fff0-0000-1000-8000-00805f9b34fb')], signature=dbus.Signature('s'), variant_level=1) 
    Address = 18:7A:93:05:E4:B1 
    RSSI = -65 
    Class = 0x000000 

daje: RSSI = -65