Skip to content

Instantly share code, notes, and snippets.

@dbaba
Last active October 11, 2015 03:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dbaba/9d3202256e3db598238e to your computer and use it in GitHub Desktop.
Save dbaba/9d3202256e3db598238e to your computer and use it in GitHub Desktop.
An independent sample code from https://github.com/sandeepmistry/noble
// perform `npm install noble async` prior to running this.
var async = require('async');
var noble = require('noble');
var peripheralId = process.argv[2];
noble.on('stateChange', function(state) {
if (state === 'poweredOn') {
noble.startScanning([], true);
} else {
noble.stopScanning();
}
});
noble.on('discover', function(peripheral) {
if (peripheral.id === peripheralId) {
noble.stopScanning();
console.log('peripheral with ID ' + peripheralId + ' found');
var advertisement = peripheral.advertisement;
var localName = advertisement.localName;
var txPowerLevel = advertisement.txPowerLevel;
var manufacturerData = advertisement.manufacturerData;
var serviceData = advertisement.serviceData;
var serviceUuids = advertisement.serviceUuids;
if (localName) {
console.log(' Local Name = ' + localName);
}
if (txPowerLevel) {
console.log(' TX Power Level = ' + txPowerLevel);
}
if (manufacturerData) {
console.log(' Manufacturer Data = ' + manufacturerData.toString('hex'));
}
if (serviceData) {
console.log(' Service Data = ' + serviceData);
}
if (localName) {
console.log(' Service UUIDs = ' + serviceUuids);
}
console.log();
explore(peripheral);
}
});
function explore(peripheral) {
console.log('services and characteristics:');
peripheral.on('disconnect', function() {
process.exit(0);
});
peripheral.connect(function(error) {
peripheral.discoverServices([], function(error, services) {
var serviceIndex = 0;
async.whilst(
function () {
return (serviceIndex < services.length);
},
function(callback) {
var service = services[serviceIndex];
var serviceInfo = service.uuid;
if (service.name) {
serviceInfo += ' (' + service.name + ')';
}
console.log(serviceInfo);
service.discoverCharacteristics([], function(error, characteristics) {
var characteristicIndex = 0;
async.whilst(
function () {
return (characteristicIndex < characteristics.length);
},
function(callback) {
var characteristic = characteristics[characteristicIndex];
var characteristicInfo = ' ' + characteristic.uuid;
if (characteristic.name) {
characteristicInfo += ' (' + characteristic.name + ')';
}
async.series([
function(callback) {
characteristic.discoverDescriptors(function(error, descriptors) {
async.detect(
descriptors,
function(descriptor, callback) {
return callback(descriptor.uuid === '2901');
},
function(userDescriptionDescriptor){
if (userDescriptionDescriptor) {
userDescriptionDescriptor.readValue(function(error, data) {
if (data) {
characteristicInfo += ' (' + data.toString() + ')';
}
callback();
});
} else {
callback();
}
}
);
});
},
function(callback) {
characteristicInfo += '\n properties ' + characteristic.properties.join(', ');
if (characteristic.properties.indexOf('read') !== -1) {
characteristic.read(function(error, data) {
if (data) {
var string = data.toString('ascii');
characteristicInfo += '\n value ' + data.toString('hex') + ' | \'' + string + '\'';
}
callback();
});
} else {
callback();
}
},
function() {
console.log(characteristicInfo);
characteristicIndex++;
callback();
}
]);
},
function(error) {
serviceIndex++;
callback();
}
);
});
},
function (err) {
peripheral.disconnect();
}
);
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment