2014-06-25 22 views
14

Ciao c'è un modo per ottenere la potenza del segnale di vicino da bluetooth le periferiche in linux? O nulla di buono librerie per nodejs, php o mono (che so un po 'di C++ o Python, ma preferirei dire lontano da loro), se uno strumento non exsist ma sarebbe abbastanza facile scrivereForza segnale Bluetooth LE Linux

Grazie

risposta

28

Su Linux, il modo per farlo è con il comando hcitool. Tuttavia, devi essere connesso per ottenere l'rssi di un dispositivo. Se si vuole raggiungere questo dalla riga di comando, provare:

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

Se volete vedere il codice effettivo C per raggiungere questo obiettivo, dare un'occhiata al file bluez tools/hcitool.c, sotto la funzione cmd_rssi.

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

Per Bluetooth Low Energy, so solo un modo per fare questo, e che sta usando il comando #btmon. Eseguire btmon in background quindi eseguire la scansione dei dispositivi Bluetooth Low Energy:

#./btmon & 
# hcitool lescan 

I risultati visualizzati sul monitor dovrebbe essere simile a questo:

> 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> 

Si noti che quando si utilizza btmon Non è necessario per la connessione per ottenere l'rssi di un dispositivo BLE.

Spero che questo aiuti.

+2

hcitool RSSI sembra essere solo per il Bluetooth regolare non BLUETOO il risultato è "Ottieni informazioni di connessione non riuscite: nessun file o directory" quando provo anche quando connesso (per le le bluetooth collegate da hcitool lecc [MAC] non al normale hcitool cc [MAC], –

+0

Contrassegnato alla domanda con bluetooth -lowenergy perché mi mancava la parte :) Hai provato #hcidump? Ho letto che puoi usarlo per leggere il valore rssi dei dispositivi Low Energy ma non ho dispositivi con me per testarlo. –

+1

Modificata la domanda per includere la parte Bluetooth Low Energy. Ho provato #hcidump e non ha funzionato per me, ma #btmon ha funzionato bene. –

4

È possibile utilizzare una combinazione di: sudo hcitool lescan --duplicates &; sudo hcidump --raw

che fornirà il dump raw di tutti i pacchetti Bluetooth che contengono tutte le informazioni rilevanti a cui è necessario essere interessati: UUID, Major, Minor, RSSI, TxPower. Dovrai eseguire una sorta di script per analizzare e filtrare i pacchetti LE e renderli in una forma leggibile.

Uno degli script scritti con Bash e S editore è stato fornito da jjnebaker here il problema e la soluzione discusso here

l'altra opzione è quella di utilizzare PyBluez utilizzando l'esempio di codice here ma si potrebbe trovare la soluzione fornita da laboratori Switchdoc utili anche in base alle vostre esigenze. here

2

Ok dispiace per l'altra risposta ...

Questo funziona per il linguaggio C, ma ha un errore in fase di lancio i byte che hanno le informazioni su segnali de RSSI. https://github.com/glock45/intel-edison-playground/blob/master/scan.c

questa linea 121: printf ("% s - RSSI% d \ n", addr, (char) info-> Dati [Info-> lunghezza]);

dovrebbe essere: printf ("% s - RSSI% d \ n", addr, (int8_t) info-> Dati [Info-> lunghezza]);

ho trovato questi cercando all'interno di bluez-version/monitor/*. C, dove è il programma btmon. È possibile vedere i tipi di dati e le strutture, hcidump.c è molto utile e packets.c, e main.c troppo, ma ci sono molti di conoscere le prese di HCI

0

prova:

$ bluez-test -Discovery

uscita:

[ 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 

ti dà: RSSI = -65

Problemi correlati