Tracking de iBeacon sur NodeJS avec RPi

Depuis plus d’un an tout le monde parle de iBeacon, souvent sans avoir testé… J’ai donc rapidement fait un Proof of Concept pour comprendre.

iBeacon c’est quoi ?

C’est un petit objet connecté, qui joue le rôle de balise de détresse en envoyant un signal Bluetooth Low Energy (BLE) toutes les X millisecondes. Plus précisément iBeacon est le nom du protocole inventé par Apple.

J’ai acheté des beacons Estimote et StickNFind. Il y a plein d’autres modèles ! Les Estimotes semblent être les plus utilisées mais sont TRES grosses.

A quoi ça sert ?

Apple a proposé 2 cas d’usages, que les entreprises se sont empressées de suivre:

Geofencing

Le principe est d’installer des iBeacons dans les rayons des magasins. Quand un mobile (iPhone / Android) s’approche à une certaine distance de la balise (1 mètre), une application vous propose une promotion Nutella ou une documentation Leroy Merlin…

Geolocalisation

Le principe est d’installer la balise dans le c__ollier de paflechat. Puis de tracker la distance qui sépare le mobile de l’objet jusqu’à ce que paflechat.

La portée théorique des beacons varie de 30 à 80 mètres. Mais les applis mobile trackent tous les beacons de la marque pour mailler les beacons des autres utilisateurs.

Proof of Concept !

La maison gère un nombre fini de personne. Ces personnes n’ont pas toujours un mobile sur eux. L’idée est donc de faire un reverse beacon.

Le principe est de mettre les beacons sur les gens et leurs objets. Puis de les tracker via des iPhones dans les pièces.

Problème

Le iBeacon est un émetteur, mais pourquoi devoir utiliser un p**** de mobile à 1000€ comme récepteur ?

C’est l’effet moutons, les fabricants font des SDK pour mobile pour surfer sur le marketing d’Apple et profiter des communautés de développeur. Mais rien pour les machines fixe. L’iPhone a quand même un « plus » technique avec un signal BLE précis.

Solution

Il est possible de simuler un beacon à partir d’un Raspberry Pi et une clef BlueTooth 4.0. Par exemple cela permets d’envoyer dynamiquement des signaux de détresse différents.

Il est aussi possible de faire l’inverse et sniffer les trames HDI des autres balises !

Bien évidemment ce n’est pas possible sous Windows qui à lancé Q1/2014 une API GATT pour BLE mais interdit l’accès aux trames HDI

Résultats

Il faut 5 lignes de code:

[crayon]
var Bleacon = require(‘bleacon’);

Bleacon.on(‘discover’, function(bleacon) {
console.log(bleacon);
});

Bleacon.startScanning();
[/crayon]

Mais prévoyez des heures pour configurer le Raspberry Pi:

Heureusement en suivant 3-4 tutos (vérifiez les dates !) on s’en sort. Des choses sont de plus en plus prémâchées…

[crayon]
{ uuid: ‘b9407f30f5f8466eaff925556b57fe6d’,
major: 47798,
minor: 18588,
measuredPower: -74,
rssi: -88,
accuracy: 2.024203341255898,
proximity: ‘near’ }
{ uuid: ‘b9407f30f5f8466eaff925556b57fe6d’,
major: 63239,
minor: 41077,
measuredPower: -74,
rssi: -59,
accuracy: 0.46975408678389086,
proximity: ‘immediate’ }
[/crayon]

C’est quoi ça ?

  • uuid: l’identifiant du iBeacon
  • rssi: la distance du beacon
  • measuredPower: la distance du beacon si il était à 1 mètre

Et voilà ! On peut calculer une distance très approximative du beacon 🙂 Ainsi S.A.R.A.H. peut savoir qui est dans quelle pièce.

Conclusion

Ca marche ! Mais le résultat n’est pas très précis. Disons que c’est vraiment adapté pour :

  • du reverse geofencing: quelqu’un rentre dans la zone
  • de la geolocalisation simple: la télécommande n’est pas dans la pièce

Maintenant on peut jouer à cache-cache ou chaud/froid avec SARAH 🙂 J’imagine aussi une interaction avec ma table connectée.

Il ne reste plus qu’a attendre qu’un chinois nous créé des Beacon Tracker low cost… pour remplacer le RPi.

Aller plus loin …

Je devrais recevoir prochainement une Ninja Sphere qui d’après le marketing fait de la géolocalisation indoor … stay tuned

Voici une réponse très intéressante sur Stack Exchange qui explique les limites « en vrai » de volumétrie des iBeacons.

Trilatération ?

Le principe est de faire de la géolocalisation indoor en croisant les données de plusieurs objets.

Dans cette article le développeur trilatérise un beacon à partir de 3 RPi. Il y a quelques jours Estimote à mis à jour ses beacons pour géolocaliser un mobile iOS à partir de 4 beacons.

Et la sécurité ?

A part StickNFind, les Beacons ne sont pas sécurisés. Voici un super article qui fait le point. Il s’amuse à hacker les beacons dans les magasins.

Et la solution RFID ?

Effectivement, le RFID UHF semble une techno très intéressante mais le marché n’a pas encore été disrupté. Les kits de développement coûtent encore entre 500€ et 2000€.

Il y a la question de la santé: Est ce que se prendre 900Mhz dans la tête à longueur de journée ça fait bronzer le cerveau ?

A priori les tags ne doivent pas être entassés, le signal doit être plutôt perpendiculaire, le métal et l’eau peuvent gêner, etc …

