Hackons le Dash Button d’Amazon

Amazon Dash Button

Le Dash Button d’Amazon est enfin disponible en France ! Si vous n’en avez jamais entendu parler, ce bouton connecté permet de commander, d’une simple pression, un produit de votre quotidien sur Amazon. Il ne coûte que 5€ et cette somme est intégralement remboursée lors de la première commande passée avec le bouton, c’est donc l’objet connecté le moins cher du marché. Si je vous en parle, c’est que j’ai reçu le mien aujourd’hui et qu’avec quelques lignes de code et un Raspberry Pi, il est possible de l’utiliser pour effectuer les actions de votre choix : allumer une lampe, ouvrir votre porte de garage ou encore commander une pizza. Tout ça grâce à un programme écrit en Node.js. Venez, je vous montre.

Comment ça marche ?

Le principe de base est plutôt simple : placez le Dash Button à côté de votre brosse à dent, lorsque vous remarquez que votre dentifrice est bientôt vide, effectuez une pression sur le bouton et vous recevrez deux jours plus tard un nouveau tube de dentifrice. Évidemment, ça fonctionne avec plusieurs produits du quotidien : lessive, thé, mouchoirs et beaucoup d’autres. Je trouve ce bouton révolutionnaire !

En fait, lorsqu’on appuie sur le Dash Button, il se connecte à un réseau wifi et contacte les serveurs d’Amazon pour leur indiquer que l’on souhaite commander le produit qui est associé au bouton. Comme tous les périphériques réseau, le Dash Button possède une adresse MAC (adresse unique qui est attribuée en usine). Il suffit donc de surveiller le réseau à la recherche de requêtes utilisant cette adresse MAC pour détecter les appuis sur le bouton. Quand une requête est détectée, il n’y plus qu’à déclencher l’action de votre choix. C’est simple !

Niveau composants, le Dash Button est équipé d’un microphone (qui ne semble pas être utilisé pour le moment), d’un module wifi capable de se connecter aux réseaux 802.11 b/g/n, d’un module bluetooth Low Energy et d’un microcontrôleur ARM. Le tout est alimenté par une batterie AAA qui rend le Dash Button complétement autonome et lui permet d’effectuer jusqu’à 1000 commandes.

Procurez-vous un Dash Button

Vous êtes intéressés ? Pour obtenir un Dash Button, vous devez être membre Amazon Premium (cet abonnement est gratuit pendant un mois, yeah !) et vous rendre sur la page dédiée. Différents boutons sont proposés, chacun est associé à une marque. En choisissant le Dash Button d’une marque, vous pourrez choisir le produit de la marque qui sera commandé à chaque pression sur le bouton. Comme nous n’allons pas utiliser le Dash Button pour effectuer des commandes sur Amazon mais pour effectuer des actions personnalisées, choisissez celui que vous trouvez le plus beau !

Choix du Dash Button sur la boutique Amazon

Amazon propose aussi un bouton qui permet aux développeurs de déclencher des actions personnalisées de manière officielle. Vous en apprendrez plus à son sujet sur la page dédiée. C’est gentil d’avoir pensé aux développeurs mais ce bouton présente plusieurs désavantages : il coûte 19.95$ (4x fois plus que le Dash Button original alors que le matériel utilisé semble être le même), il n’est disponible qu’aux États-Unis et en plus, Amazon impose d’utiliser ses services de cloud pour déclencher les actions associées au bouton. Je préfère hacker mon bouton à 5€, pas vous ?

Configuration du bouton

Quand vous aurez reçu votre Dash Button, vous devrez le paramétrer. Ça se passe dans l’application mobile « Boutique Amazon » (Androïd / iOS). Il faut aller dans le menu, cliquer sur « Votre compte » puis sur « Configurer un appareil », dans la catégorie « Gérer les appareils ». Ensuite, vous devrez valider les conditions d’utilisation.

Menu de l'application Boutique AmazonValidation des conditions d'utilisation

L’application va utiliser le bluetooth de votre téléphone pour configurer le Dash Button. Pour mettre le bouton en mode configuration, appuyez dessus jusqu’à ce que la led bleue clignote. La première étape consiste à configurer le réseau wifi sur lequel se connectera la Dash Button.

Passage du Dash Button en mode configurationConfiguration de la connexion wifi

Ensuite, l’application vous propose de choisir le produit qui sera commandé à chaque pression sur le bouton. Abandonnez la configuration pour qu’aucun produit ne soit associé au bouton, ça évitera qu’une commande ne soit passée sur Amazon à chaque fois que vous voulez déclencher votre action personnalisée.

Sélection du produit associé au boutonAbandon de la configuration

Création de l’action personnalisée

Pour écouter les requêtes qui sont envoyées par le bouton, nous allons utiliser un programme écrit en Node.js. L’avantage, c’est que le Dash Button est disponible depuis un moment aux États-Unis, plusieurs modules permettant de déclencher une action quand une pression est détectée existent donc déjà. Nous n’allons évidemment pas réinventer la roue et utiliser un module existant, j’ai choisi « node-dash-button ».

Prérequis

Tout se passe sur le Raspberry Pi. Ouvrez un terminal, soit directement, soit en SSH. Nous allons avoir besoin des programmes Node.js, npm et git. Pour vérifier s’ils sont installés, utilisez ces commandes :
node -v
npm -v
git --version

Si pour une de ces commandes, la réponse est command not found c’est que le programme associé n’est pas installé.

Pour installer Node.js et npm, utilisez les commandes suivantes :

wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb

Et celle-ci pour installer Git :

sudo apt-get install git

