2017-02-05 7 views
1

Возможно ли выполнить поиск устройства Bluetooth с учетом его адреса в сценарии Nodejs?Поиск Nodejs известного устройства bluetooth

Существует несколько пакетов, основная из которых является благородной. Тем не менее, все они фокусируются на сканировании и не просматривают известный адрес (насколько я могу судить в любом случае!).

Что я хочу достичь, это найти известный адрес, чтобы узнать, можно ли найти устройство. Многого, как PyBluez делает для Python: bluetooth.lookup_name('CC:20:E8:8F:3A:1D', timeout=5)

В Python, это может найти устройство, даже если это непознаваемое, в отличии от типичного запроса сканирования будет.

ответ

0

У меня была такая же проблема, и я нашел btwatch lib, но он не работает для меня на последнем raspbian. Но источник просто вызывает l2ping и ищет строку, которая, как я полагаю, больше не печатает на успех, поэтому вместо этого работает измененный код ниже, похожий на метод lookup_name, после установки l2ping (я думаю, что npm bluetooth или pybluez имеет она)

var Spawn = require('child_process').spawn; 

function detectMacAddress(macAddress, callback) 
{ 
    //var macAddress = '72:44:56:05:79:A0'; 
    var ls = Spawn('l2ping', ['-c', '1', '-t', '5', macAddress]); 

    ls.stdout.on('data', function (data) { 
     console.log("Found device in Range! " + macAddress); 
     callback(true); 
    }); 

    ls.on('close', function() { 
     console.log("Could not find: " + macAddress); 
     callback(false); 
    }); 
} 

Или синхронным способом,

var execSync = require('child_process').execSync; 

function detectMacAddressSync(macAddress) 
{ 
    var cmd = 'l2ping -c 1 -t 5 ' + macAddress; 
    try 
    { 
     var output = execSync(cmd); 
     console.log("output : "+ output); 
     return true; 
    } 
    catch(e) 
    { 
     console.log("caught: " + e); 
     return false; 
    } 
} 
+1

Ах! удивительно! Это именно то, чем я был. Спасибо. – jdrucey

0

Насколько я понял, проблема, которую вы хотите подключить к устройству, используя адрес. Тогда я бы предложил использовать node-bluetooth-serial-port.

var btSerial = new (require('bluetooth-serialport')).BluetoothSerialPort(); 

btSerial.on('found', function(address, name) { 
    btSerial.findSerialPortChannel(address, function(channel) { 
     btSerial.connect(address, channel, function() { 
     console.log('connected'); 

     btSerial.write(new Buffer('my data', 'utf-8'), function(err, bytesWritten) { 
      if (err) console.log(err); 
     }); 

     btSerial.on('data', function(buffer) { 
      console.log(buffer.toString('utf-8')); 
     }); 
    }, function() { 
     console.log('cannot connect'); 
    }); 

    // close the connection when you're ready 
    btSerial.close(); 
}, function() { 
    console.log('found nothing'); 
}); 
}); 

BluetoothSerialPort.findSerialPortChannel (адрес, обратный вызов [, errorCallback])

Проверки, если устройство имеет последовательный ход службы порта, и если он будет найден, он передает идентификатор канала, чтобы использовать для RFCOMM подключение.

callback (channel) - вызывается при завершении поиска последовательного порта на устройстве. errorCallback - вызванный поиск завершен, но на устройстве не обнаружен канал последовательного порта. Подключается к удаленному Bluetooth-устройству.

bluetoothAddress - адрес удаленного устройства Bluetooth.

канал - канал для подключения. [successCallback] - вызов, когда соединение установлено. [errorCallback (err)] - вызывается, когда попытка подключения приводит к ошибке. Параметр - это объект Error.

+0

HI rresol, я только что сделал некоторые игры вокруг с этим. Кажется, что это работает не так, как на примере Python. Похоже, что поскольку устройство, которое я тестирую, не транслирует какие-либо каналы, 'BluetoothSerialPort.findSerialPortChannel' всегда терпит неудачу, если его не обнаружено. На этом этапе я пытаюсь просто проверить, присутствует ли устройство. Я не уверен в внутренней работе любого из них, но кажется, что Pythons '.lookup_name' просто ищет устройство, но библиотека bluetooth-serialport ищет устройство ** и **, чтобы иметь доступные каналы. если это имеет смысл? – jdrucey