Bref, je vais pouvoir ENFIN coder plus qu’un console.log() !

  1. HDI n’est pas vraiment utile dans cet usage. HDI est un protocole sur BT orienté interface Keyboard et mouse.

    J’aime

    1. Je t’avoue que je n’ai pas trop cherché à comprendre vu le peu de résultats. Apparemment les couches hautes de windows imposent que le device soit rajouté (avec code pin) pour y avoir accès. Mais les beacons ne sont pas persistant et windows les perds. Des gens disaient d’attaquer les trames en dessous mais visiblement c’était pas simple.

      Sur le RPi il y avait 90% d’articles pour émuler un Beacon mais quelques articles sur le Reverse Beacon donc plus simple à tester 🙂 et j’ai cru lire HDI a plusieurs reprises mais c’est peut-être une erreur.

      J’aime

  2. Ben faire du scan BLE c’est assez simple si tu as une stack Bluez bien configurée. Exemple en python : http://www.switchdoc.com/2014/08/ibeacon-raspberry-pi-scanner-python/

    J’aime

  3. Oui c’est le lien que j’ai mis dans l’article

    J’aime

  4. C’est amusant, je n’ai trouvé que 4 personnes qui communique sur le sujet alors que le protocole a plus de 1an je crois ?

    Ce gars visiblement pro du RPi
    Un autre qui a repris les script en python et a rajouté une très belle couche bluetooth au dessus de Bluez et qui a fait de la trilateration pour un mini projet
    Un autre qui avait modifié un peu les script python pour ses usages
    Un autre pour hacker les beacons

    J’espère que ça va plus se démocratiser… ou sinon RFID …

    J’aime

  5. Intéressant, mais comme tu l’as démontré JP, encore trop limité, même si les tarifs sont abordables.
    J’avais vu sur le site de Cedric (Maison et Domotique), qu’il avait fait un article sur un émetteur et récepteur RFID pour mettre dans sa voiture et j’avais commencé à regarder sur le site chinois, car ce n’étais vraiment pas cher. Ca m’aurais permis de faire ce que je voulais faire comme mini géoloc chez moi.
    Puis, j’ai perdu de vue, parce que pris par autre chose.
    Je trouve que ses iBeacon pourraient avoir un avenir, mais encore une fois la Pomme garde ça bien pour lui. Il n’ouvre rien comme d’hab.
    Mais je suis sure que ça va donner des idées à d’autre qui vont nous pondre un truc opensource, avec API et dans les même tarifs.
    Ce n’est qu’une question de temps je pense.

    J’aime

  6. Tiens je viens de trouver des gens qui semble industrialiser le machin:
    http://context.reelyactive.com/technology.html

    Mais c’est étrange ils parlent de BLE et 900Mhz propriétaire… par ailleurs les récepteur balance l’infos sur le cloud et non localement … :-/

    J’aime

  7. A priori les Estimote sont très bien détecté (mais ce sont des devices de dev)

    Par contre les StickNFind pas du tout. Je me demande si ils sont cryptés ? Leur site mobile est vraiment pas top…

    J’ai un autre truc Bluetooth qui est détecté mais je ne sais pas lequel 😛

    J’aime

  8. Salut JP. Ta solution recherché est la suivante :
    – « Beacon Tracker low-cost » http://shop.reelyactive.com/collections/infrastructure/products/ra-r436
    – Middleware Node.js que tu peux rouler localement https://www.npmjs.org/package/barnowl

    On peut te montrer comment faire un « hub » pour connecter le reelceiver à ton ordi/Pi via USB pour ~40$, sinon on a un « hub » Ethernet dans notre Starter Kit: http://shop.reelyactive.com/collections/starter-kits/products/starterkit-ble

    Et oui, c’est testé ETSI pour opération en Europe. 😉

    J’aime

  9. Merci, c’est excellent !! c’est exactement cela, après avoir rapidement regardé les quelques articles il y a quelques points que je ne comprends pas:

    Les Reelceivers sont des devices RJ45 que l’on chaîne jusqu’à un boitier Hub connecté à un PC qui à un NodeJS. On indique sur le Hub l’IP du PC avec lequel il peut communiquer en UDP sur le port 50000 ?

    Pourquoi chaîner les Reelceivers ? C’est pas « simple » de tirer des câbles entre les pièces ? Et plusieurs Reelceivers dans une pièce c’est too much ? A priori la portée du BLE est grande ?
    Est ce que vous faites de la trilatération ou geolocalisation indoor des tags ? Avec quelle précision ?
    Est ce qu’il y a des marques de tag iBeacon qui marchent mieux ? Et de petite taille (les estimotes sont énormes) ?
    J’ai vu un modèle 900Mhz ? Est ce que vous géreriez un jour des tags passifs RFID UHF ?

    En fait mon rêve serait
    – de brancher dans chaque pièce un Reelceivers (sans travaux)
    – qui captent les iBeacon, et autres mobiles BLE.
    – puis log localement ces infos
    – et/ou envoie à SARAH (NodeJS)

    Ca voudrait dire 1 Reelreceiver + 1 Hub + 1 RPi dans chaque pièce ? Le Hub n’est pas sans fil ? On ne peut pas faire tourner un petit code nodejs sur le Hub ?

    J’aime

  10. Des mesures sur les Estimotes:
    http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

    In the Real World

    Having completed these experiments, I’ve been able to conclude that achieving accurate distance measurements with a single beacon is potentially possible, provided you have the right beacon and the right brand. Out of eight beacons, I only found one that was consistently achieving accurate distances.

    J’aime

Laisser un commentaire