Le module Node.js que nous allons mettre en place utilise le programme « libpcap » pour capturer les paquets qui circulent sur le réseau. Pour l’installer, exécutez la commande :

sudo apt-get install libpcap-dev

Création du projet

Il est temps de créer un répertoire dédié au projet :

mkdir dash-button
cd dash-button

Ensuite, il faut initialiser un projet Node.js dans ce répertoire :

npm init

Plusieurs informations vous sont demandées, laissez les valeurs par défaut.

Pour télécharger le module Node.js « node-dash-button » qui permet de déclencher une action personnalisée quand on appuie sur le Dash Button, tapez :

npm install node-dash-button --save

Récupération de l’adresse MAC

Afin détecter les appuis sur le bouton, il faut identifier son adresse MAC. L’utilitaire « findbutton » inclu au module « node-dash-button » permet d’effectuer cette tâche. Exécutez-le :

cd node_modules/node-dash-button
sudo node bin/findbutton

Une fois qu’il est lancé, appuyez sur le bouton pour que ce dernier se connecte au réseau wifi et émette une requête. Vous devriez voir apparaître le bouton dans la liste des périphériques :

Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'
Possible dash hardware address detected: 50:f5:da:3f:28:c9 Manufacturer: Amazon Technologies Inc. Protocol: udp

Dans mon cas, le Dash Button a pour adresse MAC 50:f5:da:3f:28:c9. Notez cette adresse dans un coin.

Personnalisation de l’action déclenchée

Revenez à la racine du projet :

cd ../../

Créez un fichier index.js et ouvrez-le en édition :

touch index.js
nano index.js

Commencez par charger le module « node-dash-button » et indiquez-lui l’adresse MAC pour laquelle il va devoir détecter les requêtes (pensez à modifier l’adresse MAC par la vôtre) :

var dash_button = require('node-dash-button');
var dash = dash_button('50:f5:da:3f:28:c9', null, null, 'all');

Il ne reste alors qu’à déclencher votre action lorsqu’un appui sur le bouton est détecté :

dash.on('detected', function (){
    console.log(new Date() + ' : Une pression sur le Dash Button a été détectée.');
    // Faites ce que vous voulez ici
});

Pour finir, quittez nano grâce aux touches CTRL + X, indiquez que vous souhaitez enregistrer les modifications puis exécutez le programme que nous venons de créer :

node index.js

Rien de bien sorcier ! Il existe des modules Node.js pour faire à peu près tout et n’importe quoi, laissez marcher votre imagination !

Contrôlez une lampe

Vous êtes en manque d’inspiration ? Je vais vous montrer comment changer l’état du GPIO n°4 du Raspberry Pi à chaque pression sur le Dash Button. En reliant ce GPIO à un relais, vous pourrez faire de la domotique et commander toute sorte d’équipements électriques, une lampe par exemple. Ce code utilise le module Node.js « onoff » que vous devez télécharger avec npm (vous savez comment faire maintenant !) :

var gpio = require('onoff').Gpio;
var light = new gpio(4, 'out');
    
var dash_button = require('node-dash-button');
var dash = dash_button('50:f5:da:3f:28:c9', null, null, 'all');

dash.on('detected', function (){
    console.log(new Date() + ' : Une pression sur le Dash Button a été détectée.');
    light.writeSync(light.readSync() === 0 ? 1 : 0);
});

Câblez votre relais 5V (j’ai trouvé le mien sur Amazon : XCSOURCE TE213) conformément au schéma suivant :

Câblage d’un relais avec le Raspberry Pi

Si les 3.3V envoyés par le GPIO du Raspberry sont suffisants pour faire commuter votre relais, vous n’aurez pas besoin du MOSFET 2N7000 (composant qui se trouve sur la plaque de prototypage). Vous pouvez faire un essai en branchant directement le GPIO n°4 du Raspberry Pi sur l’entrée « IN » du relais et en exécutant le code. Si le relais commute lorsque vous appuyez sur le Dash Button, c’est tout bon ! Sinon, vous devrez utiliser un MOSFET, comme moi.

De mon côté, je me suis un peu amusé à l’approche de Noël :

Je vous avais bien dit qu’on pouvait faire des choses formidables avec seulement quelques lignes de code ! Pour en apprendre un peu plus sur le module Node.js « node-dash-button » que nous avons utilisé, vous pouvez consulter son dépôt GitHub. Certains bidouilleurs américains ont tenté de reprogrammer directement le microcontrôleur du Dash Button mais il semble qu’ils n’y soient pas encore arrivés. S’ils y parviennent, les possibilités offertes par cet objet seront encore plus grandes ! N’hésitez pas à me dire dans les commentaires quelles actions vous déclenchez avec votre Dash Button. Certains ont déjà mis la barre très haute mais faites-moi rêver !

Commentaires

gat - Il y a 5 mois

salut comment controller les ampoules philips avec?

Ludovic - Il y a 5 mois

Bonjour ! Il existe plusieurs modules Node.js capables d’interagir avec les ampoules Philips, voici l’un d’entre eux : node-hue-api. Bon week-end !

Xtof - Il y a 3 semaines

Après avoir essayé différentes approches, enfin une qui fonctionne !!! J’ai juste ajouté une petite request IFTTT et ça marche nickel… Merci !!! Xtof

Ludovic - Il y a 2 semaines

Bonjour,

Je suis content d’avoir pu t’aider avec cet article 🙂 C’est vrai que d’autres approches existent mais seule celle que je présente ici fonctionne avec les dernières versions du bouton.

Bon weekend !


Vous avez aimé cet article ? Dites-le !