Détecter des iBeacons avec Node.js

Détecter des iBeacons avec Node.js

iBeacons et Bluetooth LE : les balises Bluetooth LE (Bluetooth Low Energy) sont arrivés dans le monde qui nous entoure depuis qu’Apple a sorti la marque iBeacon, qui définit un cadre d’usage et d’intégration des appareils Bluetooth LE. Les iBeacons décomposent le Bluetooth LE en 3 caractéristiques clés : la diffusion, le traçage et la détection plus ou moins proche.

Bluetooth LE et iBeacon

Broadcast and trackiBeacon, est similaire à certains égards à des services de géolocalisation GPS mobiles. Contrairement à la géolocalisation GPS qui donne aux applications mobiles une notion de voisinage ou de proximité (limitée à des scénarios en plein air et pour lesquels on capte le signal des satellites GPS), un iBeacon BLE apporte à l’app mobile la notion de proximité par rapport à d’autres appareils iBeacon. La distance peut être utilisée pour trianguler où se situe l’utilisateur par rapport à un emplacement connu d’une balise fixe ou pour déterminer si l’utilisateur se trouve dans un champ de proximité « immédiat », « proche » ou « loin » par rapport à l’appareil.

L’expansion du Bluetooth

RangingLe marketing et l’intégration par Apple du Bluetooth LE dans la plateforme iOS7 a provoqué une prolifération de la technologie Bluetooth autour des iBeacons. La mise en œuvre d’importantes applications comme l’installation dans les stades de baseball de la Major League of BaseBall, ou encore le système de paiement par Beacon de Paypal en font des installations ou des emplacements intelligents. Des startups comme Estimote, Shelf Bucks, ou Peeble facilitent le travail des développeurs et des entreprises dans l’intégration de cette technologie dans la vie de tous les jours de leurs clients et de leurs applications mobiles. La technologie iBeacon est mûre pour changer à jamais les kiosques, les ventes en tête de gondole, les terminaux de paiement ainsi que les installations autour de nous. Historiquement, ces points d’interaction avec votre appareil mobile étaient aveugles, muets et silencieux pour votre mobile. Historiquement, la chasse d’eau automatique des toilettes était ce qu’il y avait de plus intelligent dans votre lieu de vente, elle était au moins capable de détecter que la personne s’était reculée pour nettoyer à grande-eau. Grâce aux iBeacons, les magasins, ainsi que les appareils à l’intérieur seront au courant des dispositifs mobiles présents dans la boutique (et par extension de leur possesseur). Cela donne alors des données d’analyse et un éclairage dans le domaine du comportement et de l’interaction des clients dans les magasins, tout en offrant de nouvelles expériences dans la vente.

Vous êtes l’empreinte de votre mobile

Lorsque vous ouvrez une application mobile nécessitant que le Bluetooth BLE soit activé, votre empreinte Bluetooth (signature) détecte votre position et votre comportement grâce à votre proximité avec les autres appareils et machines captant et émettant du Bluetooth LE. De la même façon qu’un cookie web permet aux e-commerçants de tracer votre parcours sur un site web, vos interactions dans le monde réel peuvent être tracées du fait que vous échangez avec des appareils Bluetooth LE comme les iBeacons.

La puissance de Node.js

En utilisant LoopBack de StrongLoops et le package npm bleacon, il est très facile de tracer une application mobile iBeacon avec Node.js. Vous allez voir comment faire cela sur votre machine locale, tracer les interactions vues depuis votre machine.

Tracer les interactions Bluetooth LE en 6 commandes et 25 lignes de code.

Vous pouvez mettre en place la démo tout seul et voir que cela fonctionne sur un MacBook pro (nécessite Mavericks minimum ainsi qu’un chipset Bluetooth 4.0) avec Node.js simplement en clonant le dépôt « git clone https://github.com/mschmulen/tracking-bluetooth-ibeacons-with-node » et en lançant l’application avec la commande « slc run app.js », ou vous pouvez aussi l’installer à partir de zéro en suivant les instructions ci-dessous.

Commandes

npm install -g strong-cli 
slc lb project ibeacon-node-collector
cd ibeacon-node-collector 
npm install --save bleacon
slc lb model ibeacon
slc lb model engagement

Les commandes ci-dessus installent strong-cli qui nous donne accès à la commande « slc lb » (« yo loopback »pour LoopBack 2.x) qui permet d’ajouter rapidement une couche API et d’ajouter nos modèles de données « beacon » et « engagement ». Installez également le package npm bleacon et ses dépendances.

Code

Créez ensuite un répertoire « boot » dans le répertoire « ibeacon-node-collector » ainsi qu’un fichier init.js. Ajouter les 10 lignes ci-dessous dans le fichier  « ~/ibeacon-node-collector/boot/init.js » nouvellement créé.

