Linux command line bluetoothctl wrapper for nodejs

powerful command line utulity bluetoothctl for discovery, connect,disconnect, scan, pair etc.. if you want to connect bluetooth speakers , mouse, keyboard etc.. you can use this module. you must install bluetoothctl . for raspberry pi 3 , it comes as default with raspbian. example install process: sudo apt-get install bluez blueman alsa-utils bluez-alsa


  • checkBluetoothController() : checks if bluetooth controler exists or not

  • getPairedDevices() : checks already paired devices.

  • getDevicesFromController() : checks already scanned devices.

  • disconnect(macID) : disconnect from macID

  • info(macID) : checks features of device with given macID

  • pair(macID) : pairs with given macID

  • confirmPassKey(bool) : confirms passkey while paring.

  • scan(bool) : starts or stops scanning of bluetooth devices. while scan is set true, current audio playback might get crackling.. so stop scan after you found what you are searching.

  • discoverable(bool) : sets your raspberry or linux device's bluetooth as discoverable.

  • isScanning : checks if bluetoothctl is already scanning. returns true/false

  • isBluetoothReady : checks if our bluetooth controller ready.returns true/false

  • isBluetoothControlExists : checks if we have a bluetooth hardware or not.

  • devices : returns the scanned and found devices as array. example output at below..

  • controllers : returns the found bluetooth hardware devices.


  • Controller: event fires when bluetooth controller detected from system

  • DeviceSignalLevel: event fires when a discoverable bluetooth device's signal level detected.

  • Device: event fires when a new device found or a device sends its features

  • PassKey: event fires when passkey confirmation is required to pair device. confirmPasskey(true) should be called in response to this event.

Basic usage

 var blue = require("bluetoothctl");

 blue.on(blue.bluetoothEvents.Controller, function(controllers){
 console.log('Controllers:' + JSON.stringify(controllers,null,2))

 blue.on(blue.bluetoothEvents.DeviceSignalLevel, function(devices,mac,signal){
     console.log('signal level of:' + mac + ' - ' + signal)


 blue.on(blue.bluetoothEvents.Device, function (devices) {
     console.log('devices:' + JSON.stringify(devices,null,2))

 blue.on(blue.bluetoothEvents.PassKey, function (passkey) {
     console.log('Confirm passkey:' + passkey)

 var hasBluetooth=blue.checkBluetoothController();
 console.log('system has bluetooth controller:' + hasBluetooth)

 if(hasBluetooth) {
     console.log('isBluetooth Ready:' + blue.isBluetoothReady)
         console.log('stopping scan')

Sample output of controller:

    "mac": "B8:27:EB:2E:66:7B",
    "name": "raspberrypi"

Sample output of devices:

    "mac": "00:0C:8A:8C:D3:71",
    "name": "Bose Mini SoundLink",
    "signal": 0,
    "paired": "yes",
    "trusted": "yes",
    "icon": "audio-card",
    "class": "0x240428",
    "blocked": "no",
    "connected": "no",
    "trycount": 1