var ibeacon = app.models.ibeacon;
var Bleacon = require('bleacon');
var ibeaconCache = new Array();Bleacon.on('discover', function(bleacon) {
console.log( bleacon );
var myID = 0;
var guid = bleacon.uuid + bleacon.major + bleacon.minor;
console.log ( guid + ":" + bleacon.uuid + "," + bleacon.major + "," + bleacon.minor );
if ( guid in ibeaconCache ) { myID = ibeaconCache[guid]; }
ibeacon.upsert(	{ 
	id: myID , 
	guid:guid, 
	uuid:bleacon.uuid, 
	major:bleacon.major, 
	minor:bleacon.minor 
}, function( error, _ibeacon) {
	ibeaconCache[guid] = _ibeacon.id;
	if ( error ) { console.log( "error on upsert " ); }
	else {
		console.log( "upsert - :" + _ibeacon.id + " guid " + _ibeacon.guid );
		var eng = app.models.engagement;
		eng.create({ pBeaconID: _ibeacon.id, timestamp: Date.now(), rssi: bleacon.rssi, proximity: bleacon.proximity });
	} //end else success
}); //end upservar signal = [bleacon.rssi/5];
var xs = new Array(Math.floor(-bleacon.rssi/2) + 1).join('x');
console.log("rssi:" +xs);});//end on discoverBleacon.startScanning();

Testez la mise en place de tout ça en installant une application iBeacon. Vous pouvez utilisez l’application Estimote Virtual Beacon sur l’AppStore pour cette démo. Démarrez l’application Estimote en mode «diffusion  iBeacon » :

ble-apps-2

Lancez l’application node sur votre machine avec la commande :

slc run app.js

En plus de stocker « en mémoire » les interactions (la présence d’iBeacons), le code ci-dessus vous montrera dans la console la mesure de puissance du signal de réception (RSSI), au fur et à mesure que votre application node recevra les évenements ‘discover’ du module Bleacon. La valeur du RSSI est utilisée pour déterminer la proximité d’un appareil Bluetooth LE :

console-run

Stockage persistant dans MongoDB

Vu que l’application utilise Node, elle peut tourner sur n’importe quel système capable d’exécuter Node.js, comme sur un Raspberry PI par exemple. Vous pouvez alors créer un simple traceur qui, accroché au mur tracera toutes les interactions Bluetooth LE qui surviennent dans votre environnement quotidien. Si vous souhaitez stocker de manière permanente vos données d’analyse, vous pouvez changer le lien du modèle LoopBack dans le fichier datasources.json pour pointer vers des sources de données comme MongoDB, MySQL, PostgreSQL ou Oracle. Vous trouverez plus d’informations au sujet de la configuration de votre API Node.js avec les différents connecteurs et sources de données dans la documentation de StongLoop. Jetons un œil maintenant sur les quelques signatures et présences d’iBeacon que nous avons capturés, en utilisant l’explorateur LoopBack (LoopBack Explorer) sur votre machine, en vous rendant, avec votre navigateur à l’adresse « http://localhost:3000/explorer/ ».

loopback-explorer-beacon

L’API de recherche et de filtrage pour l’analyse des interactions

En utilisant l’API de LoopBack, vous pouvez voir toutes les signatures iBeacon enregistrées dans le système en vous rendant sur le point d’entrée de l’API JSON : « http://localhost:3000/api/engagements ».

api-ibeacons

Vous pouvez aussi filtrer les interactions sur la base du GUID, grâce à la fonction prédéfinie « filter », par exemple : « http://localhost:3000/api/engagements?filter[where][id]=1 ». Vous pouvez également faire du filtrage plus complexe sur le temps de l’interaction ou sur la proximité ou un mix de tous les paramètres disponibles : http://localhost:3000/api/engagements?filter[where][id]=2&filter[where][proximity]=near.

loopback-filter-near

Identifier les signatures iBeacon de mobiles anonymes et identifier les personnes

Faites correspondre l’utilisateur avec la signatureiBeacon anonyme et vous pouvez commencer à suivre les personnes qui sont à 30 mètres de votre machine. Si vous voulez franchir ce pas, utilisez simplement l’objet prédéfini dans LoopBack « user model », en ajoutant un index au modèle « beacon ». Lorsque vous convertissez toutes vos signatures  beacon anonymes en utilisateurs identifiés, l’analyse des données des interactions vous montre alors le comportement de utilisateur dans le monde réel. La conversion depuis une signature iBeacon d’utilisateur inconnu et anonyme en un utilisateur identifié est la raison pour laquelle les commerçants veulent que vous utilisiez leur « application de fidélité » (ex-carte de fidélité) dans leur magasin et que vous vous connectiez.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


9 − = sept

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>